本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

将 Amazon 内置云提供商迁移到外部云提供商

Kubernetes 正在逐步停止维护树内的云提供商。在 Kubernetes v1.27 及更高版本中,内置云提供商已被移除。Rancher UI 允许您在从内置云提供商迁移到外部云提供商时升级到 Kubernetes v1.27。

但是,如果您正在进行手动迁移,现有集群必须在迁移后升级到 Kubernetes v1.27,以保持功能正常。

要从内置云提供商迁移到外部 AWS 云提供商,您必须停止现有集群的 kube 控制器管理器并安装 AWS 云控制器管理器。有很多方法可以做到这一点。有关详细信息,请参阅官方 AWS 文档中的 外部云控制器管理器

如果在迁移期间可以接受一些停机时间,请按照说明 设置外部云提供商。这些说明概述了如何为新配置的集群配置外部插件提供商。在设置过程中,会有一些停机时间,因为旧云提供商停止运行和新云提供商开始运行之间存在时间差。

如果您的设置无法容忍任何控制平面停机时间,则必须启用领导者迁移。这有助于从 kube 控制器管理器中的控制器平稳过渡到云控制器管理器中的对应控制器。有关更多详细信息,请参阅官方 AWS 文档中的 使用领导者迁移

重要说明:

Kubernetes 云控制器迁移文档 表示可以在相同的 Kubernetes 版本下进行迁移,但假设迁移是 Kubernetes 升级的一部分。请参考 Kubernetes 文档 迁移以使用云控制器管理器,查看在迁移之前是否需要自定义您的设置。确认您的 迁移配置值。如果您的云提供商提供 Node IPAM 控制器的实现,您还需要 迁移 IPAM 控制器

  • RKE2

  • RKE

  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
  2. 对控制平面节点进行封锁,以便 AWS 云控制器 Pod 仅在升级到外部云提供商后在节点上运行:

    kubectl cordon -l "node-role.kubernetes.io/control-plane=true"
  3. 要安装启用领导者迁移的 AWS 云控制器管理器,请按照 部署云控制器管理器图表 的步骤 1-3。从 Kubernetes 1.22 开始,kube 控制器管理器 将使用默认配置,以满足控制器到管理器的迁移。更新 spec.rkeConfig.additionalManifest 下的 aws-cloud-controller-manager 的容器参数以启用领导者迁移:

    - '--enable-leader-migration=true'
  4. 安装图表并确认 Daemonset aws-cloud-controller-manager 成功部署:

    kubectl rollout status daemonset -n kube-system aws-cloud-controller-manager
  5. 更新配置集群以更改云提供商,并从 kube 控制器管理器中移除领导者迁移参数。 如果升级 Kubernetes 版本,请在集群 YAML 文件的 spec.kubernetesVersion 部分中设置 Kubernetes 版本。

    重要说明

    仅在不依赖 rke2 监督程序正确设置 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'

    您还可以在升级后禁用领导者迁移,因为由于只有一个云控制器管理器,领导者迁移不再需要,可以被移除。 升级图表并从容器参数中移除以下部分:

    - --enable-leader-migration=true

    使用以下命令验证云控制器管理器更新是否成功推出:

    kubectl rollout status daemonset -n kube-system aws-cloud-controller-manager
  6. 云提供商负责设置节点的 ProviderID。检查所有节点是否已用 ProviderID 初始化:

    kubectl describe nodes | grep "ProviderID"
  1. 更新集群配置以启用 cluster.yml 中的领导者迁移:

    services:
      kube-controller:
        extra_args:
          enable-leader-migration: "true"

    请注意,在此步骤中云提供商仍然是 aws

    cloud_provider:
      name: aws
  2. 对控制平面节点进行封锁,以便 AWS 云控制器 Pod 仅在升级到外部云提供商后在节点上运行:

    kubectl cordon -l "node-role.kubernetes.io/controlplane=true"
  3. 要安装 AWS 云控制器管理器,您必须启用领导者迁移,并遵循与在新集群上安装 AWS 时相同的步骤。要启用领导者迁移,请在第 7 步中将以下内容添加到容器参数中,同时遵循安装图表的步骤

    - '--enable-leader-migration=true'
  4. 确认图表已安装,但由于控制平面节点被隔离,新 Pod 尚未运行。在下一步更新集群后,RKE 将升级并解封每个节点,并调度`aws-controller-manager` Pod。

  5. 更新`cluster.yml`以更改云提供商,并从 kube 控制器管理器中移除领导者迁移参数。

    选择*External Amazon (out-of-tree)*设置`--cloud-provider=external`并允许您启用`useInstanceMetadataHostname`。对于节点驱动程序集群和自定义集群,必须启用`useInstanceMetadataHostname`;如果未通过`--node-name`提供自定义节点名称,也必须启用该选项。启用`useInstanceMetadataHostname`将查询 ec2 元数据服务,并将`/hostname`设置为`hostname-override`,用于`kubelet`和`kube-proxy`:

    rancher_kubernetes_engine_config:
      cloud_provider:
        name: external-aws
        useInstanceMetadataHostname: true/false

    如果您不希望在集群中启用 enable-leader-migration,请将其移除:

      services:
        kube-controller:
          extra_args:
            enable-leader-migration: "true"

    您还可以在完成迁移后禁用领导者迁移。升级图表并从容器参数中移除以下部分:

    - --enable-leader-migration=true
  6. 如果您正在升级集群的 Kubernetes 版本,请同时设置 Kubernetes 版本。

  7. 更新集群。aws-cloud-controller-manager Pod 现在应该正在运行。