在本文中,我将探讨Kubernetes中的PLEG is not healthy问题,该问题有时会导致节点“ NodeNotReady” 。当了解Pod Lifecycle Event Generator (PLEG) 如何工作后,在遇到此问题也就方便排查。
什么是PLEG
PLEG 主要是通过每个匹配的 Pod 级别事件来调整容器运行时的状态,并将调整后的结果写入缓存,使 Pod
缓存保持最新状态。 他是 kubelet (Kubernetes) 中的一个模块。
下面红线部分是PLEG的工作:
出处: Kubelet: Pod Lifecycle Event Generator (PLEG).
“PLEG is not healthy”如何产生的
Kubelet会在SyncLoop()中定期调用Healthy()来对PLEG运行状况进行健康检查。
Healthy()
函数会检查 relist
进程(PLEG 的关键任务)是否在 3 分钟内完成。此函数会以 “PLEG” 的形式添加到 runtimeState
中,Kubelet 在一个同步循环(SyncLoop()
函数)中会定期(默认是 10s)调用 Healthy()
函数。如果 relist 进程的完成时间超过了 3 分钟,就会报告 PLEG is not healthy。
1 | //// pkg/kubelet/pleg/generic.go - Healthy() |
Review “relist”
参考资料
- Kubelet: Pod Lifecycle Event Generator (PLEG)
- Kubelet: Runtime Pod Cache
- relist() in kubernetes/pkg/kubelet/pleg/generic.go
- Past bug about CNI — PLEG is not healthy error, node marked NotReady