文档首页/ 云容器引擎 CCE/ 常见问题/ 工作负载/ 工作负载异常/ 工作负载异常:Pod一直处于Terminating状态
更新时间:2024-08-30 GMT+08:00
分享

工作负载异常:Pod一直处于Terminating状态

问题描述

查询某个命名空间下的工作负载时,偶现部分Pod(实例)一直处于Terminating 状态。

例如,查询aos命名空间下的Pod:

#kubectl get pod -n aos
NAME                              READY      STATUS         RESTARTS   AGE
aos-apiserver-5f8f5b5585-s9l92     1/1       Terminating    0          3d1h
aos-cmdbserver-789bf5b497-6rwrg    1/1       Running        0          3d1h
aos-controller-545d78bs8d-vm6j9    1/1       Running        3          3d1h

通过kubectl delete pods <podname> -n <namespace> 命令始终无法将其删除:

kubectl delete pods aos-apiserver-5f8f5b5585-s9l92 -n aos

问题根因

Pod出现Terminating 状态的原因可能有多种,以下是一些常见的情况:

  • 节点异常:在节点处于“不可用”状态时,CCE会迁移节点上的容器实例,并将节点上运行的Pod置为Terminating状态。

    待节点恢复后,处于Terminating状态的Pod会自动删除。

  • 容器无响应:如果Pod中的容器在终止过程中没有响应SIGTERM信号,则可能导致Pod卡在Terminating状态。
  • Pod中存在未处理完的请求或资源占用:如果Pod中存在长时间运行的进程没有结束,则可能导致Pod无法被正常终止,进入Terminating状态。
  • Pod存在Finalizers:Finalizers是一种允许在删除资源之前清理资源的机制。如果Pod有Finalizers,并且相关的清理操作被卡住或没有响应,则Pod将保持在Terminating状态。
  • Pod设置了terminationGracePeriodSeconds优雅退出时间:Pod设置优雅退出时间后,结束Pod时会进入Terminating状态,等待容器优雅退出后将会自动删除。

解决方法

强制删除Pod可能会产生数据不一致、业务容器异常退出等风险,尤其是强制删除StatefulSet的Pod,请您合理评估可能存在的业务风险后执行该操作。详情请参见强制删除StatefulSet中的Pod

无论各种方式生成的Pod,均可以使用如下命令强制删除:

kubectl delete pod <pod>  -n <namespace> --grace-period=0 --force

因此对于上面的Pod,只要执行如下命令即可删除:

kubectl delete pod aos-apiserver-5f8f5b5585-s9l92 -n aos --grace-period=0 --force

相关文档