Agent Skills
返回列表
🔒

Kubernetes Pod 故障诊断

IT 运维与安全 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/kubernetes-pod-crash-diagnostics-3

技能介绍

Pod 反复重启时,你缺的不是命令,而是线索

CrashLoopBackOff 和 OOMKilled 是 Kubernetes 里最“会说话”的两类故障——Pod 不会静默死亡,它会留下一串证据:退出码、事件、上一次容器的日志。但人工排查时,这些证据散落在三四个命令的输出里,很容易被忽略。真正棘手的往往是那些“看起来像镜像问题”却实际是探针配置错误的场景:镜像启动需要 20 秒,而 liveness probe 的 initialDelaySeconds 只给了 5 秒,容器被反复杀死重启,日志里却只写着探针超时。

这个技能要解决的就是“证据收集 + 根因定位”这一段机械但容易遗漏的工作。

它如何工作

核心流程分三步:

  • kubectl describe pod:拉取 Pod 当前状态、重启次数、各容器退出码以及 Events 段,识别 OOMKilled、ImagePullBackOff、Unhealthy 等关键信号
  • kubectl logs --previous:读取崩溃前容器的上一份日志,而不是当前(可能已退出)容器的输出
  • kubectl get events:补充 Pod 级事件之外的集群视角信息

拿到输出后,它会解析几类关键信息:

  • 退出码:如 137(SIGKILL,常由 OOM 或探针杀死)、1 或 2(应用自身启动失败)、127(入口命令不存在)
  • 资源限制:对照 resources.limits.memory 与实际用量,确认是否被 cgroup OOM killer 终止
  • 探针配置:检查 liveness/readiness probe 的 initialDelaySeconds、timeoutSeconds 是否与应用启动耗时匹配

适用边界与注意点

  • 它诊断的是“已经发生”的崩溃,不负责预测或容量规划
  • 日志输出依赖容器写 stdout/stderr;只写日志文件、不输出到标准输出的应用,能拿到的信息有限
  • Events 有默认 TTL,刚发生几分钟内的故障才有完整记录
  • 需要集群访问权限,且 kubectl 上下文必须指向正确的命名空间
  • 只能基于已有证据推理,无法访问源码或 CI 产物,复杂场景仍需人工结合部署流水线排查

使用场景

  • 线上 Pod 陷入 CrashLoopBackOff,需要快速收集退出码、事件和崩溃前日志定位原因
  • 容器因内存超限被 OOMKilled,需要结合资源限制判断是配置不足还是用量突增
  • Pod 反复重启但当前日志为空,需要提取上一次容器的日志才能看到报错信息
  • 新服务上线即崩溃,需要对比 liveness 探针参数与应用启动耗时确认是否被误杀

适合人员

  • Kubernetes 平台 SRE:值班时需要在最短时间内对故障 Pod 做出根因判断并上报处置方向
  • 后端开发工程师:自己负责的服务反复重启,需要看懂退出码与探针配置以区分应用缺陷和运维配置问题
  • 云原生运维工程师:负责多集群稳定性,需要建立 Pod 崩溃排查的标准流程而非临时命令拼凑
  • DevOps 工程师:在发布新版本后需要快速判断 CrashLoopBackOff 是镜像问题还是资源限制过低