宽限期是什么
terminationGracePeriodSeconds 定义 Pod 删除时,从终止流程开始到被 SIGKILL 强制结束的最长等待时间:preStop 钩子执行、应用处理剩余请求并自行退出的总时长都要落在这段预算内。默认 30 秒,可在 Pod 级覆盖。预算估算口径:大于「摘流延迟 + 最长请求处理时间」,长连接与上传、导出类服务需要更长宽限期,同时要确认负载均衡的读超时与重试策略与之匹配,否则宽限期只是延长了失败过程。
基本信息
| 默认值 | 30 秒(Pod 级可覆盖) |
|---|---|
| 计时起点 | Pod 终止流程开始(含 preStop) |
| 超时后果 | 容器被 SIGKILL |
| 估算 | 大于「摘流延迟 + 最长请求处理时间」 |
典型使用场景
- 长请求服务:上传、导出、训练任务需要时间收尾,避免中途被杀。
- 消息消费服务:退出前提交偏移量、完成当前批次处理。
- 连接池清理:优雅关闭数据库连接与外部会话。
- 滚动更新提速:摘流快、退出快,宽限期可以调小加快发布。
- 故障注入演练:主动删除 Pod 验证终止路径的实际耗时。
调大宽限期
调大宽限期
spec:
terminationGracePeriodSeconds: 60
containers:
- name: app
image: registry.example.com/app:1.9.0
lifecycle:
preStop:
exec: {command: ["sh", "-c", "sleep 5"]} # 等摘流生效预算构成
| 环节 | 耗时来源 | 调优方向 |
|---|---|---|
| 摘流 | 端点摘除传播延迟 | preStop 等待或就绪快速翻转 |
| 收尾 | 最长请求处理 | 应用侧优雅退出 |
| SIGKILL | 宽限期到期 | 宽限期大于前两项之和 |
长连接与上传类服务需要更长的宽限期;同时确认负载均衡的读超时与重试策略与之匹配,单向调参无效。
preStop 与宽限期共用一个预算:preStop 里 sleep 太久会挤掉应用自身的收尾时间,两边时长一起核算。
多容器 Pod 共享同一份宽限期预算:任意容器没退出都会拖到期限一到全体 SIGKILL,sidecar 同样要处理 TERM 信号并尽快退出。
宽限期是 Pod 级字段:同一工作负载里不同角色需要不同收尾时间时,应拆成不同负载,或借助注入类工具按 Pod 覆盖。