云其它

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > 云其它 > k8s容器状态Terminating无法删除

k8s容器状态Terminating无法删除的问题及解决

作者:云川之下

这篇文章主要介绍了k8s容器状态Terminating无法删除的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

容器状态一直为Terminating的解决

若Pod的状态为Terminating,说明此Pod正处于关闭状态。Pod停留在Terminating状态一段时间后会被自动删除。

若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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文