Kubernetes故障排查

2025-11-24 1,083

系统化梳理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

  • 广告合作

  • QQ群号:4114653

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。