Kubernetes 集群故障排查实战指南
在运维 K8s 集群时,遇到节点异常、Pod 调度失败或服务不可用是家常便饭。与其盲目重启,不如遵循一套系统化的排查链路。本文结合一线经验,梳理从 Node 到容器日志的完整诊断流程,涵盖常见状态码分析与组件日志定位,帮助工程师高效恢复服务。
排查思路概览
建议按照以下层级顺序进行排查,由外向内层层递进:
- Node 状态:节点是否存活?
- Pod 状态:Pod 是否调度成功?
- Container 状态:容器进程是否正常?
- Service 流量:流量是否路由到了 Pod?
- Ingress 配置:外部访问入口是否正确?
- 系统日志:Kubelet 及组件是否有报错?
核心组件排查流程
节点故障排查
Node 宕机或 Kubelet 无法启动会导致其上的 Pod 无法运行或终止。首先确认节点健康度:
# 查看节点详情与事件
kubectl get node <node-name>
kubectl describe node <node-name>
若节点处于 NotReady 状态,通常与 PLEG(Pod Lifecycle Event Generator)问题有关。常见原因包括 Kubelet 挂起、CNI 插件未部署、Docker 僵死或磁盘空间不足。修复前务必执行 kubectl describe node 并检查 Kubelet 日志中的具体错误信息。
如果节点加入集群后无法被调度,请检查三点:
- Taints 和 Tolerations 是否与 Pod 匹配
- 资源使用率是否满足调度要求
- 节点与 API Server 的连接是否正常
Pod 异常排查
无论 Pod 处于何种异常状态,以下命令组合通常是第一步:
# 查看配置与事件
kubectl get pod <pod-name> -n <namespace> -o yaml
kubectl describe pod <pod-name> -n <namespace>
# 查看容器日志
kubectl logs -n <namespace> <pod-name> [-c <container-name>]
常见错误状态速查
启动阶段错误:
ImagePullBackoff,ErrImagePull: 镜像拉取失败RegistryUnavailable: 仓库不可达InvalidImageName: 镜像名格式错误
运行阶段错误:
CrashLoopBackOff: 容器反复崩溃RunContainerError,KillContainerError: 运行时错误SetupNetworkError,TeardownNetworkError: 网络插件问题
典型场景分析
1. Pending 状态
说明 Pod 尚未调度到任何 Node。通过 describe 查看 Events 中的 FailedScheduling 信息。
$ kubectl describe pod mypod
Events:
Warning FailedScheduling ... 0/4 nodes are available: 2 Insufficient cpu.

