
# 工作负载异常：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容器中设置postStart Hook脚本未退出**：如果容器中postStart脚本仍在运行，则该容器不会被删除，对应Pod保持在Terminating状态。
- **Pod存在Finalizers**：Finalizers是一种允许在删除资源之前清理资源的机制。如果Pod有Finalizers，并且相关的清理操作被卡住或没有响应，则Pod将保持在Terminating状态。
- **Pod设置了terminationGracePeriodSeconds优雅退出时间**：Pod设置优雅退出时间后，结束Pod时会进入Terminating状态，等待容器优雅退出后将会自动删除。
 
#### 解决方法
![](https://support.huaweicloud.com/cce_faq/public_sys-resources/caution_3.0-zh-cn.png)
强制删除Pod可能会产生数据不一致、业务容器异常退出等风险，尤其是强制删除StatefulSet的Pod，请您合理评估可能存在的业务风险后执行该操作。详情请参见[强制删除StatefulSet中的Pod](https://kubernetes.io/zh-cn/docs/tasks/run-application/force-delete-stateful-set-pod/#statefulset-considerations)。
无论各种方式生成的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
```
**特殊场景**
如果Pod中配置了postStart Hook脚本，如果在脚本未退出的情况下强制删除Pod，Pod会被删除但是节点上的容器会仍处于运行状态，您可在Pod所在节点上执行强制删除容器命令，同步清理残留容器。强制删除容器命令如下，其中\<containerId\>需要替换为待清理的容器ID。
- 节点使用docker运行时：
  ```
  docker rm -f <containerId>
  ```
  

- 节点使用containerd运行时：
  ```
  crictl rm -f <containerId>
  ```
  
 
