这是《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
排查:
- Service selector;
- Pod readiness;
- targetPort;
- DNS;
- NetworkPolicy;
- 应用监听地址;
- 防火墙或安全组。
26.5 节点 NotReady
kubectl describe node node-01
systemctl status kubelet
journalctl -u kubelet -n 200
常见原因:
- kubelet 停止;
- 证书过期;
- 容器运行时故障;
- 磁盘压力;
- 内存不足;
- 网络 CNI 异常。
26.6 存储挂载失败
kubectl describe pvc pg-data
kubectl get volumeattachment
方向:
- StorageClass;
- CSI 插件;
- 节点拓扑;
- 云平台配额;
- 文件系统格式;
- 权限;
- PV 绑定状态。
26.7 控制面异常
指标:
- API server P99;
- etcd 延迟;
- controller workqueue;
- scheduler pending;
- leader 选举。
避免在控制面异常时执行大规模变更。
本章小结
Kubernetes 排查以状态和事件为入口,再进入容器、网络、存储、节点或控制面。先止血保护业务,再保留现场做根因分析。
思考题
logs --previous有什么作用?- Endpoints 为空如何排查?
- 节点 NotReady 的常见原因?
- FailedMount 如何定位?
- 什么时候应暂停发布和变更?