3. Cilium 架构速览:核心组件关系图

Cilium 并非单一二进制,而是由多个协同工作的组件构成。理解 Cilium Agent、Cilium Operator、Cilium CNI 和 Hubble 之间的职责与数据流,是进行 Pod 资源消耗画像采集与优化的前提。下面通过架构图与表格,快速建立全局认知。

3.1 组件关系总览

下图展示了 Cilium 在 Kubernetes 集群中的核心组件部署位置及其交互关系。Cilium Agent 运行在每个节点上,通过 eBPF 程序直接管理网络策略与负载均衡;Cilium Operator 负责集群级别的控制面协调;Cilium CNI 作为 kubelet 与 Agent 之间的桥梁;Hubble 则提供可观测性数据管道。

Cilium 核心组件关系图 Kubernetes API Server Cilium Operator Kubernetes Node 1 kubelet Cilium CNI 插件 Cilium Agent (DaemonSet) eBPF 程序 (TC/XDP/L7 Policy) Pod eth0 Hubble Relay Hubble Agent (内嵌) Hubble UI 图例: Agent/API eBPF Hubble

3.2 核心组件职责速览

组件 部署模式 核心职责 与 Pod 资源消耗的关系
Cilium Agent DaemonSet(每节点一个) 管理 eBPF 程序、实现网络策略、Service 负载均衡、监控端点状态 直接决定 eBPF 程序加载数量与复杂度,是 CPU/Mem 消耗的主要来源
Cilium Operator Deployment(通常 1~2 副本) 处理集群级协调:IPAM、CNI 配置下发、Endpoint 同步、故障恢复 控制面操作,影响 API Server 负载与集群事件处理延迟
Cilium CNI 二进制插件(由 kubelet 调用) 接收 kubelet 的 CNI ADD/DEL 请求,调用 Agent 完成 Pod 网络配置 影响 Pod 启动延迟,本身资源消耗极低
Hubble Agent 内嵌于 Cilium Agent 采集 eBPF 导出的网络流事件,聚合后上报给 Hubble Relay 流事件处理与缓存占用额外内存,高流量场景需关注
Hubble Relay Deployment(通常 1 副本) 聚合各节点 Hubble Agent 数据,提供全局 API 查询接口 内存消耗与集群规模、流速率正相关
Hubble UI Deployment(可选) 可视化展示 Hubble 数据,提供 Service Map 与流日志 资源消耗较低,主要用于调试与可视化

3.3 关键交互流程

理解组件间的数据流,有助于定位资源消耗瓶颈。以下按 Pod 生命周期梳理核心交互路径:

  1. Pod 创建流程:kubelet 调用 Cilium CNI 二进制 → CNI 通过 Unix Socket 请求 Cilium Agent → Agent 分配 IP、创建 veth pair、加载 eBPF 程序 → 返回成功。
  2. 策略更新流程:用户创建 CiliumNetworkPolicy → Cilium Operator 监听并转换为 Endpoint 变更事件 → Agent 更新本地 eBPF Map 与程序。
  3. 可观测性数据流:eBPF 程序捕获网络包 → Hubble Agent 从 perf ring buffer 读取事件 → 聚合后通过 gRPC 发送给 Hubble Relay → Relay 提供 API 供 Hubble UI 或 hubble observe 命令查询。
优化提示: 在资源消耗画像采集阶段,重点关注 Cilium Agent 的 eBPF 程序数量与 Hubble Agent 的流事件缓存大小。这两个组件直接决定了节点级资源开销,也是后续优化章节的核心对象。

3.4 组件通信方式

各组件之间通过不同的通信机制协作,理解这些机制有助于排查性能问题:

通信对 通信方式 协议/接口 性能关注点
kubelet ↔ Cilium CNI 本地进程调用 CNI 标准 stdin/stdout 低延迟,几乎无瓶颈
Cilium CNI ↔ Cilium Agent 本地 Unix Socket gRPC 高并发 Pod 创建时可能成为瓶颈
Cilium Agent ↔ Kubernetes API 网络调用 REST/gRPC Watch 事件量影响 Agent CPU 使用
Hubble Agent ↔ Hubble Relay 网络调用 gRPC 流数据压缩与带宽占用
Cilium Operator ↔ Kubernetes API 网络调用 REST IPAM 分配频率影响 API Server 负载

3.5 组件关系小结

从资源消耗画像的角度,可以按以下层次记忆组件关系:

  • 数据面(Data Plane):Cilium Agent + eBPF 程序 —— 直接处理 Pod 网络流量,是 CPU 和内存消耗的核心。
  • 控制面(Control Plane):Cilium Operator + Kubernetes API —— 负责策略编排与状态同步,影响集群稳定性。
  • 可观测面(Observability Plane):Hubble Agent + Hubble Relay + Hubble UI —— 提供数据采集与可视化,内存消耗随流量线性增长。