首页 > 解决方案 > 终止宽限期秒未按预期工作

问题描述

我的目标是优雅地终止我的 REST 应用程序 Pod。我有 2 个 Pod 正在运行,当 1 个 Pod 被删除时,请求应该被优雅地迁移到其他 Pod。我正在使用 Minikube (v1.20.0) 测试运行 100 个 API 调用的 Jmeter 脚本。我还在我的 API 中添加了 3 秒的延迟。
我尝试将terminationgraceperiodseconds 的值设置为 60,但得知 pod 在 30 秒内被删除,并且我的 jemeter 测试请求中有一些失败。我尝试将 terminategraceperiodseconds 的值减小到 10 秒,并看到 Pod 在 10 秒内被删除。

接下来我阅读了有关 preStop 钩子的内容,并添加了一个睡眠时间为 15 秒的 preStop 钩子。通过此更改,即使我删除了正在转向请求的 pod,我的请求也开始优雅地迁移到其他 pod。

我想知道为什么值设置为 60 秒的参数 terminategraceperiodseconds 需要 30 秒才能终止 pod。我需要更改任何其他设置吗?

标签: kubernetes

解决方案


这按预期工作!当您杀死/删除 pod 时,会向 pod 发送 SIGTERM 信号。kubernetes 在收到 SIGTERM 后等待“terminationgraceperiodseconds”让 pod 正常关闭。

在 terminategraceperiodseconds 过去并且 pod 自行关闭之后,kubernetes 将发送一个 SIGKILL 信号,杀死 pod 而不等待它正常关闭。

因此,如果您的 pod 在 30 秒后终止,而您为终止宽限期秒配置了 60 秒,这仅意味着 pod 在 30 秒后关闭其进程。


推荐阅读