系统化梳理Kubernetes集群的故障排查方法论。涵盖Pod生命周期异常、服务发现失效、存储卷挂载失败、网络策略冲突等核心故障场景,结合Prometheus监控指标、eBPF深度追踪、CNI插件分析等技术手段,为企业运维团队提供从现象定位到根因分析的全链路解决方案。
一 、Pod异常状态全解析
1.1 CrashLoopBackOff故障树
| 现象 | 优先排查方向 | 关键诊断命令 |
| 容器立即退出 | 启动命令/入口点错误 | kubectl describe pod |
| 运行5分钟后崩溃 | 内存泄漏/资源超限 | kubectl logs –previous |
| 随机性崩溃 | 就绪探针配置错误 | kubectl exec -it debug-tool |
诊断流程:
- 检查Events中的Warning事件
- 分析前一次运行的容器日志
- 使用临时调试容器进行现场检查
二 、网络不通场景深度排查
2.1 服务不可达分类处置
2.1.1 跨Namespace访问失败
检查项清单:
NetworkPolicy隔离策略
- 服务DNS名称解析(nslookup <service>)
- kube-proxy的iptables/ipvs规则
2.1.2 NodePort无法访问
排查路径:
- 节点防火墙规则(30000-32767端口)
- kube-proxy服务状态
- 负载均衡器健康检查配置
2.2 CNI插件异常处理
2.2.1 Calico网络故障
典型场景:BGP对等体连接中断、IP地址池枯竭、Felix进程CPU飙高
2.2.2 Flannel网络抖动
优化方案:更换后端VXLAN为host-gw模式、调整etcd的heartbeat间隔
三 、存储系统故障排查
3.1 持久化卷挂载失败
3.1.1 常见错误类型
| 错误信息 | 关联组件 | 解决方案 |
| timeout waiting for volume | CSI驱动 | 检查node-driver-registrar |
| failed to get secret | Kubernetes API | 更新StorageClass密钥 |
| multi-attach error | 云平台限制 | 启用ReadWriteMany模式 |
3.2 存储性能问题溯源
3.2.1 IOPS下降分析
使用iostat -x 1定位磁盘瓶颈、检查CSI插件的volume调节参数、评估文件系统(ext4/xfs)的碎片情况
3.2.2 云盘突发性能耗尽
AWS EBS优化方案:启用Provisioned IOPS、调整GP3卷的baseline性能
四 、节点级故障处理
4.1 NotReady状态根因分析
4.1.1 核心检查项
kubelet服务状态:systemctl status kubelet
证书过期验证:openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate
磁盘压力检测:df -h /var/lib/kubelet
4.1.2 资源耗尽场景
OOMKiller记录:dmesg | grep -i kill
PID限制检查:cat /sys/fs/cgroup/pids/kubepods.slice/*/pids.current
4.2 内核参数调优
4.2.1 网络连接调优
net.core.somaxconn = 32768 net.ipv4.tcp_tw_reuse = 1
4.2.2 文件系统优化
inotify限制:fs.inotify.max_user_watches = 1048576
五 、集群组件异常处置
5.1 Control Plane故障
5.1.1 API Server失联
诊断步骤:
- 检查kube-apiserver Pod状态
- 验证etcd集群健康度(etcdctl endpoint health)
- 审计防火墙规则(6443端口)
5.1.2 控制器管理器死锁
- 典型表现:Deployment更新无响应
- 恢复方案:重启kube-controller-manager容器
5.2 云原生中间件问题
5.2.1 Ingress访问异常
分层排查:
- Ingress Controller日志
- 后端Service Endpoints状态
- 证书管理器(如cert-manager)事件
5.2.2 Prometheus监控中断
- 存储问题处理:调整TSDB的保留策略
- 资源限制调整:增加Thanos Sidecar内存配额
六 、高级诊断技术
6.1 eBPF深度追踪
6.1.1 网络丢包分析
# 跟踪calico接口丢包 bpftrace -e ‘tracepoint:net:net_dev_queue { if (args->name ~ “cali*”) { @[args->name] = count(); }}’
- 6.1.2 系统调用追踪
- 定位文件描述符泄漏:bcc工具包中的filetop
6.2 性能调优案例
6.2.1 容器启动缓慢
优化方向:
- 并行镜像拉取(serializeImagePulls: false)
- 使用CRI-O替代Docker
6.2.2 调度延迟过高
改进措施:
- 设置合适的Pod优先级
- 启用Scheduler Framework的并发优化
总结:
常用诊断命令速查
| 场景 | 命令组合 | 输出解析要点 |
| Pod状态检查 | kubectl get pods -owide | STATUS/READY/NODE |
| 服务端点验证 | kubectl get endpoints | 目标IP端口匹配 |
| 网络策略审计 | kubectl describe networkpolicy | Ingress/Egress规则 |
故障模拟训练方案
| 故障类型 | 模拟命令 | 预期影响 |
| 节点网络隔离 | ifconfig eth0 down | NodeNotReady |
| DNS服务中断 | iptables -A OUTPUT -p udp –dport 53 -j DROP | 域名解析失败 |
| 存储卷卸载 | umount /var/lib/kubelet/pods | VolumeMount失败 |
————————————————
版权声明:本文为CSDN博主「知识产权13937636601」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cainiao080605/article/details/146423693

