Kubernetes(k8s)中如何排查Pod和Container崩溃的根本原因?

问题浏览数Icon
1
问题创建时间Icon
2025-05-20 18:01:00
回答 | 共 2 个
作者头像
fenglin66

排查Kubernetes中Pod/Container崩溃的根本原因,可通过以下步骤:1. 使用kubectl describe pod <pod-name>查看Pod事件,检查OOM、镜像拉取失败等错误;2. 通过kubectl logs <pod-name> --previous获取崩溃前日志;3. 使用kubectl exec进入容器检查运行时状态;4. 检查资源限制是否过小导致OOM。

延伸知识点:Kubernetes探针机制(Liveness/Readiness Probe)配置错误是常见崩溃原因。存活探针(Liveness Probe)用于检测应用是否处于死锁状态,当连续探测失败次数超过failureThreshold时,kubelet会重启容器。例如,若配置HTTP探针指向错误端口,会导致容器被误重启。正确配置应确保:1. 探测端点与容器实际监听端口一致;2. initialDelaySeconds需大于应用启动时间;3. periodSeconds不宜过短(默认10秒),避免高频探测引发意外重启。

作者头像
brightwing101
  1. 检查Pod状态

    • kubectl get pods -o wide 查看Pod状态(如CrashLoopBackOff、Error)及所在节点。
    • kubectl describe pod <pod-name> 获取Pod事件,重点关注Events中的Warning信息(如镜像拉取失败、资源不足)。
  2. 查看容器日志

    • kubectl logs <pod-name> -c <container-name> 查看当前容器日志。
    • 若容器已重启,添加--previous参数查看崩溃前的日志:kubectl logs --previous ...
  3. 分析容器退出码

    • kubectl describe pod 中查找Last State: Terminated的Exit Code。
    • 常见退出码:
      • 137(OOMKilled,内存不足)→ 调整资源限制。
      • 1/255(应用错误)→ 检查应用日志。
  4. 检查资源限制

    • kubectl describe pod 查看Requests/Limits配置,确认是否因CPU/内存超限被终止。
    • 节点资源监控:kubectl top node 确认节点负载。
  5. 探针配置验证

    • 检查livenessProbe/readinessProbe的配置(如检测路径、端口、超时时间),错误探针会导致容器重启。
  6. 镜像与启动命令

    • 确认镜像版本和启动命令(command/args)正确,测试镜像本地运行:docker run <image>
  7. 进入容器调试

    • 若容器未崩溃,直接进入:kubectl exec -it <pod-name> -- sh
    • 若崩溃频繁,临时修改启动命令为sleep infinity保持容器运行。
  8. 检查依赖服务

    • 查看应用日志是否因数据库、API等依赖服务不可用导致崩溃。
    • 验证Service/DNS配置:kubectl get endpoints确认服务可达。
  9. 集群事件排查

    • kubectl get events --field-selector involvedObject.name=<pod-name> 过滤Pod相关事件。
    • kubectl get events --sort-by='.metadata.creationTimestamp' 查看全局异常事件。
  10. 内核/系统日志

    • 登录Pod所在节点,通过journalctl -u kubelet/var/log/messages 检查系统级错误(如磁盘满、内核崩溃)。