ノードプールの更新

このトピックでは、ノードプールを更新する方法について説明します。ノードプールを更新できる理由は次のとおりです。

  • ノードプールのバージョンをアップグレードする
  • ノードプール内のノード数を変更する
  • ノードプールのアノテーションを変更する(API でのみ更新可能)

上記のリストにないノードプールで追加のパラメータを変更することもできます。更新できるパラメータの完全なリストについては、gcloud container azure node-pools updateprojects.locations.azureNodePools.patch のドキュメントをご覧ください。

プロセスの更新

このセクションでは、GKE on Azure でノードプールを更新するプロセスについて説明します。このプロセスは、ノードプールに加える必要がある変更の程度によって異なります。

構成のみの更新

GKE on Azure クラスタが、リソースを再起動または再作成せずにノードプールを更新できる場合、それらの変更が行われます。たとえば、ノードプールのアノテーションを更新しても、インスタンスは再起動されません。

ローリング アップデート

ノードプールの変更が既存の仮想マシンの再起動を必要とする場合(Kubernetes バージョンを更新する場合など)、GKE on Azure で次の手順を行います。

  1. 新しい構成でノードプールの仮想マシン スケールセットを変更します。
  2. 更新するノードの基盤となるインスタンスを選択します。
  3. GKE on Azure がノードを遮断しドレインします。この時点では、ターゲット ノードで新しい Pod をスケジュールすることはできません。 ターゲット ノード上の既存の Pod オブジェクトは、他のノードに再スケジュールされます。 他の既存のノードに再スケジュールできない Pod は、スケジュール設定が可能になるまで保留フェーズのままになります。
  4. 仮想マシンのスケールセットから最新の構成を取得するように、インスタンスを更新します。
  5. インスタンスを再イメージ化して再起動します。
  6. このノードプール内のすべてのノードが正常になるまで待ちます。
  7. このノードプール内のすべてのノードが正常である場合、すべてのノードが更新されるまで別のノードを選択します。いずれかのノードが異常な場合、GKE on Azure はノードプールを DEGRADED 状態にします。詳細については、更新の失敗をご覧ください。

ノードプールのローリング アップデート中にワークロードを保護する

ノードプールのローリング アップデート中、GKE on Azure クラスタはノードのドレインが開始されてから最大 1 時間、PodDisruptionBudget 構成に従います。
1 時間後、GKE on Azure はノード上の残りの Pod を削除します。

ローリング アップデートの際、GKE on Azure では、再起動または削除するノードの正常なシャットダウンをベスト エフォート ベースで最長 2 時間実行します。2 時間後、ノードに Pod オブジェクトが残っている場合、GKE on Azure はそのノードを削除し、基盤となる仮想マシン インスタンスを再イメージします。

ノードプールのサイズを変更する

GKE on Azure ノードプールでは、デフォルトでクラスタ オートスケーラーが有効になっています。クラスタ オートスケーラーは、ワークロードの需要に基づいてノードプールのサイズを自動的に変更します。クラスタ オートスケーラーの詳細については、クラスタ オートスケーラーをご覧ください。

ノードプール内のノードの最大数と最小数を変更すると、GKE on Azure は新しい構成とノードプールの現在のノード数に応じて異なる処理を行います。これらの処理には、次のものが含まれます。

  • ノードプールの現在のノード数がすでに新しい範囲にある場合、GKE on Azure はプール内のノード数を変更しません。

  • 新しい最小ノード数がノードプールの現在のノード数よりも大きい場合、GKE on Azure は、ノードプールが新しい最小サイズに達するまでノードを追加します。

  • 新しい最大ノード数がノードプールの現在のノード数より少ない場合、GKE on Azure は次の処理を行ってノードプールのサイズを縮小します。

    1. ノードプール内の仮想マシン スケールセットの自動スケーリング構成を更新します
    2. 削除するノードを選択する
    3. ノードを閉鎖してドレインする
    4. 基盤となる仮想マシン インスタンスを削除する
    5. 削除した仮想マシンが完全に消去されるまで待機する
    6. ノードプール全体に対してヘルスチェックを実行する
    7. ノード数が目的の数になるまで繰り返し処理する

ノードプールのサイズ変更中に GKE on Azure でワークロードを保護する仕組み

ノードプールのサイズ変更中、GKE on Azure はノードのドレインが開始されてから最大 1 時間、PodDisruptionBudget 構成に従います。1 時間後、GKE on Azure はノード上の残りの Pod オブジェクトを削除します。

ノードプールのサイズ変更時、GKE on Azure は、再起動または削除対象のノードを正常にシャットダウンして最大 2 時間待ちます。2 時間後、ノードに Pod オブジェクトが残っている場合は、GKE on Azure によって基盤となる仮想マシン インスタンスが削除されます。

失敗した更新ステータスを確認する

GKE on Azure が更新後にヘルスチェックを実行して失敗した場合、ノードプールは DEGRADED とマークされます。クラスタのステータス情報は、次の Google Cloud CLI コマンドを使用して確認できます。

gcloud container azure node-pools describe NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION

次のように置き換えます。

  • NODE_POOL_NAME: ノードプールの名前。
  • CLUSTER_NAME: クラスタの名前。
  • GOOGLE_CLOUD_LOCATION: クラスタを管理する Google Cloud リージョン

出力には、ノードプールのステータスと構成に関する情報が含まれます。

前提条件

ノードプールを更新するには、gkemulticloud.googleapis.com/azureNodePools.update Identity and Access Management 権限が必要です。

ノードプールの更新

ノードプールは Google Cloud CLI で更新できます。ノードプールを更新するには、次のコマンドを実行します。

gcloud container azure node-pools update NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION \
    --node-version NODE_POOL_VERSION \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES

次のように置き換えます。

  • NODE_POOL_NAME: 更新するノードプールの名前。
  • CLUSTER_NAME: ノードプールを接続するクラスタの名前。
  • GOOGLE_CLOUD_LOCATION: クラスタを管理するサポートされている Google Cloud リージョン(例: us-west1)。
  • NODE_POOL_VERSION: 新しいサポートされているノードプールのバージョン
  • MIN_NODES: ノードプールに含めることができるノードの新たな最小数。0 以上でなければなりません
  • MAX_NODES: ノードプールに含めることができるノードの新たな最大数。少なくとも 1MIN_NODES の値である必要があります。

更新オペレーションのキャンセル

実行中のノードプール更新オペレーションをキャンセルするには、次のコマンドを実行します。

gcloud container azure operations cancel OPERATION_NAME

OPERATION_NAME は、更新オペレーションの名前に置き換えます。

実行中のノードプールの更新オペレーションをキャンセルしても、すでに完了したノード更新は元に戻りません。これにより、ノードプールが部分的に更新される可能性があります。

次のステップ