Eld*_*one 5 deadlock sigterm kubernetes
是否有一种方法可以自动延迟所有Kubernetes pod 删除请求,以便发出端点注销信号,但 pod 的 SIGTERM 延迟几秒?
如果延迟仅影响具有端点/服务的 Pod,则更好,但不是必需的。
背景:
众所周知,由于端点注销和删除信号的异步特性,在 向Pod 发送 SIGTERM 终止信号后,某些流量可以继续流向 Pod 。建议的缓解措施是通过调用 来在 pod 的生命周期挂钩中引入几秒钟的延迟。preStopsleep
如果 pod 的部署可以通过 helm 或其他上游源完成,或者需要管理大量的部署和容器,那么困难很快就会出现。以这种方式修改许多部署可能很困难,甚至不可能(例如,容器可能没有睡眠二进制文件、shell 或除应用程序可执行文件之外的任何内容)。
我简要地探索了一个变异准入控制器,但这似乎无法动态添加preStop钩子,因为所有图像都没有/bin/sleep或已经有preStop可能需要特定于图像的知识来合并。
(当然,如果 K8S API 使端点注销与超时同步以避免死锁(提示,提示),那么所有这一切都可以避免,但我还没有看到任何关于此类更改的讨论。是的,有很多这是不同步的原因,但这并不意味着无法完成某些操作。)
Kubernetes 生命周期有以下步骤。
\n\n宽限期正是您所需要的。\n重要的是要注意这个宽限期是与 preStop 挂钩和 SIGTERM 信号并行发生的。
\n\n\n\n\n如果容器已处于终止或完成状态,则对 preStop 挂钩的调用将失败。它是阻塞的,这意味着它是同步的,因此它必须在发送删除容器的调用之前完成。
\n
在这里您可以阅读有关容器生命周期挂钩的更多信息。
\n\n例如,您可以设置terminationGracePeriodSeconds: 90,这可能如下所示:
spec: \n terminationGracePeriodSeconds: 90\n containers:\n - name: myApplication\nRun Code Online (Sandbox Code Playgroud)\n\n您可以阅读有关Pod 终止的Kubernetes 文档。我还推荐精彩的博客文章Kubernetes 最佳实践:优雅地终止。
\n| 归档时间: |
|
| 查看次数: |
3310 次 |
| 最近记录: |