13种pod的状态
生命周期
- Pending:Pod被创建后进入调度阶段,k8s调度器依据pod声明的资源请求量和调度规则,为pod挑选一个适合运行的节点。当集群节点不满足pod调度需求时,pod将会处于pending状态。
- Running:Pod被调度到节点上,k8s将pod调度到节点上后,进入running状态。
- Succeeded:Pod运行成功,Pod中的所有容器都退出,且退出码为0。
- Failed:Pod运行失败,Pod中的所有容器都退出,且退出码不为0。或被系统终止,pod将进入failed状态。
- Unknown:Pod运行异常,因为某些原因无法取得pod状态,Pod处于unknown状态。
调度失败
常见错误状态(Unschedulable)
pod被创建后进入调度阶段,k8s调度器依据pod声明的资源请求量和调度规则,为pod挑选一个适合运行的节点。当集群节点不满足pod调度需求时,pod将会处于pending状态。造成调度失败的典型原因有:
- 节点资源不足
k8s将节点资源(cpu,内存,磁盘等)进行数字量化,定义出节点资源容量(capacity)和节点资源可分配额(allocatable)。资源容量是指kubelet获取的计算节点当前的资源信息,而iyuan个分配额是pod的可用的资源。
pod容器有两种资源额度概念:
- 请求值 (Request 容器至少能获得请求值大小)
- 限制值 (Limit 容器至多能获得限制值大小)
pod的资源请求量是pod中所有容器的资源请求之和
pod的资源限制量是pod中所有容器的资源限制之和
k8s默认调度器按照较小的请求值作为调度依据,保障可调度节点的资源可分配额一定不小于pod资源请求值。当集群没有一个节点满足pod的资源请求量,pod将会卡在pending状态。
pod因为无法满足资源需求而被pending,可能是因为集群资源不足,需要进行扩容,也有可能是集群碎片化导致。
- 超过Namespace资源配额
k8s用户可以通过资源配额对ns进行资源使用量限制,包括两个维度:
- 限制某个对象类型(pod)可创建对象的总数
- 限定某个对象类型可消耗的资源总数
如果在创建或更新pod时申请的资源超过了资源配额,则pod将调度失败。此时需要检查ns资源配额状态,做出适当调整
- 不满足nodeselector节点选择器
节点亲和性和反亲和性用于约束pod调度到哪些节点,而亲和性有细分为软亲和和硬亲和。对于软亲和规则,k8s调度器会尝试寻找满足对应规则的节点,如果找不到匹配的节点,调度器仍然会调度该pod。而当硬亲和规则不被满足时,pod将无法被调度,需要检查pod调度规则和目标节点状态,对调度规则或节点进行合理调整
- 节点存在污点
k8s提供污点和容忍机制,用于避免pod被分配到不合适的节点上。家啊如节点上存在污点,而pod没有设置及相应的容忍,pod将不会调度到该节点。此时需要确认节点是否有携带污点的必要。如果不必要,移除污点,若pod可以分配到带有污点的节点