Docker KubernetesNotes

第 26 章:故障排查手册

zjc 于 2026-01-26 发布

这是《Docker 与 Kubernetes 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 排查 Kubernetes 问题要先定位层级:对象状态、Pod 内应用、节点、网络、存储还是控制面。

26.1 通用流程

1. 确认影响面
2. 查看 Pod 状态
3. describe 获取事件
4. logs 查看应用
5. exec 检查进程和网络
6. 检查 Service / Ingress
7. 检查节点和事件
8. 止血后定位根因

26.2 常用命令

kubectl get pods -A -o wide
kubectl get events -A --sort-by=.lastTimestamp
kubectl describe pod app -n shop
kubectl logs app -n shop --previous
kubectl exec -it app -n shop -- sh
kubectl top pods -n shop
kubectl top nodes

26.3 Pod 状态

状态 方向
Pending 调度、资源、PVC
ContainerCreating 镜像、CNI、存储
ImagePullBackOff 镜像、凭据
CrashLoopBackOff 应用、配置、探针
OOMKilled 内存 limit
Evicted 节点压力
Completed 正常结束

26.4 Service 不通

kubectl get svc,endpoints order-service -n shop
kubectl run debug --rm -it --image=busybox:1.36 --restart=Never -- sh

排查:

  1. Service selector;
  2. Pod readiness;
  3. targetPort;
  4. DNS;
  5. NetworkPolicy;
  6. 应用监听地址;
  7. 防火墙或安全组。

26.5 节点 NotReady

kubectl describe node node-01
systemctl status kubelet
journalctl -u kubelet -n 200

常见原因:

  1. kubelet 停止;
  2. 证书过期;
  3. 容器运行时故障;
  4. 磁盘压力;
  5. 内存不足;
  6. 网络 CNI 异常。

26.6 存储挂载失败

kubectl describe pvc pg-data
kubectl get volumeattachment

方向:

  1. StorageClass;
  2. CSI 插件;
  3. 节点拓扑;
  4. 云平台配额;
  5. 文件系统格式;
  6. 权限;
  7. PV 绑定状态。

26.7 控制面异常

指标:

  1. API server P99;
  2. etcd 延迟;
  3. controller workqueue;
  4. scheduler pending;
  5. leader 选举。

避免在控制面异常时执行大规模变更。

本章小结

Kubernetes 排查以状态和事件为入口,再进入容器、网络、存储、节点或控制面。先止血保护业务,再保留现场做根因分析。

思考题

  1. logs --previous 有什么作用?
  2. Endpoints 为空如何排查?
  3. 节点 NotReady 的常见原因?
  4. FailedMount 如何定位?
  5. 什么时候应暂停发布和变更?