news 2026/4/25 5:11:58

避坑指南:彻底清理K8s集群中的Calico网络残留(从Pod、路由到CNI配置)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
避坑指南:彻底清理K8s集群中的Calico网络残留(从Pod、路由到CNI配置)

Kubernetes网络清理实战:彻底移除Calico的完整指南

当你决定在Kubernetes集群中更换网络插件时,可能会发现简单地执行kubectl delete -f calico.yaml并不能完全清除Calico的所有痕迹。残留的网络配置、路由规则和CNI文件可能导致新网络插件无法正常工作,甚至引发节点状态异常。本文将带你深入排查并彻底清理Calico网络,确保你的集群网络环境干净如初。

1. 为什么Calico会留下"网络幽灵"?

Calico作为企业级Kubernetes网络方案,采用了独特的BGP路由和策略驱动架构,这使得它在提供高性能网络的同时,也会在系统中留下多个层面的配置痕迹。常见的残留问题包括:

  • 节点路由表污染:Calico通过BGP协议在节点间交换路由信息,即使删除Deployment后,这些手工添加的路由规则仍会保留
  • CNI配置残留/etc/cni/net.d/目录下的配置文件不会被自动清理
  • 内核模块加载:IPIP隧道模式会加载内核模块并创建tunl0接口
  • etcd数据残留:如果使用etcd作为后端存储,网络策略等数据可能仍然存在

提示:在开始清理前,建议先备份/etc/cni/net.d/目录和节点路由表,以防需要回滚操作。

2. 预清理检查清单

在执行实际清理操作前,先确认当前集群状态:

# 检查Calico相关Pod是否已终止 kubectl get pods -n kube-system | grep calico # 检查节点网络接口 ip a | grep -E 'tunl0|wireguard' # 检查节点路由表 ip route show | grep bird # 检查CNI配置文件 ls -la /etc/cni/net.d/ | grep -i calico

典型的问题表现包括:

  • coredns Pod卡在Pending状态
  • 节点状态显示NotReady
  • 新部署的网络插件无法正常工作
  • 存在无法解释的网络连通性问题

3. 系统化清理步骤

3.1 删除Kubernetes资源

首先删除Calico的Kubernetes manifest:

kubectl delete -f calico.yaml

但这一步通常不够彻底,还需要手动检查并删除以下资源:

# 删除可能遗留的CRD kubectl delete crd bgpconfigurations.crd.projectcalico.org kubectl delete crd bgppeers.crd.projectcalico.org kubectl delete crd blockaffinities.crd.projectcalico.org kubectl delete crd clusterinformations.crd.projectcalico.org kubectl delete crd felixconfigurations.crd.projectcalico.org kubectl delete crd globalnetworkpolicies.crd.projectcalico.org kubectl delete crd globalnetworksets.crd.projectcalico.org kubectl delete crd hostendpoints.crd.projectcalico.org kubectl delete crd ipamblocks.crd.projectcalico.org kubectl delete crd ipamconfigs.crd.projectcalico.org kubectl delete crd ipamhandles.crd.projectcalico.org kubectl delete crd ippools.crd.projectcalico.org kubectl delete crd kubecontrollersconfigurations.crd.projectcalico.org kubectl delete crd networkpolicies.crd.projectcalico.org kubectl delete crd networksets.crd.projectcalico.org # 删除可能遗留的ClusterRole和ClusterRoleBinding kubectl delete clusterrole calico-kube-controllers kubectl delete clusterrolebinding calico-kube-controllers kubectl delete clusterrole calico-node kubectl delete clusterrolebinding calico-node

3.2 清理节点网络配置

每个节点上执行以下操作:

  1. 移除网络接口

    # 删除tunl0接口(如果使用IPIP模式) ip link delete tunl0 # 卸载相关内核模块 modprobe -r ipip
  2. 清理路由表

    # 查找并删除Calico添加的路由 ip route show | grep bird | awk '{print $1}' | while read route; do ip route delete $route done
  3. 清理ARP表

    ip neigh show | grep cali | awk '{print $1}' | while read ip; do ip neigh delete $ip dev <interface> done

3.3 删除CNI配置文件

每个节点上删除Calico的CNI配置文件:

rm -f /etc/cni/net.d/10-calico.conflist rm -f /etc/cni/net.d/calico-kubeconfig rm -f /etc/cni/net.d/calico-tls/*

3.4 重启关键组件

完成上述清理后,需要重启相关服务:

# 重启kubelet systemctl restart kubelet # 删除并重建coredns Pod kubectl delete pod -n kube-system -l k8s-app=kube-dns

4. 验证清理结果

执行完整套清理流程后,使用以下命令验证:

检查项验证命令预期结果
Calico Podkubectl get pods -n kube-system | grep calico无输出
网络接口ip a | grep -E 'tunl0|wireguard'无输出
路由表ip route show | grep bird无输出
CNI配置ls -la /etc/cni/net.d/无calico相关文件
节点状态kubectl get nodes所有节点Ready

如果发现仍有残留,可以尝试以下进阶清理方法:

# 清理iptables规则(谨慎操作) iptables-save | grep -v calico | iptables-restore ip6tables-save | grep -v calico | ip6tables-restore # 清理IPVS规则(如果使用kube-proxy的IPVS模式) ipvsadm -C

5. 切换到新网络插件的最佳实践

在确认Calico已完全清理后,部署新网络插件时建议遵循以下顺序:

  1. 确保所有节点上的Calico清理工作已完成
  2. 部署新的CNI插件manifest
  3. 观察coredns Pod状态
  4. 检查节点网络状态
  5. 验证跨节点Pod通信

常见问题处理:

  • coredns持续Pending:检查kubelet日志,通常是因为CNI插件未正确初始化
  • 节点NotReady:确认kubelet与容器运行时通信正常
  • 网络不通:检查新插件的网络策略和路由配置

在实际生产环境中,我遇到过多次网络插件切换的场景。最稳妥的做法是在维护窗口期进行操作,并确保有完整的回滚方案。一次成功的网络插件更换往往取决于清理工作的彻底程度,这也是为什么本文强调多层次的系统化清理方法。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 5:11:39

全国组织机构代码校验规则

支持 带横杠 (xxxxxxx-X) / 不带横杠 (xxxxxxxxx) 两种格式&#xff0c;兼容大小写&#xff1a;第一种&#xff1a;/*** 全国组织机构代码校验函数* param {string} code - 组织机构代码&#xff08;支持 xxxxxxxx-X / xxxxxxxxx 格式&#xff09;* return {boolean} true合法&…

作者头像 李华
网站建设 2026/4/25 5:09:19

Qwen3-4B-Instruct部署教程:CentOS/Ubuntu双平台防火墙开放7860端口指南

Qwen3-4B-Instruct部署教程&#xff1a;CentOS/Ubuntu双平台防火墙开放7860端口指南 1. 模型简介 Qwen3-4B-Instruct-2507是Qwen3系列的端侧/轻量旗舰模型&#xff0c;具备强大的文本理解和生成能力。该模型原生支持256K token&#xff08;约50万字&#xff09;上下文窗口&am…

作者头像 李华
网站建设 2026/4/25 5:06:58

构建城市生命线:基于WebGIS的跨行业管线三维在线编辑与管理

1. 城市生命线的三维革命&#xff1a;为什么我们需要WebGIS&#xff1f; 想象一下&#xff0c;你正站在城市中心的地下30米处。头顶是错综复杂的电力管线&#xff0c;左侧是直径1.2米的供水主干管&#xff0c;右手边燃气管道与热力管网交织缠绕——这就是每天为城市输送能量的&…

作者头像 李华
网站建设 2026/4/25 5:05:17

软件流程图管理化的过程可视化

软件流程图管理化的过程可视化&#xff1a;提升开发效率的利器 在软件开发过程中&#xff0c;流程图是描述逻辑、梳理流程的重要工具。随着项目复杂度提升&#xff0c;传统的手绘或静态流程图管理方式已难以满足团队协作和高效迭代的需求。软件流程图管理化的过程可视化&#…

作者头像 李华