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集群中存在大量状态为Terminating的Pod
解决:
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