20240509xxx集群xx节点PLEG超时问题
//20240509 写在前面
xxx集群xx节点又又又又又卡住了,经过一系列排查,终于解决了问题,由于这次找到了通用解法,所以在此记录下
ps:国内的搜索引擎是真的shi。。搜出来的帖子都是抄来抄去的,还不解决问题,还得是google/大拇指
问题起因:
- 偷得浮生半日闲,看到集群里一个节点监控没了,寻思是不是又是df卡住了,然后进去一看,果然,Ready 和 NotReady状态之间鬼畜,遂开始排查
解决流程:
-
先说结论,核心就一句命令:
for i in `docker ps -aq`; do echo $i; docker inspect $i 1>/dev/null 2>&1; done # 卡住的即为有问题的容器
-
首先需要了解PLEG的原理,看看他到底在干什么,这里我不赘述,可以看Ref第一条,老哥说的很清楚;总结出来就一个点“遍历检查所有pod所属容器的状态”
-
那既然知道了在干什么,分析就变得很简单了,又如下几点:
- PLEG过程中哪里夯住了
- pod太多,预设阈值中3分钟处理不完【这种一般很少见了,因为PLEG是节点级别的,一个节点不会有那么多pod,除非超级节点。。】
-
所以有以下几个排查方向:
- 节点pod数
- docker状态【或者说底层CRI的状态】
- 因为PLEG需要的信息是从底层接口中获取的
- 本地所有由kubelet产生的容器信息
- 使用开头的那句命令即可,PLEG拿到的信息,从inspect也可以拿到,如果拿不到,那肯定是有问题
-
找到问题之后,处理问题节点即可,本案例是因为ceph挂载卡住,杀死相关进程即可【容器杀不掉,只能强杀进程】
Ref:
- https://icloudnative.io/posts/understanding-the-pleg-is-not-healthy/【pleg-原理】
- https://isekiro.com/kubernetes排错-kubelet-报错-pleg-is-not-healthy/【找到解决办法】
- https://cloud.tencent.com/developer/article/1736775