Kubernetes Pod 崩溃循环分析器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/kubernetes-pod-crash-loop-analyzer 到你的 AI 助手。
技能介绍
要解决什么问题
Pod 陷入 CrashLoopBackOff 时,kubectl logs 往往只留下最后一次崩溃的尾部输出。真正的原因可能在更早的容器退出记录里,也可能混在 kubectl describe 的事件流中:是配置写错、依赖不可达,还是容器被内核杀掉?靠肉眼翻退出码、对时间线、查内存曲线,既慢又容易漏掉 OOMKilled 这类"看起来是应用报错,实际是内存超限"的信号。
它如何工作
这个技能把诊断拆成三条互相印证的证据链:
- 事件与状态:读取
kubectl describe pod输出,提取容器的Last State、Reason与Exit Code,而不是只信当前的Running假象。 - 退出码分析:针对
126/127、137、143等常见退出码区分"命令不存在""被 SIGKILL""优雅退出"等不同成因。 - 事件时间线:通过 Kubernetes Events API 拉取
Scheduled、Started、Killing、BackOff等事件,按发生顺序重建崩溃节奏,判断是启动即退、运行一段时间后才退,还是反复重启。 - 内存交叉验证:当出现
OOMKilled信号时,用 Prometheus 的container_memory_rss指标和 cAdvisor 统计做比对,确认内存是否真的触顶,避免把资源问题误判为应用缺陷。
适用边界与注意点
- 需要在环境中有可用的 Docker 环境,上游明确把它列为前置条件。
- 诊断依赖集群内可访问的
kubectl上下文与 Prometheus/cAdvisor 数据;指标缺失时,内存维度只能作为参考。 - 它给出的是根因分析结果,不包含自动修复、回滚或重启操作,后续处置仍需人工确认。
使用场景
- 线上 Pod 反复重启,需要从 describe 输出中确认容器是 OOMKilled、配置错误还是命令缺失
- 容器退出码混杂不清时,需要区分 126/127、137、143 各自代表的真实成因
- 需要按 Scheduled、Started、Killing、BackOff 事件时间线判断 Pod 是启动即退还是运行一段时间后才崩
- 怀疑内存超限导致崩溃,需要用 Prometheus 的 container_memory_rss 与 cAdvisor 数据交叉验证是否触顶
适合人员
- 负责 K8s 集群排障的 SRE,需要在 Pod 崩溃循环时快速给出可信的根因结论
- 管理容器化在线服务的运维工程师,需要区分崩溃是应用缺陷还是内存资源超限
- 跟进线上故障的开发或测试人员,需要从退出码与事件流中还原容器为何反复退出