kubernetes - 终止宽限期秒未按预期工作
问题描述
我的目标是优雅地终止我的 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。我需要更改任何其他设置吗?
解决方案
这按预期工作!当您杀死/删除 pod 时,会向 pod 发送 SIGTERM 信号。kubernetes 在收到 SIGTERM 后等待“terminationgraceperiodseconds”让 pod 正常关闭。
在 terminategraceperiodseconds 过去并且 pod 自行关闭之后,kubernetes 将发送一个 SIGKILL 信号,杀死 pod 而不等待它正常关闭。
因此,如果您的 pod 在 30 秒后终止,而您为终止宽限期秒配置了 60 秒,这仅意味着 pod 在 30 秒后关闭其进程。
推荐阅读
- laravel - $this 是什么意思?
- r - 取消列出而不创建小数
- sitecore - 安装 Sitecore Experience Platform 9.3 时出现错误“test-path $_”
- google-cloud-platform - GCP IoT Core 拒绝公钥并显示“证书采用无效的 PEM 格式”错误消息。有什么问题?
- r - 关于使用 dplyr 的组内平均值
- r - 如何偏移 ax limited 图上的第一个点,使其不在 R 中的 y 轴上?
- memory - 为什么我在 SDL_UpdateTexture 中有“LockRect(): INVALIDCALL”?
- python - 尝试合并嵌套列表中重复键的值
- php - iframe 会话丢失
- html - 我应该如何为具有不同像素比的设备加载图像?