摘要: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钩子是可以使用并且存在的,可以全部使用、部分使用或者完全不用。
野花
鼓励的话语:宁可千日不将军,不可一日不拱卒!
来源:梦琪教育