在真实生产环境里,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 倍。
收藏了,感谢分享