低版本kubernetes节点卡死重置恢复方法
- Docker
- 10天前
- 14热度
- 0评论
Kubernetes节点卡死重置恢复方法
在Kubernetes集群中,由于各种原因可能导致节点出现卡死情况。本文将介绍如何通过彻底清理和重启来解决低版本Kubernetes节点的卡死问题,并提供一些兜底方案以应对特殊情况。
引言
当Kubernetes节点出现卡死时,通常需要进行系统级别的重置操作以便恢复服务。以下是推荐的操作步骤以及在特殊情况下可采用的兜底方案。这些方法可以帮助你快速解决问题并恢复正常的服务运行状态。
推荐方案
1. 停止所有容器
首先停止当前运行的所有容器。
docker stop $(docker ps -q)2. 删除所有容器(包括停止和正在运行的)
接下来,删除所有的Docker容器以确保彻底清理。
docker rm $(docker ps -a -q)3. 重启 Docker 和 Kubelet
最后,重启 Docker 和 Kubelet 来重新启动节点上的容器服务。
systemctl restart docker && systemctl restart kubelet兜底方案(非必要不使用)
在某些极端情况下,推荐的重置方法可能无法解决问题。例如:
rm -rf containers/ overlay2/此时可能会遇到如下的错误信息:
rm: cannot remove 'containers/[...]/mounts/shm': Device or resource busy1. 强制卸载所有挂载点
可以通过强制卸载容器运行时的挂载点来解决问题。
umount -lf /var/lib/docker/containers/*/mounts/shm
umount -lf /var/lib/docker/overlay2/*/merged或者使用批量卸载命令:
mount | grep kubelet | awk '{print $3}' | xargs -I {} umount -l {}2. 杀死残留的 shim 和 runc 进程
如果存在僵尸进程,可以先杀掉它们。
ps -ef | grep -E 'containerd-shim|runc' | grep -v grep | awk '{print $2}' | xargs kill -93. 重启 Docker 和 Kubelet
完成上述操作后,再次重启Docker和Kubelet。
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说明Kubernetes节点中的Docker容器在正常停止时未能正确回收Shim进程,导致大量僵尸进程占用资源。
2. Docker 内部元数据并发锁冲突(关键卡死点)
遇到如下错误:
Error (Unable to complete atomic operation, key modified) deleting object [endpoint ...] retrying....这表明Docker内部的网络端点和对象数据库出现了原子操作失败的情况,导致资源无法正常释放。
3. 持续 shim 断开清理告警
出现以下警告信息:
cleaning up after shim disconnected4. Docker 卡死
遇到如下情况时表明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 3m0skubelet 日志查看
可以通过以下命令查看kubelet的日志信息:
journalctl -u kubelet --no-pager总结
本文介绍了处理低版本Kubernetes节点卡死问题的方法,包括推荐的清理和重启方案以及在特殊情况下使用的兜底方案。通过这些步骤,可以有效解决由僵尸进程、并发锁冲突等问题引起的节点卡死情况。
建议在执行兜底方案时谨慎操作,并先尝试使用推荐方法来解决问题。如果需要进一步诊断具体原因,请参考kubelet日志文件以获取更多线索。