將 Azure In-tree 遷移到 Out-of-tree
Kubernetes 正在逐步停止在樹內維護雲端提供者。
從 Kubernetes 1.29 開始,樹內雲端提供者已被停用。您必須停用 DisableCloudProviders 和 DisableKubeletCloudCredentialProvider 才能使用樹內 Azure 雲端提供者或從樹內雲端提供者遷移到樹外提供者。您可以透過在進階叢集配置中為叢集的 Kubelet、Controller Manager 和 API Server 設定 feature-gates=DisableCloudProviders=false 作為額外參數來停用所需的功能閘道。此外,在 Kubelet 的參數中設定 DisableKubeletCloudCredentialProvider=false 以啟用樹內功能,用於向 Azure 容器映像檔儲存庫驗證映像檔提取憑證。有關更多詳細資訊,請參閱上游文件。
在 Kubernetes v1.30 及更高版本中,樹內雲端提供者已被移除。當您從樹內提供者遷移到樹外提供者時,Rancher 允許您升級到 Kubernetes v1.30。
要從樹內雲端提供者遷移到樹外 Azure 雲端提供者,您必須停止現有叢集的 kube controller manager 並安裝 Azure 雲端控制器管理器。
如果在遷移期間可以接受一些停機時間,請按照說明設定外部雲端提供者。這些說明概述了如何為新佈建的叢集配置樹外雲端提供者。在設定期間會有一些停機時間,因為舊雲端提供者停止運行和新雲端提供者開始運行之間存在時間間隔。
如果您的設定無法容忍任何控制平面停機時間,您必須啟用領導者遷移。這有助於從 kube controller manager 中的控制器平滑過渡到雲端控制器管理器中的對應控制器。
Kubernetes 雲端控制器遷移文件指出可以使用相同的 Kubernetes 版本進行遷移,但假設遷移是 Kubernetes 升級的一部分。請參閱 Kubernetes 文件中關於遷移使用雲端控制器管理器的說明,以查看您是否需要在遷移前自訂您的設定。確認您的遷移配置值。如果您的雲端提供者提供了 Node IPAM 控制器的實作,您還需要遷移 IPAM 控制器。
從 Kubernetes v1.26 開始,樹內持久卷類型 kubernetes.io/azure-disk 和 kubernetes.io/azure-file 已被棄用且不再受支援。在棄用後沒有移除這些驅動程式的計劃,但您應該遷移到對應的 CSI 驅動程式 disk.csi.azure.com 和 file.csi.azure.com。要查看儲存類別的遷移選項並升級叢集以使用 Azure Disks 和 Azure Files CSI 驅動程式,請參閱從樹內遷移到 CSI 驅動程式。
- RKE2
- RKE
- 更新叢集配置以啟用領導者遷移:
spec:
rkeConfig:
machineSelectorConfig:
- config:
kube-controller-manager-arg:
- enable-leader-migration
machineLabelSelector:
matchExpressions:
- key: rke.cattle.io/control-plane-role
operator: In
values:
- 'true'
請注意,此步驟的雲端提供者仍然是 azure:
spec:
rkeConfig:
machineGlobalConfig:
cloud-provider-name: azure
- 隔離控制平面節點,以便 Azure 雲端控制器 Pod 僅在升級到外部雲端提供者後在節點上運行:
kubectl cordon -l "node-role.kubernetes.io/control-plane=true"
- 要部署 Azure 雲端控制器管理器,請使用任何可用選項:
- UI:遵循 Helm chart 從 UI 安裝的步驟 1-10 來安裝雲端控制器管理器 chart。
- CLI:遵循 Helm chart 從 CLI 安裝的步驟 1-4。
- 更新叢集的額外清單:遵循步驟 2-3 來安裝雲端控制器管理器 chart。
確認 chart 已安裝,但由於控制平面節點被隔離,新的 Pod 尚未運行。
- 要啟用領導者遷移,將
--enable-leader-migration新增到cloud-controller-manager的容器參數中:
kubectl -n kube-system patch deployment cloud-controller-manager \
--type=json \
-p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--enable-leader-migration"}]'
- 更新佈建叢集以變更雲端提供者並從 kube controller manager 中移除領導者遷移參數。
如果升級 Kubernetes 版本,也要在叢集 YAML 檔案的
spec.kubernetesVersion部分設定 Kubernetes 版本。
spec:
rkeConfig:
machineGlobalConfig:
cloud-provider-name: external
從 kube controller manager 中移除 enable-leader-migration:
spec:
rkeConfig:
machineSelectorConfig:
- config:
kube-controller-manager-arg:
- enable-leader-migration
machineLabelSelector:
matchExpressions:
- key: rke.cattle.io/control-plane-role
operator: In
values:
- 'true'
- 取消隔離控制平面節點,以便 Azure 雲端控制器 Pod 現在可以在節點上運行:
kubectl uncordon -l "node-role.kubernetes.io/control-plane=true"
- 更新叢集。
cloud-controller-managerPod 現在應該正在運行。
kubectl rollout status deployment -n kube-system cloud-controller-manager
kubectl rollout status daemonset -n kube-system cloud-node-manager
- 雲端提供者負責設定節點的 ProviderID。檢查是否所有節點都使用 ProviderID 初始化:
kubectl describe nodes | grep "ProviderID"
- (可選)您也可以在升級後停用領導者遷移,因為只有一個 cloud-controller-manager 時不需要領導者遷移。
更新
cloud-controller-manager部署以從容器參數中移除領導者遷移:
- --enable-leader-migration=true
- 更新叢集配置以在
cluster.yml中啟用領導者遷移:
services:
kube-controller:
extra_args:
enable-leader-migration: "true"
請注意,此步驟的雲端提供者仍然是 azure:
cloud_provider:
name: azure
- 隔離控制平面節點,以便 Azure 雲端控制器 Pod 僅在升級到外部雲端提供者後在節點上運行:
kubectl cordon -l "node-role.kubernetes.io/controlplane=true"
- 要安裝 Azure 雲端控制器管理器,請遵循與在新叢集上安裝 Azure 雲端提供者時相同的步驟:
- UI:遵循 Helm chart 從 UI 安裝的步驟 1-10 來安裝雲端控制器管理器 chart。
- CLI:遵循 Helm chart 從 CLI 安裝的步驟 1-4 來安裝雲端控制器管理器 chart。
-
確認 chart 已安裝,但由於控制平面節點被隔離,新的 Pod 尚未運行。在下一步更新叢集後,RKE 將升級並取消隔離每個節點,並排程
cloud-controller-managerPod。 -
要啟用領導者遷移,將
--enable-leader-migration新增到cloud-controller-manager的容器參數中:
kubectl -n kube-system patch deployment cloud-controller-manager \
--type=json \
-p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--enable-leader-migration"}]'
- 更新
cluster.yml以將雲端提供者變更為external並從 kube-controller 中移除領導者遷移 參數。
rancher_kubernetes_engine_config:
cloud_provider:
name: external
如果您不想在叢集中啟用它,請移除 enable-leader-migration:
services:
kube-controller:
extra_args:
enable-leader-migration: "true"
-
如果您要升級叢集的 Kubernetes 版本,也要設定 Kubernetes 版本。
-
更新叢集。
cloud-controller-managerPod 現在應該正在運行。
kubectl rollout status deployment -n kube-system cloud-controller-manager
kubectl rollout status daemonset -n kube-system cloud-node-manager
- 雲端提供者負責設定節點的 ProviderID。驗證是否所有節點都使用 ProviderID 初始化:
kubectl describe nodes | grep "ProviderID"
- (可選)您也可以在升級後停用領導者遷移,因為只有一個 cloud-controller-manager 時不需要領導者遷移。
更新
cloud-controller-manager部署以從容器參數中移除領導者遷移:
- --enable-leader-migration=true