是否有一种方法可以自动延迟所有 Kubernetes吊舱删除请求,从而发出终结点注销信号,但吊舱的SIGTERM延迟几秒钟?
如果延迟仅影响具有端点/服务的Pod,那将是可取的,但不是必需的。
背景:
well established是由于端点注销和删除信号的asynchronous性质,在向Pod发送SIGTERM终止信号之后,某些流量可以继续到Pod。推荐的mitigation是通过调用preStop
在pod的sleep
生命周期挂钩中引入几秒钟的延迟。
在可能通过舵机或其他上游源完成吊舱的部署,或者要管理大量部署和容器的情况下,困难迅速出现。以这种方式修改许多部署可能很困难,甚至是不可能的(例如,容器可能没有睡眠二进制文件,shell或应用程序可执行文件以外的任何东西)。
我简要地探讨了一个变异接纳控制器,但是动态添加一个preStop
钩子似乎是行不通的,因为所有图像都没有/bin/sleep
或已经有一个preStop
图像相关的知识进行合并。
(当然,如果K8S API使端点注销与超时同步以避免死锁(提示,提示),所有这些都可以避免,但是我还没有看到有关这种更改的任何讨论。是的,在那里为何不同步的原因很多,但这并不意味着无法完成。)
答案 0 :(得分:0)
Kubernetes生命周期具有以下步骤。
宽限期就是您所需要的。 重要的是要使该宽限期与preStop挂钩和SIGTERM信号并行发生。同样,Kubernetes也不会等待preStop挂钩完成。
因此,例如,您可以设置terminationGracePeriodSeconds: 90
,它可能如下所示:
spec:
terminationGracePeriodSeconds: 90
containers:
- name: myApplication
您可以阅读有关Termination of Pods的Kubernetes文档。我还推荐了很棒的博客文章Kubernetes最佳实践:优雅地终止。