场景是这样的:
在更多的时候,我们进行滚动升级的时候,我们旧的服务可能还受理了请求或者还有任务在执行,而这个执行时间,可能是几秒钟,也可能是几分钟,如果是大型定时任务跑个半小时也是有的。

此事如果我们使用默认的方式直接对该程序进行滚动升级,则会出现旧的容器很久被干掉的情况,那么里面的程序可能还没跑完。所以我们需要相对优雅的方式来应对这样的情况。

解决方法:
针对这种情况,我们可以选用 preStop 来达到我们的目的

lifecycle:
   preStop:
     exec:
       command:
       - sleep
       - "60"

意思就是,在停止之前执行一段命令,我们通过使用 sleep 来延迟 stop,给容器留有足够的时间来结束自己内部代码的工作。

要注意的是,如上我们设置了 60秒,那么 terminationGracePeriodSeconds 千万不能小于这个 60秒,否则 terminationGracePeriodSeconds 的时间一到,容器就会被强制干掉。

当然,本文只是一个思路,主旨还是告诉你可以在停止容器之前执行一个或一些操作,具体情况仍需结合实际业务处理


(END)

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐