Networking

如何在單節點 kubernetes 集群上進行從 flannel 到 calico 的實時遷移?

  • January 31, 2022

我正在嘗試在 k8s 集群中從法蘭絨遷移到印花布。我能夠在 3 節點集群中成功完成它。從 flannel 到 calico 的實時遷移正在按照文件中的說明進行。

但是根據這個問題,不支持在單節點 k8s 集群上從 flannel 遷移到 calico 。

我必須在單個節點上進行從法蘭絨到印花布的實時遷移,任何有關方法的建議都值得讚賞。

以下是從法蘭絨遷移到印花佈時對我有用的步驟。我遵循了@p1ol 答案中提到的大部分步驟。

  1. 去除法蘭絨
  2. 停止立方體
  3. 關閉ifconfig介面,刪除ip link相關的flannel
  4. 重啟 Kubelet
  5. 安裝印花布

Calico 安裝未創建 calico-node pod 並且 calico-kube-controllers-** pod 卡在 pod 初始化或容器創建狀態。

我確實參考了部落格,其中建議為 CIDR 範圍更新 calico yaml,而且我必須按照此處的建議配置 IP_AUTODETECTION_METHOD

最後,我確實重新啟動了我的節點。

正如您已經發現的那樣,不支持將 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. 停止多維數據集服務systemctl stop kubelet
  4. systemctl stop containerd如果用作容器執行時,請停止 containerd 。(如果使用 Docker Engine 則替換為 docker)
  5. 刪除任何 CNI 相關目錄
rm -rf /var/lib/cni
rm -rf /run/flannel
rm -rf /etc/cni
  1. 查找任何與 CNI/Flannel 相關的介面,並將其刪除
ip link

對於每個介面,請執行以下操作

ifconfig <name of the interface from ip link> down
ip link delete <name of the interface from ip link>
  1. 重啟容器執行時
  2. 重新啟動多維數據集
  3. 像在新集群上一樣安裝 Calico。

引用自:https://serverfault.com/questions/1091072