Pod Pending 怎么排查
等待调度表示实例还没被分配到节点,或分配到节点后仍在拉镜像与挂载卷。这类问题的答案几乎都写在资源详情的事件里:资源不足、选择器不匹配、污点未被容忍、存储未绑定、配额超限。按顺序核对这几类原因,通常一轮就能定位。
基本信息
| 首要入口 | 查看实例详情的事件列表,原因通常直接写在里面 |
|---|---|
| 常见类别 | 资源不足、选择器与亲和不匹配、污点未容忍、存储未就绪、配额超限 |
| 节点视角 | 确认目标节点剩余资源与实例数量上限 |
| 存储检查 | 查看存储声明是否成功绑定,存储类是否存在 |
| 配额检查 | 命名空间级别的资源配额被占满也会导致无法调度 |
| 镜像阶段 | 镜像体积大时拉取耗时长,也会表现为长时间等待 |
典型排查动作
- 先看事件:从最后几条开始读,原因通常写得很直白
- 核对资源请求:请求值超过单节点可分配量时,任何节点都放不下
- 检查选择器与亲和规则:写错节点标签会让实例永远匹配不到目标
- 检查污点与容忍:专用节点池没有配容忍时实例会被挡在门外
- 检查存储声明:未绑定的存储会让实例一直停在挂载阶段
- 检查命名空间配额:配额被占满时新建实例直接被拒绝
- 确认镜像拉取进度:大镜像冷启动耗时属于正常现象
事件关键词与处置
| 事件关键词 | 含义 | 处置 |
|---|---|---|
| 资源不足 | 节点剩余资源不够 | 降请求值或扩容节点 |
| 节点选择不匹配 | 标签或亲和无匹配 | 核对标签与亲和条件 |
| 污点未被容忍 | 目标节点有污点 | 加容忍或换节点池 |
| 存储未绑定 | 存储声明没有可用后端 | 检查存储类与声明状态 |
| 超出配额 | 命名空间配额已满 | 调配额或释放资源 |
| 正在拉取镜像 | 镜像下载中 | 确认镜像大小与网络 |
排查命令
排查命令
kubectl get pod web-1 -o wide # 看状态与节点
kubectl describe pod web-1 | tail -25 # 事件是答案所在
kubectl get nodes # 节点是否就绪
kubectl describe node node-1 | grep -A6 "Allocated resources" # 节点余量
kubectl get pvc -n dev # 存储是否绑定等待调度也可能是镜像正在拉取:大镜像在冷启动时几分钟属于正常范围,先看事件里有没有拉取进度再判定为故障。
直接删除重建通常没用:调度条件没变,新实例还是等待调度,只是浪费了一次重试与观察时间。
资源请求是最容易出错的字段:请求值设得过大时,即使节点整体还有余量也可能放不下单个实例。
配额与库存是两件事:命名空间配额属于平台侧限制,节点资源不足属于容量问题,处理方式完全不同。
处理思路的先后顺序
- 先定性:是完全没有可调度的节点,还是有节点但不满足条件
- 再定量:核对资源请求值与节点剩余容量之间的差距
- 判定为存储问题后先看存储声明状态,再看实例本身
- 确认配额与库存之后再考虑扩容节点,顺序颠倒会白做工作
- 把常见事件关键词与对应处理方式整理成速查表
把调度失败的原因分类记录:资源类、策略类、存储类各有固定处理路径,积累成经验后排查会越来越快。