首页 文章

优雅的pod终止

提问于
浏览
2

我需要让容器在 kubectl ' termination. It needs to do some work before it'被破坏后运行5分钟 . 看来kubernetes正是我所需要的:

terminationGracePeriodSeconds: 300

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

不幸的是,当我试图做 rolling-update 时,原来的吊舱在1分钟后被杀死,而不是在5分钟后 . 我确实ssh到目标机器,我可以看到docker在这段时间之后终止了容器 .

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

http://kubernetes.io/docs/user-guide/pods/

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

所以我拿了一个pod,nginx,并尝试用 grace-period=30 删除它 . 事实证明,原始pod立即被删除,并且 get pods 显示正在启动新的pod .

所以没有30秒 . 我究竟做错了什么?似乎所有pods kubernetes都没有考虑这些值 . 请注意,我正在使用kubernetes v1.2.2

我也发现了这个问题https://github.com/kubernetes/kubernetes/issues/24695记者有同样的问题,他以同样的方式解决了这个问题 . 所以例如对于kubernetes而言,300秒并不算太多 .

2 回答

相关问题