需求:我需要暂停某个产品的所有服务,但是最后还剩一个 pod 一直处于Terminating 状态, 怎么删除都删不掉
问题根因
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 rabbitmq-0 -n system-bite-dev1 --grace-period=0 --force