提升 CentOS 上容器 Overlay 网络性能的可落地方案
一 基线评估与瓶颈定位
- 明确网络路径:Overlay 的本质是在 Underlay 之上封装(常见为 VXLAN),先确认是否必须跨主机 Overlay,能否在同主机改用 bridge 以降低封装开销。
- 建立可复现的基准:在节点间运行 iperf3(如:iperf3 -c $peer -P 4),记录带宽、抖动、丢包;在容器内对业务端口跑 wrk/ab 验证端到端。
- 快速巡检:
- 查看网卡与队列:ip -s link、ethtool -l/-g $IF;必要时增大 RX/TX 队列 与中断绑定。
- 连接跟踪与内核日志:conntrack -S、dmesg | grep -i conntrack;高并发下 conntrack 易成瓶颈。
- 资源监控:nmon、iftop、nethogs、systemd-cgtop,定位是 CPU、软中断还是带宽受限。
- 容器网络状态:docker network ls/inspect 或 crictl network ls/inspect;确认是否启用 overlay 驱动与加密。
- 抓包分析:tcpdump -i any -nn host $overlay_ip or port $port,区分是封装开销、丢包重传还是应用问题。
二 内核与系统栈升级
- 升级内核:CentOS 7 默认的 3.10 内核与现代容器网络栈(如 IPVS/eBPF/VXLAN)存在明显兼容与性能差距。升级到 5.4 LTS(ELRepo) 或更高版本,可显著改善 VXLAN 封包、连接复用与 conntrack 效率。
- 启用 ELRepo 并安装 LTS 内核:
- rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
- yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
- yum --enablerepo=elrepo-kernel install kernel-lt -y
- grub2-set-default 0 && grub2-mkconfig -o /boot/grub2/grub.cfg && reboot
- 验证:uname -r 应显示 5.4.x 或更高。
- 启用 CPU 性能模式与中断亲和:将 CPU 置于 performance 模式,减少节能导致的时延波动;结合 irqbalance/手动 smp_affinity 将网卡中断分散到多核。
- 调大网络缓冲与队列:在 /etc/sysctl.conf 中提升 net.core.rmem_max、net.core.wmem_max、net.ipv4.tcp_rmem、net.ipv4.tcp_wmem,并适度增大 netdev_budget 与 RPS/RFS 提升软中断处理能力。
三 容器网络与协议栈优化
- 选择高效数据面:
- Docker Swarm:使用 overlay(attachable) 时,尽量关闭加密(如无安全要求)以减少加解密开销;确保 IPv4 转发 已开启,必要时可关闭 IPv6 以避免干扰。
- Kubernetes:优先选用 eBPF/Cilium 或 IPVS 模式;在 kube-proxy 启用 ipvs 并优化连接复用参数(如 conn_reuse_mode),避免退化为 iptables。
- 减少封装与跳数:能同主机通信的业务优先走 bridge/pod 网段直连;跨主机时确保 VTEP/Underlay 路由 对称、无额外 NAT。
- 连接与内核参数:
- 提升文件描述符与连接上限:/etc/security/limits.conf 与 systemd 服务 LimitNOFILE。
- 缓解 conntrack 压力:增大 nf_conntrack_max 与桶数,合理设置 tcp_tw_reuse/tcp_fin_timeout,避免短连接风暴。
- 队列与 BBR:启用 BBR(net.core.default_qdisc=fq、net.ipv4.tcp_congestion_control=bbr),提升长肥管道吞吐。
- 防火墙与安全组:仅放行必要端口与协议,减少规则匹配成本;在 VXLAN 场景放行 UDP 4789。
四 物理与拓扑层面的优化
- 使用 高性能网卡与交换机,开启 GRO/LRO/RSS 等硬件卸载;在虚拟化环境中优先 virtio-net 并配置多队列。
- 优化拓扑与带宽:降低跨机架/跨机房路径的 RTT 与拥塞;必要时做 ECMP 或多路径传输以分担负载。
- 队列与缓冲:结合流量特征调整 txqueuelen、驱动队列与中断合并参数,避免缓存过小导致丢包、过大导致抖动。
五 持续监控与回归测试
- 建立覆盖网络全链路的监控:
- 主机/容器层:nmon、iftop、nethogs、systemd-cgtop;
- 网络层:ip -s、ethtool -S、conntrack -S;
- 抓包与深度分析:tcpdump、Wireshark;
- 可视化:Prometheus + Grafana 采集接口/队列/丢包/重传等指标,设置阈值告警。
- 每次变更后进行回归:重复 iperf3 与业务压测,观察 P95/P99 延迟、带宽、重传率 与 CPU 软中断占比,确保优化收益稳定。