NotReady节点ContainerGCFailed告警解析及原因排查咨询
节点NotReady状态与ContainerGCFailed告警排查解析
告警与节点状态原始信息
1. ContainerGCFailed告警事件
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning ContainerGCFailed 58s (x1775 over 30h) kubelet rpc error: code = ResourceExhausted desc = grpc: trying to send message larger than max (16797216 vs. 16777216)
2. 节点状态条件详情
Conditions: Type Status LastHeartbeatTime LastTransitionTime Reason Message ---- ------ ----------------- ------------------ ------ ------- MemoryPressure False Sat, 19 Nov 2022 17:17:30 -0600 Wed, 16 Nov 2022 22:28:31 -0600 KubeletHasSufficientMemory kubelet has sufficient memory available DiskPressure False Sat, 19 Nov 2022 17:17:30 -0600 Wed, 16 Nov 2022 22:28:31 -0600 KubeletHasNoDiskPressure kubelet has no disk pressure PIDPressure False Sat, 19 Nov 2022 17:17:30 -0600 Wed, 16 Nov 2022 22:28:31 -0600 KubeletHasSufficientPID kubelet has sufficient PID available Ready False Sat, 19 Nov 2022 17:17:30 -0600 Fri, 18 Nov 2022 11:03:06 -0600 KubeletNotReady PLEG is not healthy: pleg was last seen active 30h17m27.791101751s ago; threshold is 3m0s
核心问题解析
- ContainerGCFailed告警:kubelet执行容器垃圾回收时触发gRPC错误,要发送的消息大小(约16MB)超过了gRPC默认的16MB最大消息限制,导致垃圾回收失败。该告警30小时内重复触发1775次,说明问题持续存在未得到解决。
- 节点NotReady状态:节点就绪状态为False,直接原因是PLEG(Pod生命周期事件生成器)不健康——PLEG已超过30小时未活跃,远高于3分钟的健康阈值。PLEG负责实时监控容器状态变化,一旦它停摆,kubelet无法感知Pod和容器的状态,节点直接进入NotReady状态。
可能原因排查
- 容器GC消息超限:节点上堆积了大量已终止容器或镜像,kubelet收集GC相关信息时生成的gRPC消息刚好超出默认限制,导致垃圾回收持续失败,进而占用kubelet资源影响其他模块运行。
- PLEG依赖的容器运行时异常:PLEG需要从容器运行时(如containerd、Docker)获取状态数据,如果容器运行时响应缓慢、卡死,或存在大量未清理的容器元数据,会导致PLEG无法正常完成状态查询,最终停摆。
- kubelet内部资源竞争或版本bug:容器GC的持续失败可能占用了kubelet的内部线程或内存资源,导致PLEG的健康检查线程无法正常调度;也可能是kubelet版本存在已知bug,比如未适配大数量容器场景下的gRPC消息大小,或PLEG健康检查逻辑存在漏洞。
内容的提问来源于stack exchange,提问作者DmitrySemenov
相关产品推荐
相关产品推荐

