Kubernetes中排查Pod/Container崩溃的根本原因需系统性分析,关键步骤及工具如下:
-
Pod事件分析:
kubectl describe pod <pod-name>查看Events字段,关注Warning/Error事件(如镜像拉取失败、资源不足、节点不可调度等)。
-
日志追溯:
kubectl logs <pod-name> --previous获取前一次崩溃的容器日志,结合-c指定多容器场景。若容器未启动,需依赖Events或节点日志。
-
资源限制核查:
- 检查Pod的
resources.limits是否过小,通过kubectl top pod监控实际消耗,确认OOMKilled(Exit Code 137)或CPU饥饿问题。
- 检查Pod的
-
探针配置验证:
- 存活探针(livenessProbe)失败会导致容器重启,检查探针超时时间(timeoutSeconds)、间隔(periodSeconds)及端点是否正常。
-
镜像问题定位:
- 确认镜像存在且权限正确,通过
docker run <image>本地测试启动逻辑,排查ENTRYPOINT/CMD错误或依赖缺失。
- 确认镜像存在且权限正确,通过
-
节点状态排查:
kubectl get nodes -o wide检查节点状态,结合journalctl -u kubelet查看节点级错误(如磁盘压力、内核崩溃)。
-
存储/网络依赖:
- 检查PVC绑定状态(
kubectl get pvc)、网络策略(NetworkPolicy)是否阻断关键流量,或DNS解析失败。
- 检查PVC绑定状态(
-
应用级诊断:
- 注入临时调试容器(
kubectl debug)进入Pod环境,手动执行进程并抓取堆栈(如pkill -SIGABRT生成Core Dump)。
- 注入临时调试容器(
推荐工具链:
- 日志聚合:Fluentd+ELK或Loki
- 监控:Prometheus+AlertManager自动捕获异常指标
- 诊断增强:kubectl-neat、k9s简化资源检查