首页/云/云与容器速查/Terminating 卡住排查

Terminating 卡住排查

Pod 删除后长时间 Terminating:通常是 finalizer 未清理、卷卸载失败、kubelet 失联或进程不响应 SIGTERM。先确认卡在哪个环节,再决定是否强制删除。

云与容器速查云更新于 2026-10-13

Terminating 卡住是什么

Pod 删除后长时间停留在 Terminating 状态,常见有四类原因:finalizer 没有被清理、卷卸载或网络清理失败、节点失联导致 kubelet 无法上报状态、进程不响应终止信号直到宽限期结束才被强制杀死。排查的关键是先确认卡在哪个环节——看对象里的删除时间戳与 finalizer、看节点状态、看节点侧日志,再决定是否要强制删除。

基本信息

查看方式kubectl get pod -o yaml 关注 deletionTimestamp 与 finalizers 字段
进程不退出应用不处理终止信号,等满宽限期(默认 30 秒)后才被强制杀死
节点失联kubelet 无法上报状态,Pod 状态长期不变
卷与网络卸载或网络资源清理失败,节点侧日志会有明确报错
强制删除--force --grace-period=0 是最后手段,可能留下孤儿进程

典型使用场景

  • 滚动更新卡住:新版本一直等不到旧 Pod 退出,发布流程停在中间
  • 节点故障后 Pod 长期 Terminating,占用资源配额与调度名额
  • 有状态应用缩容时卡在最后一个 Pod,扩容与迁移都无法继续
  • 带 finalizer 的控制器异常,对象一直无法完成删除
  • 节点维护前需要确认 Pod 已彻底停止,避免两处进程同时写同一份数据

排查命令

排查命令
kubectl get pod web-1 -o jsonpath='{.metadata.finalizers}'
kubectl describe pod web-1 | grep -i terminating
kubectl get node node-1   # 节点失联时,其上的 Pod 常会卡住
kubectl get events -n dev --sort-by=.lastTimestamp | tail   # 看最近事件里的失败原因
kubectl delete pod web-1 --force --grace-period=0   # 最后手段,评估影响后再执行

原因与处置方向

现象判断依据处置方向
finalizer 未清理对象里 finalizers 字段仍有残留项确认无实际资源占用后移除 finalizer
进程不响应终止信号到宽限期结束才被强杀应用内处理终止信号并优雅退出
节点失联kubectl get node 显示节点不可用先修节点,必要时清理失联节点上的 Pod
卷卸载失败节点侧日志有卸载相关报错排查存储插件与后端存储状态
有状态应用的 Pod 强制删除存在脑裂风险:必须确认进程真的已经停止再操作,别把『删不掉』单纯当成管理层面的问题。
删除是两阶段过程:控制面先打上删除时间戳并把 Pod 标记为 Terminating,节点侧完成停止与资源清理后对象才真正消失。理解这个顺序有助于判断卡点在控制面还是节点侧。

易错点

  • 无脑强制删除:进程还在运行、地址已被回收,出现幽灵流量与数据并发写入
  • 只看 Pod 不看节点:节点不可用时先修节点,此时删除 Pod 徒劳无功
  • 强行删除仍持有存储卷的 Pod,卷未卸载就挂到新 Pod 上,可能损坏数据
  • 宽限期设置过短且应用不处理终止信号,正在处理的请求被直接切断,用户侧看到报错

数据来源与参考

  • Kubernetes Docs:Pod Lifecycle(Termination)
  • Kubernetes Docs:Force Delete StatefulSet Pods

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌