Pod长期Pending的排查需分四步:先查Events定位拒绝原因,再确认Node字段判断是否调度成功,接着按资源、PVC、污点、亲和性顺序验证高频问题,最后排除节点状态、调度器故障及命名空间配额等系统异常。
Pod 长期 Pending,说明它已被 API Server 接收,但始终没被调度到节点运行,或虽已分配节点却卡在启动前置条件上。90% 的问题线索藏在 Events 里,别急着翻文档,先看输出。
执行这条命令,直接聚焦关键信息:
kubectl describe pod <pod-name> -n <namespace> | tail -20重点看底部的 Events 区块,常见提示直指根源:
如果 Events 空白或被刷掉,补查历史事件:
kubectl get events -n <namespace> --field-selector involvedObject.name=<pod-name>继续看 kubectl describe pod 输出中的 Node 字段:
这个判断是后续排查方向的分水岭,不能跳过。
按实际发生概率排序检查:
requests,不是 limits。用 kubectl describe node <node-name> 查 Allocatable 和 Allocated resources 对比表,确认剩余 CPU / 内存 / ephemeral-storage 是否 ≥ Pod 的 requests 总和kubectl get pvc -n <namespace>,状态不是 Bound 就要查 PV 是否存在、StorageClass 是否可用、访问模式是否匹配kubectl get nodes -o wide 看 Taints 列;再核对 Pod YAML 中 tolerations 是否完整覆盖kubectl get nodes --show-labels,比对 Pod 的 nodeSelector 或 nodeAffinity 规则,确认至少有一个节点满足全部条件这些情况容易被忽略,但一旦出现,所有新 Pod 都会 Pending:
kubectl get nodes,确认所有 Ready 节点数量正常;若有 NotReady 或 SchedulingDisabled(cordon 过),需恢复或绕行kube-scheduler Pod 是否 Running 且无重启;同时确认其日志有无 panic 或连接 etcd 失败记录kubectl get resourcequota -n <namespace>,查看 status.hard 与 status.used 是否已满