Pod 崩了怎么查?5分钟教你搞懂 K8s 故障排查术

在真实生产环境里,Pod 启动失败、容器一直 Crash、服务突然 500、请求超时这些问题天天都在发生。

但许多新手面对 K8s 问题时,只会一句:“怎么又不行了?”

今天我用一篇文章教你:

Kubernetes 故障排查的万能 5 步法

一次弄懂,后面全部靠它。

一、万能排查公式:5 步走就够了

Pod → Event → Log → Describe → Node

只要按这五步走,你基本能定位 90% 的问题。

步骤 1:先看 Pod 状态

这是所有问题的起点。

kubectl get pod -A

kubectl get pod -n myapp

常见状态说明:

状态

含义

Running

正常运行

Pending

资源不足 / 调度失败

CrashLoopBackOff

容器不停崩溃

ImagePullBackOff

镜像拉不下来

OOMKilled

内存不够被杀掉

Error

业务程序退出码非 0

只要第一眼看到状态,就能立刻确定排查方向。

步骤 2:看 Event(最关键)

90% 的失败信息都藏在 Event。

kubectl describe pod <pod-name> -n myapp | grep -i “Warning”

常见 Event 错误:

错误 Event

说明

FailedScheduling

节点资源不足 / taint

FailedCreatePodSandBox

CNI 网络失败

Back-off restarting container

容器崩溃反复重启

ErrImagePull

镜像不存在

DeadlineExceeded

拉镜像超时

Event 是排查的第一黄金点。

步骤 3:看容器日志

业务错误 99% 都在日志里。

kubectl logs <pod-name> -n myapp

如果有多个容器:

kubectl logs <pod-name> -n myapp -c <container-name>

如果容器一直 Crash,把旧日志也查看:

kubectl logs <pod-name> -n myapp –previous

步骤 4:完整 Describe 分析

看到 Pod 的完整生命周期和错误信息:

kubectl describe pod <pod-name> -n myapp

你能看到:

  • 拉镜像失败缘由
  • probe 探针失败
  • 节点调度失败
  • init 容器失败
  • 环境变量问题
  • 镜像版本
  • 挂载目录异常

Describe 是查复杂问题的神器。

步骤 5:节点状态检查

Pod 本身没问题,那就是 Node 出问题。

kubectl get node

kubectl describe node <node-name>

常见节点问题:

问题

说明

NotReady

网络/内核/组件损坏

DiskPressure

磁盘爆满

MemoryPressure

内存不足

NetworkUnavailable

CNI 插件异常

Kubelet 过载

Kubelet 卡死或压力太大

进一步进入节点排查:

ssh node01

sudo journalctl -u kubelet -f

实战案例:Pod 一直 CrashLoopBackOff 怎么处理?

最常见的 K8s 问题,照着查就行。

① 查看状态

kubectl get pod -n myapp

状态显示:

CrashLoopBackOff

② 查看事件

kubectl describe pod app-xxx -n myapp | grep -i warning

可能看到:

Back-off 5m restarting failed container=app…

③ 查看日志

kubectl logs app-xxx -n myapp

假设日志出现:

panic: cannot connect to MySQL

④ 判断数据库连接不通

检查 service:

kubectl get svc -n myapp

或:

curl http://mysql.myapp.svc.cluster.local:3306

⑤ 修复后重启 Pod

kubectl rollout restart deployment myapp

问题解决。

最后:送你一份排查速查表(可收藏)

排查方向

常见缘由

核心命令

镜像问题

私有仓库、鉴权失败

kubectl describe pod

程序奔溃

代码异常

kubectl logs

网络问题

CNI、Service、DNS

kubectl get svc

调度失败

资源不够

kubectl describe node

探针失败

readiness / liveness 配置错误

kubectl describe pod

总结:

如果你不知道怎么排查 Kubernetes 故障,记住一句话:

Pod → Event → Log → Describe → Node,一条龙搞定所有问题

按这篇文章的步骤处理,你在公司排查 K8s 问题的速度将提升 5 倍。

© 版权声明

相关文章

1 条评论

  • 一树一森林
    一树一森林 投稿者

    收藏了,感谢分享

    回复