Pod 卡在 Terminating:finalizer 与节点异常的双层排查

举报
shijiu_dev 发表于 2026/11/01 10:32:20 2026/11/01
【摘要】 一次发布后 Pod 长时间停留在 Terminating。本文从 finalizer、节点状态和控制器日志三个方向还原排查过程,给出可验证的修复顺序与防止误删的检查清单。

现象

一次夜间发布后,业务 Pod 已停止接收流量,却持续 Terminating 二十分钟。kubectl get pod 仍能看到实例,Deployment 副本数也降不下来。此时不要先 force delete,否则会掩盖 finalizer、容器事件和外部资源状态。

排查

Terminating 通常卡在两个环节:kubelet 终止容器,以及 metadata.finalizers 清空。先查:

kubectl get pod <pod> -n <ns> -o jsonpath='{.metadata.deletionTimestamp}{"\n"}{.metadata.finalizers}{"\n"}'
kubectl describe pod <pod> -n <ns>
kubectl get node <node>

本次 deletionTimestamp 已存在,finalizer 中有 storage-cleanup;节点同时 NotReady。kubelet 无法完成容器清理,控制器也没有在异常分支移除 finalizer,两个等待叠加,改 Deployment 副本数无效。

根因与修复

控制器日志显示,释放网络存储时返回临时错误。代码把删除 Pod 和释放存储放在一次 reconcile,只监听对象事件;节点失联后事件不稳定到达,清理一直没有完成。

先确认存储资源已释放或可安全重建,再移除阻塞 finalizer:

kubectl patch pod <pod> -n <ns> --type=merge -p '{"metadata":{"finalizers":[]}}'

该命令必须核对外部资源后使用。应用侧应把清理改成幂等操作:成功才移除 finalizer,失败按退避时间重新入队,并设置最大等待时间。非必要的收尾不应长期阻塞 Pod 删除。

预防

为 Terminating 超过五分钟的 Pod 告警;测试节点 NotReady、控制器重启和重复 reconcile;force delete 只能在确认无外部依赖后作为最后手段。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。