跳至主要内容

將 Amazon In-tree 遷移到 Out-of-tree

Kubernetes 正在逐步停止在樹內維護雲端提供者。在 Kubernetes v1.27 及更高版本中,樹內雲端提供者已被移除。當您從樹內提供者遷移到樹外提供者時,Rancher UI 允許您升級到 Kubernetes v1.27。

但是,如果您正在執行手動遷移,現有叢集必須在遷移後升級到 Kubernetes v1.27 才能保持功能正常。

要從樹內雲端提供者遷移到樹外 AWS 雲端提供者,您必須停止現有叢集的 kube controller manager 並安裝 AWS 雲端控制器管理器。有很多方法可以做到這一點。有關詳細資訊,請參閱官方 AWS 文件中關於外部雲端控制器管理器的說明。

如果在遷移期間可以接受一些停機時間,請按照說明設定外部雲端提供者。這些說明概述了如何為新佈建的叢集配置樹外雲端提供者。在設定期間會有一些停機時間,因為舊雲端提供者停止運行和新雲端提供者開始運行之間存在時間間隔。

如果您的設定無法容忍任何控制平面停機時間,您必須啟用領導者遷移。這有助於從 kube controller manager 中的控制器平滑過渡到雲端控制器管理器中的對應控制器。有關更多詳細資訊,請參閱官方 AWS 文件中關於使用領導者遷移的說明。

重要:

Kubernetes 雲端控制器遷移文件指出可以使用相同的 Kubernetes 版本進行遷移,但假設遷移是 Kubernetes 升級的一部分。請參閱 Kubernetes 文件中關於遷移使用雲端控制器管理器的說明,以查看您是否需要在遷移前自訂您的設定。確認您的遷移配置值。如果您的雲端提供者提供了 Node IPAM 控制器的實作,您還需要遷移 IPAM 控制器。

  1. 更新叢集配置以啟用領導者遷移:
spec:
rkeConfig:
machineSelectorConfig:
- config:
kube-controller-manager-arg:
- enable-leader-migration
machineLabelSelector:
matchExpressions:
- key: rke.cattle.io/control-plane-role
operator: In
values:
- 'true'

請注意,此步驟的雲端提供者仍然是 aws:

spec:
rkeConfig:
machineGlobalConfig:
cloud-provider-name: aws
  1. 隔離控制平面節點,以便 AWS 雲端控制器 Pod 僅在升級到外部雲端提供者後在節點上運行:
kubectl cordon -l "node-role.kubernetes.io/control-plane=true"
  1. 要在啟用領導者遷移的情況下安裝 AWS 雲端控制器管理器,請遵循部署雲端控制器管理器 chart 的步驟 1-3。從 Kubernetes 1.22 開始,kube-controller-manager 將使用預設配置來滿足控制器到管理器的遷移。更新 spec.rkeConfig.additionalManifest 下 aws-cloud-controller-manager 的容器參數以啟用領導者遷移:
- '--enable-leader-migration=true'
  1. 安裝 chart 並確認 Daemonset aws-cloud-controller-manager 成功部署:
kubectl rollout status daemonset -n kube-system aws-cloud-controller-manager
  1. 更新佈建叢集以變更雲端提供者並從 kube controller 中移除領導者遷移參數。 如果升級 Kubernetes 版本,也要在叢集 YAML 檔案的 spec.kubernetesVersion 部分設定 Kubernetes 版本
重要

僅在不依賴 rke2 supervisor 正確設定 providerID 時才移除 cloud-provider-name: aws。

如果您不想在叢集中啟用它,請移除 enable-leader-migration:

spec:
rkeConfig:
machineGlobalConfig:
cloud-provider-name: external

從以下位置移除 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'
提示

您也可以在升級後停用領導者遷移,因為由於只有一個 cloud-controller-manager,不再需要領導者遷移,可以將其移除。 升級 chart 並從容器參數中移除以下部分:

- --enable-leader-migration=true

使用以下命令驗證雲端控制器管理器更新是否成功推出:

kubectl rollout status daemonset -n kube-system aws-cloud-controller-manager
  1. 雲端提供者負責設定節點的 ProviderID。檢查是否所有節點都使用 ProviderID 初始化:
kubectl describe nodes | grep "ProviderID"