目录

kubernetes排错-kubelet 报错 PLEG is not healthy

Kubernetes 的 kubelet 报错 PLEG is not healthy 问题排错.

简述

Kubernetes worker 节点运行一段时间后,出现 kubelet 报错 PLEG is not healthy 的问题,导致节点状态 NotReady 。

PLEG

Pod 生命周期事件生成器 **PLEG(Pod Lifecycle Event Generator)**会记录 Pod 生命周期中的各种事件,如容器的启动、终止等。PLEG is not healthy 异常通常是由于节点上的运行时进程异常或者节点 Systemd 版本缺陷导致。

原因一

Kubernetes 集群中存在大量状态为 TerminatingPod

解决:

kubectl get pod -n ${NAMESPACE} | grep Terminating | awk '{print $1}' | xargs -i rancher kubectl delete pod {} --force --grace-period=0 -n ${NAMESPACE}

原因二

某个 docker 进程夯死导致的。

解决:

登录到对应的 worker 节点, for 循环查看哪个 docker 容器卡住了

for c in $(docker ps -aq); do echo $c; docker inspect $c 1>/dev/null 2>&1; done

也可以通过下面的命令判断 PLEG 时长是不是过长

time docker ps -a | grep -v CONTAINER | awk '{print $1}' | xargs docker inspect

如果在某个容器卡住,那么就是该容器导致的

删除该 pod 容器,会自动新建,或者

journalctl -u docker -f,可以看看有没有日志正在刷大量的 "too many open files" 的报错

原因三

docker 进程无响应。

解决:

重启 docker 进程即可。

原因四

使用 CentOS 7.6 版本的系统时,systemd-219-62.el7_6.6.x86_64 软件包存在缺陷1

解决:

请通过快照等方式备份您的数据,然后在 Kubernetes 集群的各节点上执行以下命令,更新 systemd 程序包至最新版本并重新运行 systemd 程序。

yum update -y systemd && systemctl daemon-reexec


  1. Kubernetes 集群使用 CentOS 7.6 系统时 PLEG:传送门 ↩︎