Kubernetes 优美吊舱终端

Kubernetes 优美吊舱终端,kubernetes,Kubernetes,我需要让容器在kubectl终止后运行5分钟。它需要做些工作才能被摧毁。看来kubernetes正好包含了我所需要的: terminationGracePeriodSeconds: 300 所以我在yaml中定义了它。我已经更新了正在运行的RCs,删除了当前的pod,因此创建了新的pod,现在我可以通过get pod xyz-o=yaml看到一个pod正好包含这个设置 不幸的是,当我尝试进行滚动更新时,原来的pod在1分钟后被杀死,而不是在5分钟后。我对目标机器执行ssh,我可以看到docke

我需要让容器在
kubectl
终止后运行5分钟。它需要做些工作才能被摧毁。看来kubernetes正好包含了我所需要的:

terminationGracePeriodSeconds: 300
所以我在yaml中定义了它。我已经更新了正在运行的
RCs
,删除了当前的pod,因此创建了新的pod,现在我可以通过
get pod xyz-o=yaml
看到一个pod正好包含这个设置

不幸的是,当我尝试进行
滚动更新时
,原来的pod在1分钟后被杀死,而不是在5分钟后。我对目标机器执行ssh,我可以看到docker在这段时间后终止了容器

我试着调查一下这个功能是如何工作的。我终于找到了
kubectl delete
的文档,其中有一个关于优雅终止期的概念:

默认情况下,所有删除都在30秒内完成。kubectl delete命令支持--grace period=选项,该选项允许用户覆盖默认值并指定自己的值。值0表示delete应该立即删除,并立即删除API中的pod,以便可以使用相同的名称创建新的pod。在节点上,设置为立即终止的POD在被强制终止之前仍将有一个小的宽限期

所以我拿了一个pod,nginx,并尝试用
宽限期=30删除它。原来,原来的pod被立即删除,而
getpods
显示新的pod正在启动

所以没有30秒。我做错了什么?似乎所有的豆荚库伯内特斯都没有考虑到这些值。 请注意,我使用的是kubernetes v1.2.2


我还发现这个问题,记者也有同样的问题,他以同样的方式解决了。因此,例如,300秒对kubernetes来说并不太多。

您可以在“预停止”挂钩中设置魔法睡眠。 此钩子将在
kubectl
向容器发送
SIGTERM
之前执行

比如:

apiVersion:extensions/v1beta1
种类:部署
元数据:
姓名:nginx
规格:
模板:
元数据:
标签:
app:nginx
规格:
容器:
-姓名:nginx
图片:nginx
端口:
-集装箱港口:80
生命周期:
预停止:
执行官:
命令:[“/bin/sleep”,“300”]
愿这对你有帮助


在某些情况下,SIGTERM会猛烈地杀死应用程序,使您无法正常地关闭它。例如,Nginx可以在SIGTERM上快速退出。

虽然这在理论上可以回答这个问题,但在此处包含答案的基本部分,并提供链接供参考。