低版本kubernetes节点卡死重置恢复方法

9 阅读2分钟

建议方案

彻底清理(强制删除所有容器/进程),建议使用此方法,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