Kubernetes Pod 排障速查手册

整理 Kubernetes 中 Pod 常见异常状态的排查思路与命令,包括 CrashLoopBackOff、Pending、OOMKilled 等。

通用排查三步

# 1. 看 Pod 状态和事件
kubectl describe pod <pod> -n <ns>

# 2. 看日志(当前容器)
kubectl logs <pod> -n <ns>

# 3. 看上一次崩溃的日志
kubectl logs <pod> -n <ns> --previous

常见状态与根因

CrashLoopBackOff

容器反复启动失败。常见原因:

原因 排查方式
应用启动报错 kubectl logs --previous
配置错误 检查 ConfigMap / Secret 挂载
依赖未就绪 检查数据库、中间件连通性
探针失败 检查 livenessProbe / readinessProbe 参数
OOM kubectl describe pod 看 Last State

Pending

Pod 无法调度到节点。常见原因:

# 看调度失败原因
kubectl describe pod <pod> -n <ns> | grep -A10 Events
  • 资源不足:节点 CPU / 内存不够 → kubectl describe node
  • 污点不匹配:节点有 taint,Pod 没容忍
  • 亲和性限制:nodeAffinity / podAffinity 过严
  • PVC 未绑定:kubectl get pvc -n <ns>

OOMKilled

内存超限被杀:

kubectl describe pod <pod> -n <ns> | grep -i "last state" -A5

处理:

  1. 上调 resources.limits.memory
  2. 排查应用内存泄漏
  3. 调整 JVM / 运行时堆参数

ImagePullBackOff

镜像拉不下来:

  • 镜像名 / tag 写错
  • 私有仓库未配置 imagePullSecrets
  • 网络不通(节点无法访问镜像仓库)
# 测试节点能否拉取
kubectl get events -n <ns> --sort-by=.lastTimestamp

Evicted

节点资源压力导致 Pod 被驱逐:

kubectl describe node <node> | grep -i "memory pressure\|disk pressure"

清理节点磁盘或内存,检查是否有 Pod 没有设置 resources requests。

万能排查命令

# 全局事件(按时间排序)
kubectl get events -A --sort-by=.lastTimestamp | tail -30

# 资源占用
kubectl top pod -n <ns>
kubectl top node

# 查看 Pod 所在节点
kubectl get pod <pod> -n <ns> -o wide

小结

排障的核心顺序是:看状态 → 看事件 → 看日志 → 定位根因。不要一上来就重启 Pod,那样会丢失现场。