kubelet pleg is not healthy
k8s 1.19.0
PLEG全称是Pod Lifecycle Event Generator 即Pod生命周期事件生成器,定时检查Pod状态,上报Pod Event事件。
PLEG Start
启动一个协程,每隔1s调用一次relist,根据最新的PodStatus生成PodLiftCycleEvent,通过eventChannel 送到syncLoop消费,由syncPod来触发Pod同步处理,达到期望状态。
pkg/kubelet/pleg/generic.go
Healthy函数
同步循环SyncLoop函数中默认定期10s调用Healthy函数,检查relist(PLEG关键任务)是否在3分钟内完成,超过3分钟时报告PLEG is not healthy,上报NotReady。
pkg/kubelet/pleg/generic.go
Healthy函数
g.getRelistTime()返回最近一次relist开始时间,判断当前时间减去它是否超过3分钟。
relist函数
获取节点上kubelet管理的所有容器(相当于docker ps + docker Inspect),与上一次的容器列表对比,判断容器状态的变化。
获取容器信息前记录relist开始时间并更新到relistTime。
relistThreshold是3分钟。
pleg not healthy可能原因
容器运行时无响应或响应超时,如docker进程响应超时(常见)
节点上容器数量过多
参考资料
https://cloud.tencent.com/developer/article/1550038
https://cloud.tencent.com/developer/article/1884333