排查Kubernetes中Pod或Container崩溃的根本原因,建议按以下步骤分层定位:
- 检查Pod状态与事件:使用
kubectl describe pod <pod-name>
查看Events字段,重点关注ImagePullBackOff(镜像拉取失败)、CrashLoopBackOff(循环崩溃)、OOMKilled(内存溢出)等关键事件。 - 分析容器日志:通过
kubectl logs <pod-name> -c <container-name> --previous
获取前一次崩溃日志,结合应用自身日志输出(如错误堆栈)定位代码或配置问题。 - 资源限制核查:检查Pod的resources配置(requests/limits),内存不足会导致OOM,CPU争抢可能导致进程挂起,使用
kubectl top pod
观察实时消耗。 - 探针配置验证:Liveness/Readiness Probe配置错误(如检测路径、端口或超时时间不合理)可能导致频繁重启,需确保探针行为与应用逻辑匹配。
- 镜像与启动命令:确认镜像版本、Entrypoint参数正确性,通过
kubectl exec
进入容器手动执行启动命令,验证是否存在依赖缺失或权限问题。 - 节点级问题排查:若多个Pod异常,检查节点状态(
kubectl describe node
),关注磁盘压力、网络插件故障或内核错误(dmesg日志)。 - 核心转储分析:启用coredump收集(需提前配置),使用gdb/delve等工具分析崩溃时的内存快照。
关键经验:优先通过事件时间线(Events Timeline)缩小范围,结合日志特征(如Java的OutOfMemoryError)快速收敛问题类型。复杂场景需结合APM工具(如Prometheus+Grafana)监控应用性能指标辅助诊断。