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

建议方案

彻底清理(强制删除所有容器/进程),建议使用此方法,kubelet重启后会自动重启拉起节点上的容器。

1. 先停止所有运行中的容器

bash 复制代码
docker stop $(docker ps -q)

2. 再删除所有容器(包括停止+运行)

bash 复制代码
docker rm $(docker ps -a -q)

3. 重启docker kubelet

bash 复制代码
systemctl restart docker && systemctl restart kubelet

兜底方案(非必要不使用)

一旦出现这种情况:

bash 复制代码
[root@master01 docker]# rm -rf containers/ overlay2/
rm: cannot remove 'containers/xxx/mounts/shm': Device or resource busy

merged 是容器运行时挂载点,被内核挂载占用,直接强删目录必报错

bash 复制代码
# 强制卸载所有挂载占用
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

然后重启

bash 复制代码
systemctl restart docker && systemctl restart kubelet

使用兜底方案的特征

当出现如下日志核心异常点:

1. 致命问题:大量 containerd-shim 僵尸残留进程

arduino 复制代码
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 内部元数据并发锁冲突(关键卡死点)

vbnet 复制代码
Error (Unable to complete atomic operation, key modified) deleting object [endpoint ...] retrying....

Docker 网络 endpoint/对象数据库原子操作失败、锁竞争 ,反复重试无法释放网络资源。 你的集群频繁创建/销毁 Pod、Calico 网络回收,叠加 ARM64 + Docker23.0.6 兼容性问题,网络层死锁。

3. 持续 shim 断开清理告警

erlang 复制代码
cleaning up after shim disconnected

4. docker卡死

bash 复制代码
KubeletNotReady container runtime status check may not have completed yet

或者

bash 复制代码
Skipping pod synchronization err="container runtime status check failed"

或者

bash 复制代码
Ready: False KubeletNotReady: PLEG is not healthy: pleg was last seen active 3m27s ago; threshold is 3m0s

kubelet日志查看

bash 复制代码
journalctl -u kubelet --no-pager
相关推荐
苍何1 小时前
DeepSeek的Super-agent 设计,和我们的工程实践
后端
Patrick_Wilson1 小时前
第一次读 Go 项目:从两个源码文件弄清 package、import 和 go.mod
后端·go·编程语言
Patrick_Wilson1 小时前
执行 go build . 后,Go 怎样找到代码并生成程序
后端·go·编程语言
用户6919026813391 小时前
Redis 2:Redis 在怎么处理harness记忆
后端
Patrick_Wilson2 小时前
Go 变量不赋值时,为什么也有值
后端·go·编程语言
Patrick_Wilson2 小时前
读 Go 项目里的命令:run、build、test 分别做了什么
后端·go·编程语言
程序猿乐锅3 小时前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight
code2cat4 小时前
【随笔】连续批处理:长短请求怎样在迭代之间补位
java·人工智能·后端·大语言模型·vllm
掘金者阿豪5 小时前
SQL Server数据迁移完成后,凌晨的数据库告警该怎么查?
前端·后端
鶴哥只手遮天5 小时前
AFSIM 2.9.0 深度解析·进阶卷第 1 章 插件源码精读:16 个 WSF 插件的架构与实现
后端