Pod 异常时,不要先猜解决方案。Pod phase、等待原因和容器终止原因通常已经提示了失败发生在哪个阶段:

现象或原因主要失败阶段常见方向
Pending调度资源、节点约束、PVC
ImagePullBackOff拉取镜像名称、标签、认证、网络
CreateContainerConfigError创建容器ConfigMap、Secret、字段引用
CrashLoopBackOff启动后崩溃启动命令、应用错误、依赖
OOMKilled运行内存限制或泄漏
Running 但反复重启运行或探针上次日志、liveness

固定的第一轮检查

kubectl get pod <pod-name> -o wide
kubectl describe pod <pod-name>
kubectl logs <pod-name> --all-containers
kubectl logs <pod-name> --previous
kubectl get events --sort-by=.metadata.creationTimestamp

重点不是把所有输出都看一遍,而是建立证据链:

  1. get 确认当前状态、重启次数和所在节点;
  2. describe 查看 Conditions 与末尾 Events;
  3. logs 查看当前进程输出;
  4. 反复崩溃时用 --previous 获取上一个容器实例的日志。

两个快速判断

PendingPodScheduled=False,优先看 scheduler 的 FailedScheduling;已经分配节点但镜像失败,则优先看 kubelet 的拉取事件。

CrashLoopBackOff 不是根因,只表示 Kubernetes 正在退避重启。真正的原因通常在容器退出码、应用日志、启动命令或探针配置中。

先定位失败阶段,再缩小排查范围,通常比反复删除 Pod 更快。

参考:Debug PodsApplication troubleshooting