Kubernetes 集群网络插件迁移:从 Flannel 到 Calico 实战总结

一、知识总结

本文完整记录了 Kubernetes 集群将网络插件从 Flannel 迁移到 Calico 的全过程,核心思路是:下载 Calico 部署文件 → 镜像本地化(上传 Harbor)→ 修改 YAML 配置 → 删除旧插件 Flannel → 启用 Calico → 验证网络连通性。整个流程围绕「先准备、后切换、再验证」的原则展开,确保集群网络平滑过渡。

二、核心步骤回顾

1. 下载 Calico 部署文件

首先从官方仓库下载 Calico v3.32.2 的部署 YAML 文件,这是后续所有操作的基础。官方建议将所有主机的内存调整为 4G,以保证 Calico 组件稳定运行。

bash 复制代码
curl https://raw.githubusercontent.com/projectcalico/calico/v3.32.2/manifests/calico-typha.yaml -o calico.yaml

2. 镜像本地化(上传 Harbor)

Calico 部署涉及 4 个核心镜像:cninodekube-controllerstypha。由于生产环境通常无法直接访问外网,需要先将镜像拉取下来,打上 Harbor 私有仓库的标签后推送上去,实现离线部署。

bash 复制代码
# 拉取镜像
docker pull quay.io/calico/cni:v3.32.2
docker pull quay.io/calico/node:v3.32.2
docker pull quay.io/calico/kube-controllers:v3.32.2
docker pull quay.io/calico/typha:v3.32.2
打标签并推送
docker tag quay.io/calico/cni:v3.32.2 reg.timinglee.org/calico/cni:v3.32.2
docker push reg.timinglee.org/calico/cni:v3.32.2

操作前需先在 Harbor 中创建 calico 的公开项目,确保各节点都能拉取镜像。

3. 修改 YAML 配置

部署文件需要做三处关键修改:

  • 镜像地址 :将 quay.io/calico/ 前缀替换为本地 Harbor 地址 calico/,共 6 处。
  • 关闭 IPIP 封装 :将 CALICO_IPV4POOL_IPIP 的值改为 "Never",使用纯 BGP 模式。
  • 指定 Pod 网段 :将 CALICO_IPV4POOL_CIDR 设置为 "10.244.0.0/16",与原有 Flannel 网段保持一致,避免地址冲突。
  • 指定检测网卡 :将 CALICO_AUTODETECTION_METHOD 设置为 "interface=eth0",确保 Calico 正确识别集群通信网卡。

4. 删除 Flannel 网络插件

切换前必须先清理旧插件,否则两个 CNI 插件会冲突。操作分两步:先删除 Flannel 的资源对象,再清理各节点上的 CNI 配置文件。

bash 复制代码
# 删除 Flannel 资源
kubectl delete -f kube-flannel.yml
清理各节点 CNI 配置(100、10、20 为节点 IP 尾号)
for id in 100 10 20; do
ssh -l root 172.25.254.$id "rm -rf /etc/cni/net.d/10-flannel.conflist"
done

5. 启用 Calico 并验证

应用新的部署文件后,通过 kubectl get pods 确认所有 Calico 组件处于 Running 状态,包括 calico-nodecalico-typhacalico-kube-controllers。最后创建一个测试 Pod,验证跨节点网络是否正常。

bash 复制代码
kubectl apply -f calico.yaml
kubectl run testpod --image nginx:latest
kubectl get pods -o wide
curl 10.244.36.68

测试 Pod 成功获取到 10.244.36.68 的 IP,且通过 curl 能访问到 nginx 默认页面,说明 Calico 网络已正常工作。

三、关键要点与注意事项

  • 网段一致性 :Calico 的 Pod 网段必须与 Flannel 保持一致(10.244.0.0/16),否则切换后已有服务会因 IP 变化而中断。
  • 镜像本地化:离线环境务必提前将镜像推送到 Harbor,并同步修改 YAML 中的镜像地址,避免部署时拉取失败。
  • 清理旧插件 :删除 Flannel 时不仅要删资源,还要清理各节点的 /etc/cni/net.d/ 配置文件,防止 CNI 插件冲突。
  • IPIP 模式选择 :同网段内建议关闭 IPIP 封装(Never),减少性能开销;跨网段场景才需要开启。
  • 验证不可省略:切换完成后务必创建测试 Pod 并验证跨节点通信,确保网络真正可用。

四、总结

本次迁移的核心价值在于:通过镜像本地化实现离线部署,通过网段一致性和旧插件清理实现平滑切换,通过测试 Pod 验证网络可用性。掌握这套「准备 → 切换 → 验证」的方法论,可以推广到其他 CNI 插件的迁移场景,为 Kubernetes 集群的网络管理打下坚实基础。

相关推荐
Spider Cat 蜘蛛猫4 小时前
微服务- 自动审核商家入驻
微服务·云原生·架构
陈聪.5 小时前
Kubernetes Service 与 Ingress 知识总结
云原生·容器·kubernetes
分布式存储与RustFS1 天前
RustFS 多协议接入全景:S3 之外,Swift/Keystone 与 SFTP/FTPS 怎么选
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
分布式存储与RustFS1 天前
在 Kubernetes 上用 RustFS Operator 给 Tenant 开 KMS 加密:spec.encryption 实战
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
Seoyoneh1 天前
呼叫中心系统云原生架构演进:传统自建与云端部署的技术实现对比分析
云原生·架构
2601_962218471 天前
万象生鲜系统订单全生命周期追踪实现生鲜企业订单业务数字化可视
大数据·运维·微服务·云原生·架构
分布式存储与RustFS2 天前
RustFS 1.0 GA 前的生产验收清单:从 rc.1 到 GA 该准备什么
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
Henry-SAP2 天前
SAP PP 反冲机制业务解析
人工智能·云原生·sap·erp
A-刘晨阳2 天前
K8s集群中的数据库新范式:KES-Operator解锁部署、扩缩容、备份全链路自动化
运维·数据库·云原生·kubernetes·自动化