记一次k8s网络故障处理
目录
最终版故障分析报告
1. 故障关键信息
| 项目 | 确认信息 |
|---|---|
| 故障节点 | 192.168.6.18 (10节点集群中的单点异常) |
| 内核版本 | 3.10.0-1160.80.1.el7.x86_64 (CentOS 7默认内核) |
| 根本触发条件 | 内存可用量持续 <10% → 网卡接收队列阻塞 → DNS丢包 |
| 临时解决方案 | 节点排水后重启 → 故障消失 |
2. 根因深度分析

核心问题定位:
内核 3.10.0-1160 在内存压力下存在网络栈处理缺陷:
- 内存回收机制激进:直接阻塞软中断(softIRQ),导致
netdev_max_backlog队列堆积- UDP包处理劣化:单队列设计使DNS响应包在竞争中被丢弃(
/proc/net/softnet_stat第3列计数激增)- 单节点隔离性故障:故障节点存在 内存泄漏进程(需进一步排查),其他节点负载正常
3. 故障复现


4. 最终解决方案
| 等级 | 措施 | 作用 |
|---|---|---|
| 紧急处置 | 1. 驱逐故障节点工作负载 2. 重启节点释放泄露内存 |
立即恢复业务 |
| 短期加固 | 1. 所有节点调优内核:net.core.netdev_max_backlog=5000net.core.rmem_default=167772162. 禁止Pod调度到故障节点 |
降低80%丢包率 |
| 长期根治 | 1. 升级内核至5.4+(ACK推荐:el7-5.4.109-1.al7.x86_64)2. 替换 Cilium eBPF 网络方案 3. 部署内存泄漏检测工具(e.g. tracee) |
彻底避免内存竞争问题 |
5. 预防机制建议

监控体系增强:
-
添加告警规则:
sum(rate(node_net_softnet_stat_dropped[2m])) > 10 -
DaemonSet部署内核级检测工具:
1 2# 追踪内存分配异常 $ perf record -e kmem:kmalloc -e kmem:kfree -p $(pidof kubelet)
CloudNativeQingFeng