如何在单节点 kubernetes 集群上从 flannel 实时迁移到 calico?

如何在单节点 kubernetes 集群上从 flannel 实时迁移到 calico?

我正在尝试从 k8s 集群中的 flannel 迁移到 calico。我能够在 3 节点集群中成功完成此操作。从 flannel 到 calico 的实时迁移工作方式如所述文档

但是,根据以下说明,单节点 k8s 集群不支持从 flannel 迁移到 calico这个问题

我必须在单节点上从 flannel 到 calico 进行实时迁移,任何有关方法的建议都值得赞赏。

答案1

正如您已经发现的,在单节点集群上不支持将 Flannel 迁移到 Calico。这是因为 Flannel 迁移控制器需要安排在当前未迁移的节点上,而这在单节点集群中是不可能的。

可以通过创建临时的第二个节点来解决这个问题,并在迁移完成后缩小到 1。

其他解决方案是创建一个全新的集群,安装 Calico,并将资源从旧集群移动到新集群。

作为最后的手段,您可以尝试手动卸载 Flannel,然后在其上安装 Calico。


警告:以下所有方法都可能无法按预期工作。显然,Flannel 和 Calico 都不支持这种方式。它可能会破坏集群,导致集群无法使用。请先在测试环境中尝试此解决方案,然后调整到您的环境,然后再在生产环境中尝试。
你被警告了


  1. 取出法兰绒kubectl delete -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
  2. 通过 SSH 进入你的节点
  3. 停止 kubelet 服务systemctl stop kubelet
  4. 如果使用containerd 作为容器运行时,请停止该操作systemctl stop containerd。(如果使用 Docker Engine,请用 docker 替换)
  5. 删除所有与 CNI 相关的目录
    rm -rf /var/lib/cni
    rm -rf /run/flannel
    rm -rf /etc/cni
    
  6. 查找任何与 CNI/Flannel 相关的接口,并将其删除
    ip link
    
    对于每个接口执行以下操作
    ifconfig <name of the interface from ip link> down
    ip link delete <name of the interface from ip link>
    
  7. 重启容器运行时
  8. 重启 kubelet
  9. 像在新集群上一样安装 Calico。

答案2

以下是我从 flannel 迁移到 calico 时有用的步骤。我遵循了 @p1ol 回答中提到的大部分步骤。

  1. 移除法兰绒

  2. 停止 kubelet

  3. 关闭 ifconfig 接口并删除与 ip link 相关的 flannel

  4. 重启 Kubelet

  5. 安装 calico

Calico 安装未创建 calico-node pod,并且 calico-kube-controllers-** pod 停留在 pod 初始化或容器创建状态。

我确实提到了博客其中建议更新 calico yaml 以获取 CIDR 范围,并且我还必须按照建议配置 IP_AUTODETECTION_METHOD这里

最后,我确实重新启动了我的节点。

相关内容