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