K8S 滚动发布升级时,延迟销毁容器(更优雅的升级)
场景是这样的:在更多的时候,我们进行滚动升级的时候,我们旧的服务可能还受理了请求或者还有任务在执行,而这个执行时间,可能是几秒钟,也可能是几分钟,如果是大型定时任务跑个半小时也是有的。此事如果我们使用默认的方式直接对该程序进行滚动升级,则会出现旧的容器很久被干掉的情况,那么里面的程序可能还没跑完。所以我们需要相对优雅的方式来应对这样的情况。解决方法:针对这种情况,我们可以选用 preStop 来达
·
场景是这样的:
在更多的时候,我们进行滚动升级的时候,我们旧的服务可能还受理了请求或者还有任务在执行,而这个执行时间,可能是几秒钟,也可能是几分钟,如果是大型定时任务跑个半小时也是有的。
此事如果我们使用默认的方式直接对该程序进行滚动升级,则会出现旧的容器很久被干掉的情况,那么里面的程序可能还没跑完。所以我们需要相对优雅的方式来应对这样的情况。
解决方法:
针对这种情况,我们可以选用 preStop
来达到我们的目的
lifecycle:
preStop:
exec:
command:
- sleep
- "60"
意思就是,在停止之前执行一段命令,我们通过使用 sleep 来延迟 stop,给容器留有足够的时间来结束自己内部代码的工作。
要注意的是,如上我们设置了 60秒,那么 terminationGracePeriodSeconds
千万不能小于这个 60秒,否则 terminationGracePeriodSeconds
的时间一到,容器就会被强制干掉。
当然,本文只是一个思路,主旨还是告诉你可以在停止容器之前执行一个或一些操作,具体情况仍需结合实际业务处理
(END)
更多推荐
已为社区贡献24条内容
所有评论(0)