容器应用优雅关闭

通过Prestop参数调用

1
定义一个优雅关闭的脚本,通过 k8s-prestop 在关闭 POD 前调用优雅关闭脚本,实现 pod 优雅关闭。

shell脚本修改为exec执行

1
shell 中添加一个 exec 即可让应用进程替代当前 shell 进程,可将 SIGTERM 信号传递到业务层,让业务实现优雅关闭

通过init工具启动

1
2
使用 dump-init 或 tini 做为容器的主进程,在收到退出信号的时候,会将退出信号转发给进程组所有进程。,主要适用应用本身无关闭信号处理的场景。docker –init 本身也是集成的 tini
使用 tini 或 dump-init 做为应用启动的主进程。tini 和 dumb-init 会将关闭信号向子进程传递,但不会等待子进程完全退出后自己在退出。而是传递完后直接就退出了。

总结

1
2
3
对于容器化应用启动命令建议使用 EXEC 模式。
对于应用本身代码层面已经实现了优雅关闭的业务,但有 shell 启动脚本,容器化后部署到 k8s 上建议使方案一和方案二。
对于应用本身代码层面没有实现优雅关闭的业务,建议使用方案三。

参考地址:
https://mp.weixin.qq.com/s/C5BIEIetZKthVPgbmFhaAw