接下来的几篇文章主要给大家介绍kubernetes线上运维的时候出现问题该如何解决,这篇文章主要介绍Pod启动后一直是pending状态应该怎么办?
备注下:如果pod出现问题,我们需要查看pod的详情信息,根据详情信息来判断pod出现的问题。并给出相关的解决方案。使用的命令是:
kubectl describe pods ${POD_NAME}
言归正传,pod状态如果一直停留在Pendig状态的时候,一般都是由于当前的pod无法被调度到某个节点上去。这种情况一般都是由于集群内没有合适的资源导致的,但是可能还有一些原因是例如pod配置不正确的情况。因此我们总结以下几点方向供进行问题排查。
一、配置不正确导致Pending
创建pod时,我们一般会配置常规的参数,也会涉及到配置ConfigMap,PVC等,这些配置是否正确,都会影响pod的启动状态。我们可以通过describe命令进行排查,然后查看pod详情里面的events信息。
Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling <unknown> default-scheduler pod has unbound immediate PersistentVolumeClaims (repated 2 times)
像上诉这种就是PVC的绑定出现了问题,需要查看pvc的绑定配置来解决。
二、缺乏足够的资源导致Pending
这种情况也是比较常见的。即集群内没有可以满足启动pod的资源条件,例如CPU不够,内存不够等情况,遇到这种问题可以进行如下解决:
1、删除某些pod 2、调整pod的资源请求 3、向集群中添加新的节点
三、端口冲突导致Pending
这种问题的出现主要是由于部分pod我们可能需要映射到宿主机端口上,此时宿主机的端口被其他应用程序占用,因此不能正常启动Pod,遇到这种问题可以进行如下解决:
1、修改宿主机的端口映射。
四、节点设置了污点和容忍
有时候我们由于某些特殊原因对于kubernetes的某些节点设置了污点和容忍,因此这些节点不满足被调度的条件,也会导致pod没有足够的资源进行调度。因此遇到这种情况我们看下是否需要修改污点和容忍度。
五、节点设置了不可被调度
这个问题也是由于整个集群没有可用的资源,因此也可以查下是否节点被设置了不可被调度。看是否需要进行调整。
还没有评论,来说两句吧...