首页/云/Kubernetes 速查/Pod Pending:调度未完成
集群运维与排障54 条

Pod Pending:调度未完成

Pod 已创建但没有节点承载:一类是调度器找不到合适节点,另一类是卷、镜像或网络准备没完成,describe 的事件能区分。

Kubernetes 速查云更新于 2026-10-13

Pending 是什么

Pending 表示对象已经被集群接受,但还没有真正跑起来。它有两个含义要分开看:一种是没有节点愿意接收,属于调度问题;另一种是节点已经确定但准备工作没完成,比如卷没挂上、镜像在下载、网络还没配好。状态本身不给原因,事件里才有。

为什么先看事件

描述信息末尾的事件列表会写明具体约束:资源不足、标签不匹配、污点不容忍、卷不可用、亲和规则冲突。调度类问题几乎都能在这里一眼看出,比反复推测快得多。需要注意事件有保留时间,卡了一段时间的对象要尽快取现场。

基本信息

适用环境任何 Kubernetes 发行版,属于对象生命周期的一个阶段
两类成因调度未完成,或已调度但准备未完成
关键证据描述信息中的条件与事件列表
常见事件调度失败、卷附加失败、挂载失败、镜像拉取中
资源依据节点可分配量小于容器请求值之和
保留限制事件有过期时间,需要及时查看

典型使用场景

  • 扩容后新副本起不来:集群资源不够,请求值之和超出剩余可分配量
  • 约束冲突:亲和规则、节点选择器与污点组合导致无节点满足
  • 卷未就绪:云盘正在附加或跨节点冲突,等待时间较长
  • 配置缺失:引用的配置对象或密钥不存在,卡在挂载阶段
  • 调度器异常:调度组件未运行或不可用,所有新对象都停在未调度状态
  • 验证约束调整:修改亲和或资源请求后确认新副本能被正常调度

定位步骤

定位步骤
kubectl describe pod pending-x | sed -n '/Events:/,$p'      # 先看事件原因
kubectl get events --field-selector involvedObject.name=pending-x --sort-by=.lastTimestamp
kubectl describe node node-1 | grep -A8 'Allocated resources'   # 节点剩余可分配量
kubectl get nodes --show-labels                                  # 核对标签与污点
kubectl describe node node-1 | grep -i taints

常见事件指向

事件原因指向的问题处理方向
调度失败无节点满足资源、标签、亲和或污点约束放宽约束或增加节点容量
卷附加失败云盘附加未完成或跨节点冲突等待或确认卷的拓扑限制
挂载失败引用的配置对象或存储卷不可用核对对象是否存在与命名空间
镜像拉取中镜像较大或仓库较慢观察等待,必要时预热镜像

资源视角的核对顺序

  • 先确认节点可分配量还剩多少,注意系统组件预留会明显降低可用量
  • 再核对容器的请求之和是否超过单个节点的可分配量,这种配置永远无法调度
  • 最后检查是否有亲和、污点与拓扑约束把可选范围缩小到零
节点的可分配量小于机器总内存与总核数,系统与运行时预留的部分对业务不可用,容量评估必须按可分配量来算。
卷为单节点读写类型时会把对象限制在已附加该卷的节点上,容量看起来够却调度不上去,往往就是这个原因。

易错点

  • 只增加副本数不排查约束:未调度的对象会让滚动更新与自动扩缩一起卡住,问题越滚越大
  • 按机器总容量估算余量:可用量与可分配量有差距,容量评估偏乐观导致持续调度失败
  • 忽略事件过期:对象卡了很久之后再看,事件已被清理,只能从节点与约束反推
  • 反复删除重建:约束不变时新对象依旧未调度,还会丢掉已有的等待状态与事件

数据来源与参考

  • Kubernetes 官方文档 · 调度与卷
  • Kubernetes 官方文档 · 排查 Pod
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌