建议方案
彻底清理(强制删除所有容器/进程),建议使用此方法,kubelet重启后会自动重启拉起节点上的容器。
1. 先停止所有运行中的容器
docker stop $(docker ps -q)
2. 再删除所有容器(包括停止+运行)
docker rm $(docker ps -a -q)
3. 重启docker kubelet
systemctl restart docker && systemctl restart kubelet
兜底方案(非必要不使用)
一旦出现这种情况:
[root@master01 docker]# rm -rf containers/ overlay2/
rm: cannot remove 'containers/xxx/mounts/shm': Device or resource busy
merged 是容器运行时挂载点,被内核挂载占用,直接强删目录必报错
# 强制卸载所有挂载占用
umount -lf /var/lib/docker/containers/*/mounts/shm
umount -lf /var/lib/docker/overlay2/*/merged
# 批量强制卸载所有 kubelet 挂载(推荐)
mount | grep kubelet | awk '{print $3}' | xargs -I {} umount -l {}
# 杀死残留 shim 与 runc 僵尸进程
ps -ef | grep -E 'containerd-shim|runc' | grep -v grep | awk '{print $2}' | xargs kill -9
然后重启
systemctl restart docker && systemctl restart kubelet
使用兜底方案的特征
当出现如下日志核心异常点:
1. 致命问题:大量 containerd-shim 僵尸残留进程
docker.service: Unit process xxx (containerd-shim) remains running after unit stopped.
This usually indicates unclean termination of a previous run
Docker 正常 stop 时无法回收容器 Shim 进程,大量残留僵尸进程占用 CRI 链路、命名空间、网络栈。
直接后果: docker 重启后资源锁不释放、容器操作阻塞、kubelet 调用 CRI 超时 → 容器运行时检测失败 → 节点 NotReady
2. Docker 内部元数据并发锁冲突(关键卡死点)
Error (Unable to complete atomic operation, key modified) deleting object [endpoint ...] retrying....
Docker 网络 endpoint/对象数据库原子操作失败、锁竞争,反复重试无法释放网络资源。 你的集群频繁创建/销毁 Pod、Calico 网络回收,叠加 ARM64 + Docker23.0.6 兼容性问题,网络层死锁。
3. 持续 shim 断开清理告警
cleaning up after shim disconnected
4. docker卡死
KubeletNotReady container runtime status check may not have completed yet
或者
Skipping pod synchronization err="container runtime status check failed"
或者
Ready: False KubeletNotReady: PLEG is not healthy: pleg was last seen active 3m27s ago; threshold is 3m0s
kubelet日志查看
journalctl -u kubelet --no-pager