1. 课程导论:CNI插件在K8s网络中的核心地位,带宽与容量的基本概念,以及性能调优的重要性
1.1 CNI插件:Kubernetes网络的“操作系统”
在Kubernetes集群中,每一个Pod都拥有独立的网络命名空间,而CNI(Container Network Interface)插件正是负责将这些网络命名空间与宿主机网络桥接起来的核心组件。它定义了容器运行时如何创建、配置和销毁网络接口,是集群内所有东西向流量(Pod-to-Pod、Pod-to-Service)和南北向流量(Ingress/Egress)的必经之路。
CNI插件的性能直接决定了集群的网络吞吐上限、延迟抖动以及资源开销。常见的CNI插件包括Calico、Flannel、Cilium、Weave等,它们在数据平面实现上各有侧重:
| CNI插件 | 数据平面技术 | 核心优势 | 典型带宽瓶颈 |
|---|---|---|---|
| Calico | eBPF / iptables / VXLAN | 网络策略精细,原生支持BGP | iptables规则链遍历开销 |
| Cilium | eBPF (XDP + TC) | 高吞吐、低延迟、可观测性强 | eBPF程序复杂度与内核版本依赖 |
| Flannel | VXLAN / host-gw | 部署简单,兼容性好 | VXLAN封装解封装CPU开销 |
| Weave | fastdp / 加密隧道 | 跨主机加密通信 | 用户态转发路径延迟高 |
关键认知: CNI插件不是“可选组件”,而是K8s网络栈的内核。任何Pod通信、Service负载均衡、网络策略执行,最终都落在CNI插件的处理路径上。调优CNI,就是调优整个集群的网络性能。
1.2 带宽与容量:两个容易混淆的核心指标
在性能调优语境下,带宽(Bandwidth)和容量(Capacity)描述的是两个不同维度的能力:
- 带宽:单位时间内能够传输的数据量,通常以
Gbps或Mbps衡量。它反映的是“管道粗细”。 - 容量:系统在给定带宽下能够同时维持的并发连接数或流表条目数。它反映的是“管道能同时走多少条数据流”。
两者之间存在典型的跷跷板效应:当并发连接数(容量)逼近CNI插件的流表上限时,CPU需要花费更多时间进行流表查找和状态维护,导致有效带宽下降。反之,如果追求极致带宽而压缩流表容量,则高并发场景下会出现大量丢包和重传。
调优启示: 不要只盯着带宽数字。一个能跑满 40Gbps 但只能维持 1 万条并发流的CNI配置,在微服务网格(Service Mesh)场景下可能远不如一个跑 20Gbps 但能稳定维持 50 万条并发流的配置。
1.3 性能调优的重要性:从“能用”到“好用”
默认安装的CNI插件通常只保证“功能正确”,远未达到“性能最优”。以下三类场景对CNI性能调优有刚性需求:
- 高吞吐数据平面:AI训练、日志采集、视频流处理等场景,Pod间需要持续传输大流量,带宽利用率是关键。
- 高并发微服务:成百上千个微服务实例频繁进行RPC调用,连接数爆炸,容量不足会导致连接超时和拒绝服务。
- 延迟敏感应用:实时数据库、交易系统、边缘计算,要求P99延迟在毫秒级,任何CNI数据路径上的排队或锁竞争都不可接受。
调优的核心目标可以概括为:在有限的宿主机资源(CPU、内存、网卡队列)下,找到带宽与容量的最佳平衡点,并最小化尾延迟。
1.4 本课程的核心调优路径
我们将沿着以下主线展开调优实践:
- 数据平面选型:eBPF vs iptables vs VXLAN,不同场景下的性能差异。
- 内核参数调优:socket buffer、连接跟踪表、RPS/RFS、XPS队列绑定。
- CNI插件专项调优:Calico的Felix配置、Cilium的bpf-map大小、Flannel的VXLAN MTU。
- 带宽与容量联合压测:使用
iperf3、netperf、wrk2等工具,量化跷跷板效应。 - 生产级最佳实践:大集群规模下的网络规划、NUMA感知、网卡多队列绑定。
前置提醒: 本课程所有调优操作均以“可观测性”为前提。在修改任何CNI参数或内核参数前,务必先建立基准性能基线(baseline),否则无法判断调优效果是正向还是负向。