Skip to content

5. 核心模块 ​

一句话理解:CNI 的核心模块是"参考插件 + 主流数据面实现",CSI 的核心模块是"sidecar 控制器 + 卷语义 + 后端驱动选型"——网络侧你要在 bridge / VXLAN / BGP / eBPF / SR-IOV 之间做取舍,存储侧你要在 RWO / RWX / 文件系统 / 块设备 / 快照 / 拓扑之间做语义选择。

5.1 CNI 参考插件 ​

containernetworking/plugins 仓库提供了一组官方参考实现,很多商业 CNI 都复用或扩展它们。

插件作用AI 场景注意点
bridge创建 Linux bridge,把 veth 接到 bridge同节点 Pod 二层互通,跨节点需 overlay / 路由
host-local本地文件记录 IP 分配节点级地址池,不适合大规模;重启后记录可能丢失
static分配固定 IP需要上层指定
loopback配置 lo 接口每个 netns 必备
route添加额外路由多网段场景
bandwidth用 tc 做 ingress/egress 限速训练 Pod QoS
portmapDNAT 端口映射类似 hostPort
firewalliptables/nftables 防火墙规则与 NetworkPolicy 互补
vlan / macvlan / ipvlan二层/三层直连需要底层网络配合

bridge + host-local 的最小工作配置:

json
{
  "cniVersion": "1.0.0",
  "name": "demo-net",
  "plugins": [
    {
      "type": "bridge",
      "bridge": "cni0",
      "isGateway": true,
      "ipMasq": true,
      "hairpinMode": true,
      "ipam": {
        "type": "host-local",
        "subnet": "10.244.1.0/24",
        "routes": [{ "dst": "0.0.0.0/0" }]
      }
    },
    {
      "type": "firewall"
    }
  ]
}

5.2 主流 CNI 实现对比 ​

CNI数据面跨节点模型NetworkPolicy性能适合 AI 场景
FlannelVXLAN / host-gw / UDPOverlay❌中小集群、测试
CalicoBGP / VXLAN / eBPF路由 / Overlay✅(iptables/eBPF)高大规模、BGP 网络
CiliumeBPF(netkit、Big TCP)路由 / Overlay✅(eBPF)很高高性能、可观测、Gateway API 一体化、RDMA aware
WeaveVXLANOverlay✅中Weaveworks 已停业,项目停更,勿用于新项目
Multusmeta-CNI依赖子插件依赖子插件-多网卡分离(管理/存储/RDMA)
SR-IOV CNISR-IOV VF 直通Underlay-最高RDMA / GPU Direct
AntreaOVSOverlay✅高VMware 生态

2025-2026:Cilium 为什么成了默认选项 ​

截至 2026-10,Cilium 已是大厂默认或推荐的 CNI:GKE Dataplane V2、AKS "Azure CNI Powered by Cilium"、EKS 均内置;CNCF《Cilium Annual Report 2025》显示近 80% 用户用于生产。近一年的版本(1.18 → 1.20,1.20.x 为 2026-08 当前稳定线)里与 AI 平台直接相关的特性:

  • Gateway API 深度集成:HTTPRoute / GRPCRoute、CORS 等复杂过滤器由 eBPF 数据面直接承接——在 ingress-nginx 于 2026-03 停止维护后,"Cilium 做 CNI + 南北向网关"成了天然组合(Helm gatewayAPI.enabled=true,生成 cilium GatewayClass)。
  • 原生 sidecarless mTLS:在内核数据面直接做工作负载身份与双向 TLS,不注入 Envoy sidecar,对延迟敏感的推理服务友好。
  • Big TCP 扩展到 UDP 隧道(CiliumCon Europe 2026):VXLAN/Geneve 大段发包,吞吐提升约 30~50%。
  • Multihoming(多宿主节点)与 DRA 网络驱动:一个节点多块网卡统一纳管;并展示了以 DRA driver 身份接管 SR-IOV 多网络的路线,目标是替代 Multus 中介层。
  • Cluster Mesh / KubeVirt 组合:VM 与容器跑在一张统一网络平面上,AI 平台混布传统虚拟化负载时不再需要两套网络。

选型建议(AI 场景) ​

场景推荐 CNI理由
通用推理 / 微服务Cilium / CalicoeBPF / BGP 性能好、NetworkPolicy 成熟
大模型分布式训练Cilium + Multus + SR-IOV CNI默认网络走 Cilium,RDMA 走 SR-IOV VF
需要 Pod IP 与物理网络同网段Calico BGP / Macvlan路由可达,便于外部防火墙集成
快速 POC / 测试Flannel host-gw简单,但性能和功能弱

5.3 NetworkPolicy 数据面 ​

NetworkPolicy 是 K8s API,但真正干活的是 CNI 数据面。实现方式有三种:

text
Pod 流量
   │
   ├─ 方式 A:iptables / nftables 规则链
   │          按 namespace / label / CIDR 匹配,ACCEPT / DROP
   │
   ├─ 方式 B:eBPF 程序 hook cgroup/netdev
   │          Cilium 在 tc/xdp 入口做策略判决
   │
   └─ 方式 C:OVS flow
              Antrea/Weave 用 Open vSwitch flow 匹配

三种实现对比 ​

实现延迟大规模策略数可观测性代表 CNI
iptables中策略多时长连接建立慢一般Calico(传统模式)
nftables中优于 iptables一般Calico(新 nftables 后端)
eBPF低高强(Cilium Hubble)Cilium
OVS中高中Antrea

AI 平台通常策略复杂(多租户、训练/推理隔离),Cilium 的 eBPF 方案在大规模下更有优势。

5.4 CSI sidecars ​

kubernetes-csi 组织维护了一组 sidecar,把 K8s 存储语义翻译成 CSI gRPC。

sidecar监听对象调用 CSI作用
external-provisionerPVC / StorageClassCreateVolume / DeleteVolume动态创建 / 删除卷
external-attacherVolumeAttachmentControllerPublishVolume / ControllerUnpublishVolume控制器端挂载 / 卸载
external-resizerPVC(扩容请求)ControllerExpandVolume后端卷扩容
external-snapshotterVolumeSnapshotCreateSnapshot / DeleteSnapshot卷快照
node-driver-registrar无注册 socket让 kubelet 发现 Node 服务
livenessprobeCSI driverProbe健康检查
csi-attacher-health-monitorVolumeAttachmentControllerGetVolume检测异常 attach

部署示例 ​

yaml
# Controller Deployment 片段
containers:
  - name: csi-driver
    image: my-csi-driver:v1.2.3
    volumeMounts:
      - name: socket-dir
        mountPath: /csi
  - name: external-provisioner
    image: registry.k8s.io/sig-storage/csi-provisioner:v5.0.0
    args:
      - --csi-address=/csi/csi.sock
      - --feature-gates=Topology=true
    volumeMounts:
      - name: socket-dir
        mountPath: /csi
  - name: external-attacher
    image: registry.k8s.io/sig-storage/csi-attacher:v4.7.0
    args:
      - --csi-address=/csi/csi.sock
    volumeMounts:
      - name: socket-dir
        mountPath: /csi

# Node DaemonSet 片段
containers:
  - name: csi-driver
    image: my-csi-driver:v1.2.3
    securityContext:
      privileged: true
    volumeMounts:
      - name: plugin-dir
        mountPath: /csi
      - name: mountpoint-dir
        mountPath: /var/lib/kubelet/pods
        mountPropagation: Bidirectional
      - name: device-dir
        mountPath: /dev
  - name: node-driver-registrar
    image: registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.11.0
    args:
      - --csi-address=/csi/csi.sock
      - --kubelet-registration-path=/var/lib/kubelet/plugins/my.driver/csi.sock
    volumeMounts:
      - name: plugin-dir
        mountPath: /csi
      - name: registration-dir
        mountPath: /registration

5.5 CSI 卷语义 ​

accessModes ​

模式缩写含义典型后端
ReadWriteOnceRWO单节点读写EBS / GCE PD / Ceph RBD
ReadOnlyManyROX多节点只读NFS / CephFS / 对象存储
ReadWriteManyRWX多节点读写NFS / CephFS / Lustre / WEKA
ReadWriteOncePodRWOP单 Pod 读写(v1.29 GA,原 v1.27 beta)把 RWO 的"单节点"约束收紧到"单 Pod",防同节点误共享

AI 场景:

  • 训练 checkpoint → 通常 RWO(本地 SSD / 块存储)或 RWX(并行文件系统)。
  • 共享数据集 → RWX 或 ROX(NFS / Lustre / S3 CSI 只读)。
  • 模型权重加载 → ROX(多 Pod 只读挂载)。

volumeMode ​

模式说明用途
Filesystem默认;CSI 驱动格式化并 mount大多数 AI 场景
Block裸块设备;Pod 看到 /dev/xvdba数据库、需要自定义文件系统、性能敏感

topology ​

yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: zonal-ssd
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
  - matchLabelExpressions:
      - key: topology.ebs.csi.aws.com/zone
        values: ["us-east-1a", "us-east-1b"]
parameters:
  type: gp3
  iops: "16000"

volumeBindingMode: WaitForFirstConsumer 是 AI 训练的关键:先调度 Pod,再在 Pod 所在可用区创建卷,避免跨 AZ attach 失败。

snapshot / clone ​

yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: checkpoint-snap
spec:
  volumeSnapshotClassName: csi-snapclass
  source:
    persistentVolumeClaimName: training-data

快照用途:

  • 训练 checkpoint 保护
  • 数据集版本化(ROX PVC 从 snapshot 恢复)
  • 快速克隆环境做推理微调

多卷场景请改用 Volume Group Snapshot(v1.36 GA,见第 4 章流程):按 label selector 一次原子快照整组 PVC。此外,临时 scratch / 缓存数据推荐 generic ephemeral volumes(v1.23 GA)——PVC 随 Pod 创建与销毁,不会留下孤儿卷。

5.6 AI 存储 CSI 选型 ​

后端语义吞吐 / IOPS共享适合场景
local PV / TopoLVM块 / 文件系统极高(本地 NVMe)否(RWO)checkpoint、单节点训练
EBS / GCE PD / Azure Disk块 / 文件系统高否(RWO)通用有状态推理、数据库
Ceph RBD块 / 文件系统中高否(RWO)私有云统一块存储
CephFS文件系统中是(RWX)共享数据集、多 Pod 读
Lustre并行文件系统极高是(RWX)大规模训练 checkpoint + 数据集
WEKA并行文件系统极高是(RWX)AI/ML 特化,低 latency,支持 GPUDirect Storage
NFS CSI文件系统中是(RWX/ROX)简单共享、数据集
S3 CSI对象存储高吞吐、高延迟是(ROX)模型仓库、数据集、只读加载

两个 2025-2026 年的选型补充:

  • checkpoint 的"本地优先"模式:Kubeflow Trainer v2(OpenShift AI 已内置)推荐 checkpoint 先写本地 emptyDir/local PV,后台异步上传 S3 兼容对象存储,GPU 不被慢速上传阻塞,并在 Pod 收到 SIGTERM(抢占/缩容)时触发 Just-In-Time checkpoint。注意 DeepSpeed ZeRO-3 的 checkpoint 合并可能产生 42.5 倍于最终体积的临时峰值写入(如 1.6GB 最终大小 → 68GB 临时写入),选型时按峰值而非最终大小规划吞吐。
  • 存储开始往 DPU 上跑:WEKA 在 GTC DC 2025(2025-10)发布 NeuralMesh,直接把存储软件栈部署到 NVIDIA BlueField-4 DPU 上,省掉独立存储 CPU 服务器——"存储节点 = 装了 DPU 的计算节点"这种超融合形态值得关注。

训练 vs 推理的 CSI 选择 ​

阶段推荐 CSI理由
训练 checkpoint 写入local PV / Lustre / WEKA高顺序写吞吐,避免网络存储瓶颈
训练数据集读取Lustre / CephFS / NFS / S3 CSI ROX多 worker 共享或并行读取
模型权重分发S3 CSI ROX / 镜像层 / local cache大文件只读,成本低
推理有状态化EBS / Ceph RBDRWO,持久化日志 / 状态

5.7 本章小结 ​

领域关键选择
CNI 数据面Flannel 简单、Calico 大规模 BGP、Cilium 已是云厂商默认选项(eBPF + Gateway API)、Multus 多网卡、SR-IOV RDMA
NetworkPolicyiptables / eBPF / OVS;大规模 AI 推荐 eBPF
CSI sidecarsprovisioner / attacher / resizer / snapshotter / registrar
卷语义RWO/RWX/ROX/RWOP(v1.29 GA)、Filesystem/Block、topology、snapshot、Volume Group Snapshot(v1.36 GA)、ephemeral volume
AI 存储训练 local/并行文件系统 + 本地优先异步上传、推理块存储/只读对象、数据集共享 RWX

下一章我们进入源码,看这些模块是怎么实现的。

Released under CC-BY-SA-4.0 License.