kubernetes基础知识之钩子hook

B站影视 2025-01-30 05:11 1

摘要:kubernetes基础知识之钩子,是由pod所在节点的kubelet发起的,当容器中的进程启动之前或者容器中的进程终止之前去执行,这是包含在容器生命周期中的,可以同时为pod中的所有容器都配置hook,也可以不配置。

kubernetes基础知识之钩子,是由pod所在节点的kubelet发起的,当容器中的进程启动之前或者容器中的进程终止之前去执行,这是包含在容器生命周期中的,可以同时为pod中的所有容器都配置hook,也可以不配置。

当前钩子hook的执行方式有两种:

①:exec:执行一段命令。

②:HTTP:发送http请求,就是做一个http的动作请求。

两个钩子hook,一个启动后,一个关闭前。

启动后钩子hook在初始化之后,极有可能在没有执行完成的时候,我们的容器启动命令就开始执行了。

关闭前钩子hook是在关闭信号执行之前去进行的操作。我们要终止容器,先把这个关闭信号拦截下来,先执行我们的关闭前钩子hook,再执行我们的关闭信号。

钩子hook使用的方法,在yaml文件中定义:

lifecycle:

postStart:

exec:

command: ["/bin/sh","-c","echo postStart > /usr/share/message"]

preStop:

exec:

command:["/bin/sh","-c","echo preStop > /usr/share/message"]

这是以exec的方式,定义的钩子hook。

kubernetes进入容器:

kubectl exec -it $pod_name -- /bin/sh

cat /usr/share/message

可以看到钩子hook执行了,文件中有postStart 内容。

关闭前钩子hook查看:

可以在容器中写一个脚本:

while true;

do

cat /usr/share/message

done

终止掉所有容器的命令:

kubectl delete pod --all

在终止掉容器之前,文件的执行动作是没有问题的,也就是关闭前的命令正常执行。

通过http get的方式,也可以验证钩子hook的作用:

lifecycle:

~~~启动后~~~

postStart:

host: x.x.x x

path: index.html

port: 1234

~~~关闭前~~~

preStop:

host: x.x.x x

path: hostname.html

port: 1234

docker 创建容器:

docker run -it -rm -p 1234:80 $image_name:$labels

前面端口号1234代表是宿主机的端口号,冒号后面的80代表容器的端口号。相当于把容器的80端口通过1234端口给暴露出来了。

kubernetes pod的yaml文件中containerPort定义容器的对外端口。

可以通过访问的日志或者记录来确认钩子中的动作是否在执行。

一般设置了启动前钩子的动作,在容器启动之前,会查看到访问日志,比如举例中的访问index.html。

终止容器:

kubectl delete pod --all

如果设置了钩子关闭前的动作,当终止容器之前,也会有访问记录或者日志,并且会有HTTP返回码是200的状态码。

在kubernetes中,理想的状态是pod优雅地释放,但是并不是每一个pod都是那么顺利。比如:

①:pod卡住,处理不了优雅退出的命令或者操作。

②:优雅退出的逻辑有BUG,陷入死循环。

③:代码问题,导致执行的命令没有效果。

kubernetes 终止pod的流程中,有一个“最多可以容忍的时间”,即grace period。它在pod.spec.terminationGracePeriodSeconds字段中定义,这个默认值是30秒。当我们执行kubectl delete pod的时候,也可以通过--grace-period参数显示指定一个优雅退出的时间来覆盖pod中的配置。

如果30秒内我们发送了一个退出信号,到30秒后容器还没退出,那么会通过-9级别的信号终止掉pod中的容器运行。如果我们设置的grace period的时间超时后,kubernetes就会选择强制kill 掉pod,这与preStop Hook和SIGTERM 信号并行发生。kubernetes不会等待preStop Hook完成。如果应用程序完成关闭并且在terminationGracePeriod完成之前退出,kubernetes会立即进入下一步。

Pod生命周期中的initC初始化容器、startup Probe启动探针、liveness Probe存活探针、readiness Probe就绪探针、hook钩子是可以使用并且存在的,可以全部使用、部分使用或者完全不用。

野花

鼓励的话语:宁可千日不将军,不可一日不拱卒!

来源:梦琪教育

相关推荐