K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路
Node节点资源不足可能会产生的故障
- 故障一:Pod数量太多超出物理节点的限制
- 每一台Node节点中默认限制最多运行110个Pod资源,当一个应用程序有成百上千的Pod资源时,如果不扩容Node节点或者修改最大Pod数量限制,那么就会导致部分Pod资源无法正常运行,因为节点已经没有资源可以被调度了。
- 解决思路就是扩容Node节点数量或者修改Pod的数量限制
- 故障二:Pod配置的资源限额超出物理节点的最大使用率
- 由于Node节点资源有限,当Pod设置的资源配额超出了Node节点所承受的极限,那么Pod将无法部署和运行,会报错没有合适的Node节点可调度。
- 解决思路就是对资源限方面重新调整,适当扩展节点资源。
Node节点资源不足故障排查案例一
-
故障描述:
-
Pod资源数量过多,超出节点调度Pod的数量。
-
当Pod资源数量太多,已经达到了Node节点默认的110个Pod时,新创建的Pod资源会一直处于Pending状态,并且大量的Pod会频繁重启。
-
排查思路:
-
首先查看Pod的详细信息,重点观察容忍的信息,通常情况下会看到下面的信息,从这个信息中我们就可以判断出是由于节点资源上限从而引发的问题。
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events: <none>
#正常的情况下下是没有for 300s 提示的,这句话的意思是说300秒内都没有通过容忍调度在Node节点,产生了超时。
-
查看Node节点的详细信息,如果是资源使用上限的问题,会看到如下的报错信息。
Warning SystemOOM 78s kubelet System OOM encountered, victim process: java, pid: 5879
-
通过在查看Node节点的详细信息,可以看到Kubelet组件触发了OOM机制,接下来去排查Kubelet。
38506 kubelet_pods.go:880] Unable to retrieve pull secret ms/registry-pull-secret for ms/eur...t succeed
-
从Kubelet的报错日志中可以看到不能拉取secret资源,结合Pod中容忍提示的信息,最有可能出现的原因就是资源不够用了。
-
排查Node节点中各项资源指标的使用情况,CPU、内存、磁盘。
-
都没有问题后,在查看该Node节点中运行了多少个Pod资源,如果超过110个,那么就可以定位问题了,每个Node节点默认只允许运行110个Pod,超出限制后无法调度。
-
解决方法就是修改默认的Pod数量,但是也要根据机器硬件性能做出合理的调整。
Node节点资源不足故障排查案例二
-
故障描述:
-
Pod一直处于Pending状态。
-
排查过程:
-
查看Pod的详细信息,可以获得关键的信息。
default-scheduler 0/3 nodes are available: 2 Insufficient memory, 2 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn"t tolerate.
-
从Pod的详细信息中可以得知,3个节点中,没有一个节点符合Pod的资源设置,其中有2个节点内内存不足和一个节点是Master,污点不能被容忍。
-
重新调整Pod的资源限制,或者扩容物理节点的内存即可解决。
-----------------------------------------------------------------------------------
offer突击训练营简介:
1:针对不知道怎么面试,面试没有信心的小伙伴,我们会给你一个offer保障。
2:我们会监督你15-20天内把面试体系技术点掌握至少7成,这样足够你去找到满意的工作了。
3:我们是面向面试学习指导,不会带你们去写代码,会把项目真实开发的迭代过程和技术细节如何实现业务功能都详细教清楚,你能在面试中流畅表达清楚就行了,项目经验你不用担心(技术老师提供的真实项目经验肯定拿的出手),自己学和别人带着系统学,效率完全不一样。
详情请点击这里 :offer突击训练营,给你一个offer的保障,求职跳槽的看过来!