ノードプールの更新
このトピックでは、ノードプールを更新する方法について説明します。ノードプールを更新できる理由は次のとおりです。
- ノードプールのバージョンをアップグレードする
- ノードプール内のノード数を変更する
- ノードプールのアノテーションを変更する(API でのみ更新可能)
上記のリストにないノードプールで追加のパラメータを変更することもできます。更新できるパラメータの完全なリストについては、gcloud container azure node-pools update
と projects.locations.azureNodePools.patch
のドキュメントをご覧ください。
プロセスの更新
このセクションでは、GKE on Azure でノードプールを更新するプロセスについて説明します。このプロセスは、ノードプールに加える必要がある変更の程度によって異なります。
構成のみの更新
GKE on Azure クラスタが、リソースを再起動または再作成せずにノードプールを更新できる場合、それらの変更が行われます。たとえば、ノードプールのアノテーションを更新しても、インスタンスは再起動されません。
ローリング アップデート
ノードプールの変更が既存の仮想マシンの再起動を必要とする場合(Kubernetes バージョンを更新する場合など)、GKE on Azure で次の手順を行います。
- 新しい構成でノードプールの仮想マシン スケールセットを変更します。
- 更新するノードの基盤となるインスタンスを選択します。
- GKE on Azure がノードを遮断しドレインします。この時点では、ターゲット ノードで新しい Pod をスケジュールすることはできません。 ターゲット ノード上の既存の Pod オブジェクトは、他のノードに再スケジュールされます。 他の既存のノードに再スケジュールできない Pod は、スケジュール設定が可能になるまで保留フェーズのままになります。
- 仮想マシンのスケールセットから最新の構成を取得するように、インスタンスを更新します。
- インスタンスを再イメージ化して再起動します。
- このノードプール内のすべてのノードが正常になるまで待ちます。
- このノードプール内のすべてのノードが正常である場合、すべてのノードが更新されるまで別のノードを選択します。いずれかのノードが異常な場合、GKE on Azure はノードプールを
DEGRADED
状態にします。詳細については、更新の失敗をご覧ください。
ノードプールのローリング アップデート中にワークロードを保護する
ノードプールのローリング アップデート中、GKE on Azure クラスタはノードのドレインが開始されてから最大 1 時間、PodDisruptionBudget 構成に従います。
1 時間後、GKE on Azure はノード上の残りの Pod を削除します。
ノードプールのサイズを変更する
GKE on Azure ノードプールでは、デフォルトでクラスタ オートスケーラーが有効になっています。クラスタ オートスケーラーは、ワークロードの需要に基づいてノードプールのサイズを自動的に変更します。クラスタ オートスケーラーの詳細については、クラスタ オートスケーラーをご覧ください。
ノードプール内のノードの最大数と最小数を変更すると、GKE on Azure は新しい構成とノードプールの現在のノード数に応じて異なる処理を行います。これらの処理には、次のものが含まれます。
ノードプールの現在のノード数がすでに新しい範囲にある場合、GKE on Azure はプール内のノード数を変更しません。
新しい最小ノード数がノードプールの現在のノード数よりも大きい場合、GKE on Azure は、ノードプールが新しい最小サイズに達するまでノードを追加します。
新しい最大ノード数がノードプールの現在のノード数より少ない場合、GKE on Azure は次の処理を行ってノードプールのサイズを縮小します。
- ノードプール内の仮想マシン スケールセットの自動スケーリング構成を更新します
- 削除するノードを選択する
- ノードを閉鎖してドレインする
- 基盤となる仮想マシン インスタンスを削除する
- 削除した仮想マシンが完全に消去されるまで待機する
- ノードプール全体に対してヘルスチェックを実行する
- ノード数が目的の数になるまで繰り返し処理する
ノードプールのサイズ変更中に 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
: ノードプールに含めることができるノードの新たな最大数。少なくとも1
でMIN_NODES
の値である必要があります。
更新オペレーションのキャンセル
実行中のノードプール更新オペレーションをキャンセルするには、次のコマンドを実行します。
gcloud container azure operations cancel OPERATION_NAME
OPERATION_NAME
は、更新オペレーションの名前に置き換えます。
実行中のノードプールの更新オペレーションをキャンセルしても、すでに完了したノード更新は元に戻りません。これにより、ノードプールが部分的に更新される可能性があります。
次のステップ
- gcloud container azure node-pools create のリファレンス ドキュメントを読む。
- ノードプールを削除する