kubelet pleg is not healthy

发布时间 2023-10-28 17:52:09作者: 王景迁

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