K8s Pod一直处于Pending状态
Pod创建后一直显示Pending状态,无法调度到节点上。这通常是因为集群资源不足或配置有误。本文提供排查思路。
排查步骤
1. 查看Pod事件:kubectl describe pod pod-name。查看Events部分,通常会说明Pending的原因。
2. 常见原因:
Insufficient cpu/memory:集群没有足够的CPU或内存。解决方案:扩容节点、降低Pod的resources.requests、清理不需要的Pod释放资源。
node(s) had taint that the pod didn't tolerate:节点有污点(taint),Pod没有对应的容忍(toleration)。解决方案:给Pod添加toleration或移除节点taint。
node(s) didn't match Pod's node affinity/selector:Pod的nodeSelector或nodeAffinity没有匹配到任何节点。检查标签是否正确:kubectl get nodes --show-labels。
persistentvolumeclaim未绑定:Pod使用了PVC但PVC没有绑定到PV。检查PVC状态:kubectl get pvc。如果PVC一直Pending,检查是否有可用的PV或StorageClass。
3. 查看节点状态:kubectl get nodes。确认节点状态为Ready。如果节点是NotReady,可能是kubelet或容器运行时出了问题。
快速解决
如果是资源不足,临时方案是降低requests值。长期方案是开启Cluster Autoscaler自动扩容节点。如果是调度问题,检查affinity和taint/toleration配置。
