答案1
正如您已经发现的,在单节点集群上不支持将 Flannel 迁移到 Calico。这是因为 Flannel 迁移控制器需要安排在当前未迁移的节点上,而这在单节点集群中是不可能的。
可以通过创建临时的第二个节点来解决这个问题,并在迁移完成后缩小到 1。
其他解决方案是创建一个全新的集群,安装 Calico,并将资源从旧集群移动到新集群。
作为最后的手段,您可以尝试手动卸载 Flannel,然后在其上安装 Calico。
警告:以下所有方法都可能无法按预期工作。显然,Flannel 和 Calico 都不支持这种方式。它可能会破坏集群,导致集群无法使用。请先在测试环境中尝试此解决方案,然后调整到您的环境,然后再在生产环境中尝试。
你被警告了。
- 取出法兰绒
kubectl delete -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
- 通过 SSH 进入你的节点
- 停止 kubelet 服务
systemctl stop kubelet
- 如果使用containerd 作为容器运行时,请停止该操作
systemctl stop containerd
。(如果使用 Docker Engine,请用 docker 替换) - 删除所有与 CNI 相关的目录
rm -rf /var/lib/cni rm -rf /run/flannel rm -rf /etc/cni
- 查找任何与 CNI/Flannel 相关的接口,并将其删除
对于每个接口执行以下操作ip link
ifconfig <name of the interface from ip link> down ip link delete <name of the interface from ip link>
- 重启容器运行时
- 重启 kubelet
- 像在新集群上一样安装 Calico。
答案2
以下是我从 flannel 迁移到 calico 时有用的步骤。我遵循了 @p1ol 回答中提到的大部分步骤。
移除法兰绒
停止 kubelet
关闭 ifconfig 接口并删除与 ip link 相关的 flannel
重启 Kubelet
安装 calico
Calico 安装未创建 calico-node pod,并且 calico-kube-controllers-** pod 停留在 pod 初始化或容器创建状态。
我确实提到了博客其中建议更新 calico yaml 以获取 CIDR 范围,并且我还必须按照建议配置 IP_AUTODETECTION_METHOD这里
最后,我确实重新启动了我的节点。