【发布时间】:2019-07-16 21:37:40
【问题描述】:
有没有办法自动延迟 所有 Kubernetes pod 删除请求,以便发出端点注销的信号,但 pod 的 SIGTERM 延迟几秒钟?
如果延迟只影响带有端点/服务的 pod,那将是可取的,但不是必需的。
背景:
wellestablished 是由于端点注销和删除信号的asynchronous 特性,在向 Pod 发送 SIGTERM 终止信号后,一些流量可以继续流向 Pod。推荐的 mitigation 是通过调用 sleep 在 pod 的 preStop 生命周期钩子中引入几秒钟的延迟。
如果 pod 的部署可能通过 helm 或其他上游源完成,或者有大量的部署和容器需要管理,那么困难很快就会出现。以这种方式修改许多部署可能很困难,甚至是不可能的(例如,容器可能没有 sleep 二进制文件、shell 或除应用程序可执行文件之外的任何东西)。
我简要地探索了一个变异准入控制器,但动态添加 preStop 钩子似乎不可行,因为所有图像都没有 /bin/sleep 或已经有可能需要图像特定知识才能合并的 preStop .
(当然,如果 K8S API 使端点注销与超时同步以避免死锁(提示,提示),则所有这些都可以避免,但我还没有看到任何关于这种更改的讨论。是的,那里这不是同步的原因有很多,但这并不意味着不能做某事。)
【问题讨论】:
标签: kubernetes deadlock sigterm