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

Azureのインツリーからアウトオブツリーへの移行

Kubernetesは、クラウドプロバイダーをインツリーで維持することから移行しています。

Kubernetes 1.29以降、インツリーのクラウドプロバイダーは無効化されています。インツリーのAzureクラウドプロバイダーを使用するか、インツリーのクラウドプロバイダーからアウトオブツリーのプロバイダーに移行するには、`DisableCloudProviders`と`DisableKubeletCloudCredentialProvider`を無効にする必要があります。必要なフィーチャーゲートは、クラスターのKubelet、コントローラーマネージャー、およびAPIサーバーの高度なクラスター設定で`feature-gates=DisableCloudProviders=false`を追加の引数として設定することで無効にできます。さらに、Kubeletの引数に`DisableKubeletCloudCredentialProvider=false`を設定して、イメージプルの認証情報のためにAzureコンテナレジストリへの認証を行うインツリー機能を有効にします。詳細については、 アップストリームのドキュメントを参照してください。

Kubernetes v1.30以降、インツリーのクラウドプロバイダーは削除されました。Rancherでは、インツリーからアウトオブツリーのプロバイダーに移行する際にKubernetes v1.30にアップグレードすることができます。

インツリーのクラウドプロバイダーからアウトオブツリーのAzureクラウドプロバイダーに移行するには、既存のクラスターのkubeコントローラーマネージャーを停止し、Azureクラウドコントローラーマネージャーをインストールする必要があります。

移行中にダウンタイムが発生しても問題ない場合は、外部クラウドプロバイダーをセットアップするの手順に従ってください。これらの手順は、新しくプロビジョニングされたクラスターのためにアウトオブツリーのクラウドプロバイダーを構成する方法を概説しています。セットアップ中は、古いクラウドプロバイダーが停止し、新しいクラウドプロバイダーが稼働を開始するまでの時間差があるため、ダウンタイムが発生します。

セットアップがコントロールプレーンのダウンタイムを許容できない場合は、リーダー移行を有効にする必要があります。これにより、kubeコントローラーマネージャーのコントローラーからクラウドコントローラーマネージャーの対応するコントローラーへのスムーズな移行が促進されます。

重要:

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

  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'

    このステップでは、クラウドプロバイダーがまだ`azure`であることに注意してください:

    spec:
      rkeConfig:
        machineGlobalConfig:
          cloud-provider-name: azure
  2. コントロールプレーンノードをcordonして、Azureクラウドコントローラーポッドが外部クラウドプロバイダーにアップグレードされた後にのみノードで実行されるようにします:

    kubectl cordon -l "node-role.kubernetes.io/control-plane=true"
  3. Azureクラウドコントローラーマネージャーをデプロイするには、利用可能なオプションのいずれかを使用してください:

    チャートがインストールされていることを確認しますが、新しいポッドはスケジューリング不可にされたコントロールプレーンノードのためにまだ実行されていません。

  4. リーダー移行を有効にするには、`--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"}]'
  5. プロビジョニングクラスタを更新してクラウドプロバイダーを変更し、kubeコントローラーマネージャーからリーダー移行引数を削除します。 Kubernetesのバージョンをアップグレードする場合は、クラスターYAMLファイルの`spec.kubernetesVersion`セクションでもKubernetesのバージョンを設定します。

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

    kubeコントローラーマネージャーから`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'
  6. コントロールプレーンノードのcordonを解除し、Azureクラウドコントローラーポッドがノードで実行されるようにします:

    kubectl uncordon -l "node-role.kubernetes.io/control-plane=true"
  7. クラスターを更新します。`cloud-controller-manager`ポッドは現在実行中であるべきです。

    kubectl rollout status deployment -n kube-system cloud-controller-manager
    kubectl rollout status daemonset -n kube-system cloud-node-manager
  8. クラウドプロバイダーはノードのProviderIDを設定する責任があります。すべてのノードがProviderIDで初期化されているか確認します:

    kubectl describe nodes | grep "ProviderID"
  9. (オプション)アップグレード後にリーダー移行を無効にすることもできます。リーダー移行は、クラウドコントローラーマネージャーが1つだけであるため、必要ありません。 `cloud-controller-manager`デプロイメントを更新して、コンテナ引数からリーダー移行を削除します:

    - --enable-leader-migration=true
  1. `cluster.yml`でリーダー移行を有効にするためにクラスタ設定を更新します:

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

    このステップでは、クラウドプロバイダーがまだ`azure`であることに注意してください:

    cloud_provider:
      name: azure
  2. コントロールプレーンノードをcordonして、Azureクラウドコントローラーポッドが外部クラウドプロバイダーにアップグレードされた後にのみノードで実行されるようにします:

    kubectl cordon -l "node-role.kubernetes.io/controlplane=true"
  3. Azureクラウドコントローラーマネージャーをインストールするには、新しいクラスターにAzureクラウドプロバイダーをインストールする際と同じ手順に従います:

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

  5. リーダー移行を有効にするには、`--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"}]'
  6. `cluster.yml`を更新することで、クラウドプロバイダーを`external`に変更し、kubeコントローラーマネージャーからリーダー移行引数を削除します。

    rancher_kubernetes_engine_config:
      cloud_provider:
        name: external

    クラスタで有効にしたくない場合は、`enable-leader-migration`を削除してください:

    services:
      kube-controller:
        extra_args:
          enable-leader-migration: "true"
  7. クラスターのKubernetesバージョンをアップグレードする場合は、Kubernetesバージョンも設定してください。

  8. クラスターを更新します。`cloud-controller-manager`ポッドは現在実行中であるべきです。

    kubectl rollout status deployment -n kube-system cloud-controller-manager
    kubectl rollout status daemonset -n kube-system cloud-node-manager
  9. クラウドプロバイダーはノードのProviderIDを設定する責任があります。すべてのノードがProviderIDで初期化されているか確認します:

    kubectl describe nodes | grep "ProviderID"
  10. (オプション)アップグレード後にリーダー移行を無効にすることもできます。リーダー移行は、クラウドコントローラーマネージャーが1つだけであるため、必要ありません。 `cloud-controller-manager`デプロイメントを更新することで、コンテナ引数からリーダー移行を削除します:

    - --enable-leader-migration=true