Kubernetes中的Pod自动删除延迟
是否有一种方法可以自动延迟所有Kubernetes pod删除请求,从而发出端点注销的信号,但pod的SIGTERM会延迟几秒钟 如果延迟只影响具有端点/服务的POD,则这将是更好的选择,但不是必需的 背景: 由于端点注销和删除信号的性质,在Pod被发送SIGTERM终止信号后,一些流量可以继续发送到Pod。建议通过调用Kubernetes中的Pod自动删除延迟,kubernetes,deadlock,sigterm,Kubernetes,Deadlock,Sigterm,是否有一种方法可以自动延迟所有Kubernetes pod删除请求,从而发出端点注销的信号,但pod的SIGTERM会延迟几秒钟 如果延迟只影响具有端点/服务的POD,则这将是更好的选择,但不是必需的 背景: 由于端点注销和删除信号的性质,在Pod被发送SIGTERM终止信号后,一些流量可以继续发送到Pod。建议通过调用sleep在pod的preStop生命周期挂钩中引入几秒钟的延迟 如果pod的部署可以通过helm或其他上游来源完成,或者需要管理大量的部署和容器,则困难会迅速出现。以这种方式修
sleep
在pod的preStop
生命周期挂钩中引入几秒钟的延迟
如果pod的部署可以通过helm或其他上游来源完成,或者需要管理大量的部署和容器,则困难会迅速出现。以这种方式修改许多部署可能很困难,甚至是不可能的(例如,容器可能没有休眠二进制文件、shell或除应用程序可执行文件以外的任何内容)
我简要地研究了一个变异的准入控制器,但动态添加一个preStop
钩子似乎不可行,因为所有图像都没有/bin/sleep
,或者已经有一个preStop
,可能需要图像特定的知识才能合并
(当然,如果K8S API使端点注销与超时同步以避免死锁(提示,提示),那么所有这些都可以避免,但我还没有看到任何关于这种更改的讨论。是的,有很多原因说明这不是同步的,但这并不意味着无法完成某些操作。)Kubernetes生命周期有以下步骤
- Pod设置为“终止”状态,并从所有服务的端点列表中删除
- 执行预停止钩子
- SIGTERM信号被发送到pod
- Kubernetes等待宽限期,默认值为30秒
- SIGKILL信号被发送到pod,pod被移除
terminationGracePeriodSeconds:90
,如下所示:
spec:
terminationGracePeriodSeconds: 90
containers:
- name: myApplication
你可以阅读库伯内特斯的文件。我还推荐一篇很棒的博文。是的,我了解
terminationGracePeriod
选项——这是关机完成的总超时时间。我想推迟所有吊舱的初始关机,哪怕只是几秒钟。如果我试图增加8秒的初始预停止延迟,我预计大多数POD都不需要更改宽限期。“此外,Kubernetes不会等待预停止挂钩完成。”-请提供此信息的来源?@Vusal,非常感谢您指出这一点。我编辑了答案以反映当前文档。