k8s容器状态Terminating无法删除的问题及解决
容器状态一直为Terminating的解决
若Pod的状态为Terminating,说明此Pod正处于关闭状态。Pod停留在Terminating状态一段时间后会被自动删除。
若Pod一直停留在Terminating状态,则:
- 1、判断是否为k8s和docker容器状态不一致问题造成;
- 2、判断 Pod 上是否有 finalizers ,如果有需要确认是否是有防止删除的保护;
- 3、判断节点是否出现 NotReady,节点如果处于NotReady,此节点上出现 Pod 状态 Terminating 是预期中的行为
如果确定可以安全删除 Pod,可执行如下命令强制删除:
kubectl delete pod [namespace] --grace-period=0 --force
k8s和docker容器状态不一致解决
在内存紧张、系统负载极高、IO 负载极高时,Pod 底层容器可能出现 dockerd 查询到的容器状态,跟真实容器关联进程状态不一致的问题。
因为 kubelet 只跟 dockerd 通信,从 kubelet 层面,就无法感知 Pod 的真实状态了。
Pod状态为Running,但实际服务异常;如果删除Pod,会长期卡在Terminating
解决方案
检测是否为BAD容器,执行下列命令有 BAD 相关输出
for c in `docker ps -q`; do echo $c; pc=`docker inspect $c -f "{{ .State.Pid }}"`; echo $pc; ps aux |grep -v grep | grep " $pc " || echo "BAD: container_id: $c, pid: $pc"; done | grep BAD
批量逐个清理BAD容器。默认只会输出要删除的容器命令,复制执行会逐个删除
for c in `docker ps -q`; do echo $c; pc=`docker inspect $c -f "{{ .State.Pid }}"`; echo $pc; ps aux |grep -v grep | grep " $pc " || echo docker rm -f $c; done | grep 'docker rm -f'
清理全部异常容器(重启docker)
systemctl restart docker
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Rainbond的ServiceMesh架构组件端口冲突处理解决
这篇文章主要大家介绍了Rainbond ServiceMesh架构组件端口冲突处理方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-04-04
k8s如何使用NFS作为StorageClass提供动态存储
本文主要介绍了k8s中的StorageClass,包括其定义、引入的原因、实现方式、定义方法以及回收策略对数据的影响等,首先,StorageClass是在K8s集群中创建用于动态PV的管理,可以链接至不同的后端存储,对存储的请求可以指向StorageClass2024-09-09
Kubernetes 1.28.2集群安装过程中的关键步骤详解(最新推荐)
Kubernetes K8s是Google开源的容器编排平台,最初由Borg项目发展而来,K8s 1.28版本引入了非正常节点关闭恢复、内置Sidecar容器支持、Job优化、Proxy改进和调度框架优化等功能,本文介绍Kubernetes 1.28.2集群安装过程中的关键步骤,感兴趣的朋友一起看看吧2025-03-03


最新评论