【k8s】k8s容器状态Terminating无法删除

容器状态一直为Terminating的解决方案

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

1、判断是否为k8s和docker容器状态不一致问题造成;

2、判断 Pod 上是否有 finalizers ,如果有需要确认是否是有防止删除的保护;

3、判断节点是否出现 NotReady,节点如果处于NotReady,此节点上出现 Pod 状态 Terminating 是预期中的行为

如果确定可以安全删除 Pod,可执行如下命令强制删除:

html 复制代码
kubectl delete pod [namespace] --grace-period=0 --force

k8s和docker容器状态不一致解决方法

在内存紧张、系统负载极高、IO 负载极高时,Pod 底层容器可能出现 dockerd 查询到的容器状态,跟真实容器关联进程状态不一致的问题。因为 kubelet 只跟 dockerd 通信,从 kubelet 层面,就无法感知 Pod 的真实状态了。Pod状态为Running,但实际服务异常;如果删除Pod,会长期卡在Terminating

解决方案

检测是否为BAD容器,执行下列命令有 BAD 相关输出

html 复制代码
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容器。默认只会输出要删除的容器命令,复制执行会逐个删除

html 复制代码
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)

html 复制代码
systemctl restart docker

参考

k8s容器状态Terminating无法删除

相关推荐
Css38RttP3 小时前
Kind 环境下 Flannel IPsec 模式跨节点通信故障排查流程
云原生·kind
小义_4 小时前
随笔 3(Linux)
linux·运维·服务器·云原生·红帽
倔强的胖蚂蚁6 小时前
x2openEuler 辅助机完整部署教程
运维·云原生
普通网友10 小时前
《K8s 自动扩缩容:基于 CPU / 内存的 HPA 配置》
docker·容器·kubernetes
Joren的学习记录10 小时前
【Linux运维大神系列】Kubernetes详解7(k8s技术笔记3)
linux·运维·kubernetes
学到四10 小时前
kubernetes(k8s)
云原生·容器·kubernetes
睡觉的时候不会困10 小时前
Kubernetes Pod 管理全攻略:从基础操作到进阶优化
云原生·容器·kubernetes
落日漫游10 小时前
深入解析K8sCRD:自定义资源定义实战指南
云原生·容器·kubernetes
q_302381955610 小时前
告别kubectl命令地狱!MCP-K8s让AI成为你的智能运维助手
运维·人工智能·语言模型·chatgpt·kubernetes·文心一言·devops
凌晨l10 小时前
Centos7.9部署k8s(详细步骤)
云原生·容器·kubernetes