4、升级前的环境评估:Cilium版本兼容性矩阵、Kubernetes版本依赖、内核版本与eBPF特性要求
Cilium 升级并非简单的二进制替换,其核心依赖链涉及 Kubernetes API 版本、内核 eBPF 特性 以及 Cilium 自身组件间的兼容性。跳过环境评估直接升级,极易导致 CNI 插件失效、节点 NotReady 或租户网络策略丢失。本节提供完整的评估清单与兼容性矩阵。
4.1 Cilium 版本兼容性矩阵
Cilium 遵循语义化版本控制,但跨大版本升级(如 1.12 → 1.14)时,CRD 结构、Agent 与 Operator 通信协议、Hubble 数据模型均可能发生不兼容变更。下表列出主流版本的升级路径与关键约束:
| 源版本 | 目标版本 | 升级方式 | CRD 迁移 | API 兼容性 |
|---|---|---|---|---|
| 1.12.x | 1.13.x | 原地升级 | 自动 | 完全兼容 |
| 1.13.x | 1.14.x | 原地升级 | 自动(需注意 CiliumNetworkPolicy 字段弃用) | 向后兼容 |
| 1.14.x | 1.15.x | 原地升级 | 自动 | 完全兼容 |
| 1.12.x | 1.14.x | 逐步升级(先升 1.13) | 需手动确认 CRD 版本 | 不直接兼容 |
| 1.13.x | 1.15.x | 逐步升级(先升 1.14) | 需手动确认 CRD 版本 | 不直接兼容 |
⚠️ 关键风险: 跨两个大版本升级时,Cilium Agent 可能无法解析新 CRD 字段,导致 CiliumNetworkPolicy 规则丢失。务必遵循 N-1 → N 的逐步升级策略。
4.2 Kubernetes 版本依赖
Cilium 利用 Kubernetes 的 EndpointSlice、NetworkPolicy、Service 等 API 资源。不同 Cilium 版本对 Kubernetes 版本有明确的最低要求:
- Cilium 1.12+:要求 Kubernetes ≥ 1.16(支持 EndpointSlice v1)。
- Cilium 1.14+:要求 Kubernetes ≥ 1.20(支持 Service Topology 与 NodePort 优化)。
- Cilium 1.15+:要求 Kubernetes ≥ 1.24(移除 Dockershim 后的稳定 API)。
- Cilium 1.16+:要求 Kubernetes ≥ 1.26(支持 KubeProxy 替代模式与 Alpha API)。
📌 租户隔离场景提示: 如果集群运行 Kubernetes 1.22 且使用 Cilium 1.12,直接升级到 Cilium 1.16 将导致 Agent 无法启动,因为 1.16 依赖 Kubernetes 1.26 的 API。必须先升级 Kubernetes 控制面。
4.3 内核版本与 eBPF 特性要求
Cilium 的核心能力(如 XDP 加速、Bandwidth Manager、SRv6)依赖特定内核版本的 eBPF 特性。升级前必须确认节点内核是否满足目标 Cilium 版本的最低要求。
| eBPF 特性 | 最低内核版本 | 依赖的 Cilium 功能 | 租户隔离影响 |
|---|---|---|---|
| BPF 辅助函数(bpf_skb_change_tail) | 4.19 | 基础 CNI 连通性 | 无 |
| BPF 映射类型(BPF_MAP_TYPE_PERCPU_HASH) | 5.1 | 网络策略性能优化 | 高并发租户策略可能降级 |
| BPF 原子操作(BPF_XCHG) | 5.10 | Bandwidth Manager | 带宽隔离失效 |
| BPF 迭代器(bpf_iter) | 5.15 | Hubble 网络可观测性 | 租户流量监控中断 |
| BPF 链接(BPF_LINK_TYPE_NETKIT) | 6.3 | KubeProxy 替代模式 | Service 隔离策略失效 |
💡 最佳实践: 对于生产环境,建议内核版本至少为 5.10 LTS(支持 Bandwidth Manager 与稳定 eBPF 特性)。如果计划启用 KubeProxy 替代模式,内核必须 ≥ 6.3。
4.4 升级前环境评估流程图
以下 SVG 图展示了从收集集群信息到确认升级路径的完整评估流程:
4.5 内核特性检测命令清单
在升级前,建议在每个节点上执行以下命令,确认内核是否支持目标 Cilium 版本所需的 eBPF 特性:
# 检查内核版本
uname -r
# 检查 BPF 辅助函数支持
bpftool feature probe | grep -E "bpf_skb_change_tail|bpf_xdp_adjust_head"
# 检查 BPF 映射类型
bpftool feature probe | grep -E "BPF_MAP_TYPE_PERCPU_HASH|BPF_MAP_TYPE_LRU_HASH"
# 检查 BPF 原子操作
bpftool feature probe | grep "BPF_XCHG"
# 检查 BPF 迭代器
bpftool feature probe | grep "bpf_iter"
# 检查 BPF 链接类型
bpftool feature probe | grep "BPF_LINK_TYPE_NETKIT"
📋 自动化检查脚本: 建议将上述命令封装为
preflight-check.sh,在集群所有节点并行执行,输出结果汇总到评估报告。如果某个特性缺失,需评估该特性对租户隔离功能的影响程度。
4.6 租户隔离场景的特殊评估项
对于多租户集群,升级前还需额外验证以下三项:
- CiliumNetworkPolicy CRD 版本:确认目标 Cilium 版本是否支持当前使用的策略字段(如
toFQDN、http规则)。 - Hubble 数据保留策略:升级 Hubble 可能导致历史流日志丢失,需提前导出租户流量审计数据。
- ClusterMesh 跨集群策略:如果使用 ClusterMesh 实现跨集群租户隔离,升级前必须确保所有集群的 Cilium 版本一致。
⚠️ 租户隔离风险: 如果内核版本低于 5.10,升级后 Bandwidth Manager 将无法启用,租户间的带宽隔离策略会降级为无 QoS 保障的默认模式。务必在升级前完成内核升级。