在 Kubernetes 中,Pod 停止时 kubelet 会先给容器中的主进程发 SIGTERM 信号来通知进程进行 shutdown
以实现优雅停止,如果超时进程还未完全停止则会使用 SIGKILL 来强行终止。

容器终止流程:
1、Pod 被删除,状态置为 Terminating。 2、kube-proxy 更新转发规则,将 Pod 从 service 的 endpoint
列表中摘除掉,新的流量不再转发到该 Pod。 3、如果 Pod 配置了 preStop Hook ,将会执行。 4、kubelet 对 Pod 中各个
container 发送 SIGTERM 信号以通知容器进程开始优雅停止。 5、等待容器进程完全停止,如果在
terminationGracePeriodSeconds 内 (默认 30s) 还未完全停止,就发送 SIGKILL 信号强制杀死进程。
6、所有容器进程终止,清理 Pod 资源。
优雅退出,业务侧需要做的任务是处理SIGTERM信号:
要实现优雅终止,务必在业务代码里面处理下 SIGTERM 信号
进程优雅退出的方法

1、preStop-webhook
lifecycle: preStop: exec: command: - sleep - 5s
2、调整优雅终止时间,terminationGracePeriodSeconds
默认是30s。自己视情况而定(terminationGracePeriodSeconds 一定大于sleep的时间)
特别说明: preStop
Hook并不会影响SIGTERM的处理,因此有可能preStopHook还没有执行完就收到SIGKILL导致容器强制退出。因此如果preStop
Hook设置了n秒,需要设置terminationGracePeriodSeconds为terminationGracePeriodSeconds+n秒。

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信