当前位置: 首页 > news >正文

K8s故障排查手册:从Pod崩溃到网络不通

本文基于数百个真实生产环境案例,系统化梳理Kubernetes集群的故障排查方法论。涵盖Pod生命周期异常、服务发现失效、存储卷挂载失败、网络策略冲突等核心故障场景,结合Prometheus监控指标、eBPF深度追踪、CNI插件分析等技术手段,为企业运维团队提供从现象定位到根因分析的全链路解决方案。


第一章 Pod异常状态全解析

1.1 CrashLoopBackOff故障树

现象优先排查方向关键诊断命令
容器立即退出启动命令/入口点错误kubectl describe pod
运行5分钟后崩溃内存泄漏/资源超限kubectl logs --previous
随机性崩溃就绪探针配置错误kubectl exec -it debug-tool

诊断流程

  1. 检查Events中的Warning事件
  2. 分析前一次运行的容器日志
  3. 使用临时调试容器进行现场检查

第二章 网络不通场景深度排查

2.1 服务不可达分类处置

2.1.1 跨Namespace访问失败
  • 检查项清单
    • NetworkPolicy隔离策略
    • 服务DNS名称解析(nslookup <service>
    • kube-proxy的iptables/ipvs规则
2.1.2 NodePort无法访问
  • 排查路径
    1. 节点防火墙规则(30000-32767端口)
    2. kube-proxy服务状态
    3. 负载均衡器健康检查配置

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 volumeCSI驱动检查node-driver-registrar
failed to get secretKubernetes API更新StorageClass密钥
multi-attach error云平台限制启用ReadWriteMany模式

3.2 存储性能问题溯源

3.2.1 IOPS下降分析
  1. 使用iostat -x 1定位磁盘瓶颈
  2. 检查CSI插件的volume调节参数
  3. 评估文件系统(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 网络连接调优
 

text复制

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失联
  • 诊断步骤
    1. 检查kube-apiserver Pod状态
    2. 验证etcd集群健康度(etcdctl endpoint health
    3. 审计防火墙规则(6443端口)
5.1.2 控制器管理器死锁
  • 典型表现
    Deployment更新无响应
  • 恢复方案
    重启kube-controller-manager容器

5.2 云原生中间件问题

5.2.1 Ingress访问异常
  • 分层排查
    1. Ingress Controller日志
    2. 后端Service Endpoints状态
    3. 证书管理器(如cert-manager)事件
5.2.2 Prometheus监控中断
  • 存储问题处理
    调整TSDB的保留策略
  • 资源限制调整
    增加Thanos Sidecar内存配额

第六章 高级诊断技术

6.1 eBPF深度追踪

6.1.1 网络丢包分析
 

text复制

# 跟踪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 容器启动缓慢
  • 优化方向
    1. 并行镜像拉取(serializeImagePulls: false
    2. 使用CRI-O替代Docker
6.2.2 调度延迟过高
  • 改进措施
    1. 设置合适的Pod优先级
    2. 启用Scheduler Framework的并发优化

附录

附录A 常用诊断命令速查

场景命令组合输出解析要点
Pod状态检查kubectl get pods -owideSTATUS/READY/NODE
服务端点验证kubectl get endpoints目标IP端口匹配
网络策略审计kubectl describe networkpolicyIngress/Egress规则

附录B 故障模拟训练方案

故障类型模拟命令预期影响
节点网络隔离ifconfig eth0 downNodeNotReady
DNS服务中断iptables -A OUTPUT -p udp --dport 53 -j DROP域名解析失败
存储卷卸载umount /var/lib/kubelet/podsVolumeMount失败

相关文章:

  • 7.1 分治-快排专题:LeetCode 75. 颜色分类
  • 使用JAVA-使用GUI进行界面设计-进行维吉尼亚密码的解密与加密
  • 力扣hot100二刷——动态规划
  • 落地长沙市某三甲医院!麒麟信安云桌面再添建设标杆
  • k8s1.22 kubeadm 部署
  • 解决vscode终端和本地终端python版本不一致的问题
  • 音视频 二 看书的笔记 MediaPlayer
  • MySQL 8.0.41源码目录深度解析:探索数据库内核的架构蓝图
  • 利用python调接口获取物流标签,并转成PDF保存在指定的文件夹。
  • SylixOS 中 select 原理及使用分析
  • Keil5 安装全攻略
  • 【django】1-1 django构建web程序的基础知识
  • Photoshop怎样保存为ico格式
  • VS自定义静态库并在其他项目中使用
  • SQL Server安装程序无法启动:系统兼容性检查失败
  • 【计算机网络】计算机网络协议、接口与服务全面解析——结合生活化案例与图文详解
  • 中级:设计模式面试题全解析
  • MQTT之重复消息产生
  • node-ddk,electron,主进程通讯,窗口间通讯
  • Django之旅:第五节--Mysql数据库操作(一)
  • 玉渊谭天:美方多渠道主动接触中方希望谈关税
  • 美国经济萎缩意味着什么?关税政策如何反噬经济?
  • 苹果手机为何无法在美制造?全球供应链难迁移
  • 澎湃回声丨23岁小伙“被精神病8年”续:今日将被移出“重精”管理系统
  • 比黄油年糕热量还高,这个火爆全网的甜品劝你慎吃
  • 辽宁辽阳火灾3名伤者无生命危险