4. 升级前环境准备:Kubernetes集群版本确认、Cilium当前版本检查、etcd/CRI兼容性验证
在实施Cilium CNI升级之前,必须对现有环境进行全面的基线检查。跳过环境准备直接升级,可能导致集群网络中断、租户隔离策略失效,甚至数据面不可逆损坏。本章聚焦三个核心维度:Kubernetes版本兼容性、Cilium当前版本状态、etcd与CRI运行时兼容性。
操作原则:所有检查命令应在集群的控制平面节点上执行,并确保
kubectl上下文指向目标集群。建议在非生产环境先完成一次完整的升级演练。
4.1 Kubernetes集群版本确认
Cilium对Kubernetes API有严格的版本依赖。升级前必须确认集群版本是否在目标Cilium版本的支持矩阵内。使用以下命令获取集群版本信息:
# 获取集群版本(Server Version)
kubectl version --short
# 获取所有节点kubelet版本
kubectl get nodes -o wide
# 获取API Server版本详情
kubectl get --raw /version | jq .
以下表格列出了Cilium 1.14/1.15/1.16对Kubernetes版本的最低要求与推荐版本:
| Cilium版本 | 最低K8s版本 | 推荐K8s版本 | 备注 |
|---|---|---|---|
| 1.14.x | 1.21 | 1.24 – 1.27 | 支持IPv4/IPv6双栈 |
| 1.15.x | 1.23 | 1.25 – 1.28 | 引入BGP Control Plane v2 |
| 1.16.x | 1.25 | 1.27 – 1.30 | 支持Gateway API v1.0 |
风险提示:如果集群版本低于Cilium要求的最低版本,升级Cilium会导致API Server与Cilium Operator之间的CRD通信失败,租户隔离策略(CiliumNetworkPolicy)将无法同步。此时应先升级Kubernetes集群。
4.2 Cilium当前版本检查
在升级前,必须精确记录当前运行的Cilium版本、Helm Release配置以及DaemonSet状态。这为升级后的回滚提供基线。
# 检查Cilium DaemonSet使用的镜像版本
kubectl -n kube-system get ds cilium -o jsonpath='{.spec.template.spec.containers[0].image}'
# 通过Helm查看当前部署参数(推荐)
helm get values cilium -n kube-system
# 查看Cilium版本详情
kubectl -n kube-system exec ds/cilium -- cilium version
# 检查Cilium Operator版本
kubectl -n kube-system get deployment cilium-operator -o jsonpath='{.spec.template.spec.containers[0].image}'
记录以下关键信息到升级清单中:
- Cilium Agent版本:例如
v1.14.5 - Cilium Operator版本:通常与Agent版本一致
- Helm Chart版本:例如
1.14.5 - 内核模块版本:
cilium status中的BPF相关字段 - 配置参数差异:与默认值的diff
关键检查项:如果当前Cilium版本低于1.12,升级路径需要先升级到1.12 LTS版本,再跳转到目标版本。跨大版本升级(如1.11→1.15)必须分步执行,否则CRD迁移会失败。
4.3 etcd兼容性验证
Cilium使用etcd存储集群状态(如Identity、Endpoint、IPAM分配)。etcd版本必须与Kubernetes及Cilium的客户端库兼容。验证方法如下:
# 获取etcd集群版本
kubectl -n kube-system get pods -l component=etcd -o jsonpath='{.items[0].spec.containers[0].image}'
# 或通过etcdctl直接查询(需在etcd Pod内执行)
kubectl -n kube-system exec etcd-master -- etcdctl version
# 检查Cilium与etcd的连接状态
kubectl -n kube-system exec ds/cilium -- cilium status | grep -i etcd
etcd版本兼容性对照表:
| Kubernetes版本 | 推荐etcd版本 | Cilium兼容etcd版本 | 注意事项 |
|---|---|---|---|
| 1.24 – 1.26 | 3.5.6 – 3.5.9 | 3.4.x, 3.5.x | 避免使用3.4.22以下版本(存在watch泄漏) |
| 1.27 – 1.28 | 3.5.9 – 3.5.12 | 3.5.x | 需启用gRPC keepalive |
| 1.29 – 1.30 | 3.5.12+ | 3.5.10+ | 强制TLS 1.3支持 |
etcd升级警告:如果etcd版本低于3.5.0,Cilium的Identity GC可能因watch事件丢失导致租户标识残留。建议在Cilium升级前先将etcd升级到3.5.x LTS版本。
4.4 CRI运行时兼容性验证
Cilium通过CRI(Container Runtime Interface)与容器运行时交互,获取Pod网络命名空间信息。不同CRI实现(containerd、CRI-O、Docker)对CNI插件的调用方式存在差异。
# 检查集群使用的CRI运行时
kubectl get nodes -o jsonpath='{.items[0].status.nodeInfo.containerRuntimeVersion}'
# 检查containerd版本(如果使用containerd)
crictl version
# 验证Cilium与CRI的通信状态
kubectl -n kube-system logs -l k8s-app=cilium --tail=20 | grep -i "cri\|containerd\|runtime"
CRI兼容性检查清单:
- containerd:推荐 ≥ 1.6.18,支持CNI v1.0.0规范
- CRI-O:推荐 ≥ 1.26.0,需验证conmonrs版本
- Docker:仅适用于K8s ≤ 1.24,Cilium 1.14+已弃用Docker CRI适配器
- CRI-Dockerd:如果使用Docker作为运行时,必须使用cri-dockerd ≥ 0.3.0
4.5 环境准备检查清单
将以下清单作为升级前环境准备的最终验收标准,逐项确认后签字:
| 检查项 | 命令/方法 | 通过标准 | 状态 |
|---|---|---|---|
| K8s版本 | kubectl version --short |
≥ 1.25(Cilium 1.16) | ☐ |
| Cilium版本 | cilium version |
记录当前版本号 | ☐ |
| etcd版本 | etcdctl version |
≥ 3.5.0 | ☐ |
| CRI运行时 | crictl version |
containerd ≥ 1.6.18 | ☐ |
| Helm Release | helm get values |
备份当前values.yaml | ☐ |
| 集群健康 | kubectl get nodes |
所有节点Ready | ☐ |
最佳实践:在完成上述所有检查后,建议执行一次全量备份,包括etcd快照、Cilium Helm values、以及所有Cilium CRD资源(CiliumNetworkPolicy、CiliumEndpoint等)。备份命令示例:
etcdctl snapshot save /backup/etcd-snapshot.db。