全部场景Scene 05

排障决策树Pending / ImagePull / CrashLoop

Pod 落入 Pending、ImagePullBackOff 或 CrashLoopBackOff 时,先按 STATUS 选分支。你将用 describe、Events、logs --previous 产出一页包含现象、证据、判断与动作的故障报告。

中阶阶段 · 12 min · 6 步 · get · describe · logs · events · exec

演练前检查

环境
可读取 Pod 与 Events 的实验命名空间;使用现有异常 Pod,或只在隔离环境创建故障样本。
初始故障
至少一个 Pod 处于 Pending、ImagePullBackOff 或 CrashLoopBackOff,且根因尚未判断。
成功标准
给定 Pending / ImagePullBackOff / CrashLoopBackOff,能说出下一步第一条命令与 Events 关键词
清理
只删除本次演练创建的资源;现有异常工作负载需由其负责人决定处置。

场景判断

排障的第一技能不是记冷门 flag,而是拒绝一上来就 delete pod / rollout restart。get pods 给出 STATUS 与 READY,决定你走哪条树权;describe 把 kubelet 与调度器写进 Events 的句子变成证据;logs(必要时 --previous)对齐应用真相;exec 只用于仍 Running 的对照样本。三条主干覆盖了本地实验与初级生产里八成「应用起不来」的报案,剩下的网络策略与存储故事留给高阶课节。

决策树要「分流」而不是「并列猜」。Pending:容器还没真正跑起来,优先调度与资源——FailedScheduling、节点污点、资源请求过大、PVC 未 Bound。ImagePullBackOff / ErrImagePull:镜像名、tag、仓库鉴权、节点出网——Events 里的 Failed 拉取信息几乎总是第一证据。CrashLoopBackOff:进程起来又退出,或 liveness 反复杀死——logs --previous 看被杀前最后一行,再决定是改应用、改命令参数,还是收回过激探针。把顺序练成条件反射,比背十个冷门命令更有用。

复现步骤

本机勾选备忘(localStorage),不代表你已在集群里跑过,也不连接任何 API。只是帮你对照步骤,别当成「学会了」的勋章。

— / 6本机勾选

  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
  6. 06

关键配置

SHELLbash
# 1) 分流
kubectl get pods -o wide
kubectl get pods --field-selector=status.phase!=Running

# 2) 证据(按 STATUS 选一条)
kubectl describe pod <pod>
kubectl logs <pod> --previous --tail=100
kubectl get events --sort-by='.lastTimestamp' | tail -n 30

# 3) 对照样本(仅 Running 时)
kubectl exec -it <healthy-pod> -- sh -c 'ps aux; printenv | head'

写故障报告时,强迫自己用「可复查的命令」代替形容词。不要写「好像是网络问题」,要写「describe Events 在 14:02 出现 FailedScheduling: 0/1 nodes are available: 1 Insufficient memory」。不要写「可能是镜像坏了」,要写「Events: Failed to pull image "nginx:does-not-exist-xyz": not found」。这种证据习惯迁移到工单与复盘里,会直接减少来回追问。若同时出现多种 STATUS,按「能否调度 → 能否拉镜像 → 能否稳定运行」的依赖顺序处理,先打通上游阻塞。

先 STATUS 分流,再 Events 钉证据,最后 logs 对齐应用——删 Pod 是手段,不是诊断。

中阶收官时,你应能对同事做三道口头题:Pending 第一步敲什么?ImagePull 在 describe 里找哪类句子?CrashLoop 为什么常常需要 --previous?答得出且能指向具体命令,排障决策树就算长进肌肉里了。之后高阶的网络、存储、RBAC,只是在同一棵树上长出的旁支:仍然是 get 看清对象,describe/logs 收集证据,再改期望状态而不是 SSH 进节点硬修。

决策树实操台

1 跳 · 判断

异常从哪个对象开始报案?

先确认对象再选主干:Pod 起不来、Service 不通,还是 Ingress 入口断了。一次只走一条主干。

现场记录

先写自己的证据,再看参考答案。输入只留在当前页面,本站不会读取或验证你的集群。

排障决策树:Pending / ImagePull / CrashLoop

Evidence Receipt · 执行凭证

只填写你实际运行过的环境;stdout / Events 请脱敏后写入下方证据句。

这是你的手动确认,不代表本站已检测命令执行结果。

关联命令

跳转图鉴并展开对应条目(可复制示例)。

对应路径课节

Kubernetes 图鉴 · 场景剧本 · troubleshoot-tree