この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

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. コントロールプレーンノードをcordon状態にして、AWSクラウドコントローラーポッドが外部クラウドプロバイダーにアップグレードされた後のみ各ノードで実行されるようにします:

    kubectl cordon -l "node-role.kubernetes.io/control-plane=true"
  3. リーダー移行を有効にしたAWSクラウドコントローラーマネージャーをインストールするには、クラウドコントローラーマネージャーチャートのデプロイの手順1-3に従ってください。Kubernetes 1.22以降、kube-controller-managerはコントローラーからマネージャーへの移行を満たすデフォルト構成を利用します。リーダー移行を有効にするために、`aws-cloud-controller-manager`の下の`spec.rkeConfig.additionalManifest`のコンテナ引数を更新します:

    - '--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スーパーバイザーにプロバイダーIDを正しく設定してもらうことに頼らない場合は、`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'

    アップグレード後にリーダー移行を無効にすることもできます。リーダー移行は、クラウドコントローラーマネージャーが1つだけであるため、もはや必要ありません。 チャートをアップグレードし、コンテナ引数から以下のセクションを削除します:

    - --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. コントロールプレーンノードをcordon状態にして、AWSクラウドコントローラーポッドが外部クラウドプロバイダーにアップグレードされた後のみ各ノードで実行されるようにします:

    kubectl cordon -l "node-role.kubernetes.io/controlplane=true"
  3. AWSクラウドコントローラーマネージャーをインストールするには、リーダー移行を有効にし、新しいクラスタにAWSをインストールする際と同じ手順に従う必要があります。リーダー移行を有効にするには、チャートをインストールする手順に従って、ステップ7のコンテナ引数に以下を追加してください。

    - '--enable-leader-migration=true'
  4. チャートがインストールされていることを確認しますが、新しいポッドはスケジューリング不可にされたコントロールプレーンノードのためにまだ実行されていません。次のステップでクラスターを更新した後、RKEは各ノードをアップグレードし、スケジューリング可能にし、`aws-controller-manager`ポッドをスケジュールします。

  5. `cluster.yml`を更新してクラウドプロバイダーを変更し、kube-controllerからリーダー移行引数を削除します。

    *外部Amazon(アウトオブツリー)*を選択すると、--cloud-provider=external`が設定され、`useInstanceMetadataHostname`を有効にすることができます。ノードドライバークラスタやカスタムクラスタの場合、`useInstanceMetadataHostname`でカスタムノード名を提供しないのであれば、--node-name`を有効にする必要があります。useInstanceMetadataHostname`を有効にすると、ec2メタデータサービスにクエリを実行し、`kubelet`および`kube-proxy`のために/hostname`を`hostname-override`として設定します。

    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`ポッドは現在実行中であるべきです。