ノードプールを更新する

クラスタを作成したら、そのクラスタのノードプールを変更できます。ノードプールの特定のパラメータ(サイズ、暗号鍵、セキュリティ グループなど)のみを更新できます。このドキュメントでは、ノードプールに対してこのような一般的な更新を行う方法について説明します。

ただし、すべての更新コマンドのリストは記載していません。このドキュメントに記載されていないパラメータを更新する必要がある場合は、gcloud container aws node-pools updateprojects.locations.awsNodePools.patch をご覧ください。

始める前に

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

権限の管理方法については、IAM ロールをユーザーに付与するをご覧ください。

ノードプールを更新する

以降のセクションでは、ノードプールに対してさまざまな更新を行う方法について説明します。ノードプールとは、クラスタ内で同じ構成を持つノードのグループのことです。クラスタ内のすべてのノードは、ノードプールに属している必要があります。

ノードプールの複数のパラメータを同時に更新できます。このためには、1 つのコマンドにすべてのパラメータを指定します。ただし、このドキュメントではわかりやすくするために、一度に 1 つのパラメータを更新する方法を示します。

ノードプール バージョンを変更する

GKE on AWS でノードプール バージョンを変更すると、そのノードプールのノードで実行されている GKE バージョンが変更されます。

ノードプールのバージョンを変更するには、次のコマンドで node-version フラグを使用して新しいバージョンを指定します。

gcloud container aws node-pools update NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION \
    --node-version NODE_POOL_VERSION

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

ノードプールのインスタンス タイプを更新する

ノードプールのインスタンス タイプとは、ノードプールのノードの作成に使用される AWS EC2 インスタンスのタイプです。たとえば、m5.xlarge インスタンス タイプでは 4 個の vCPU、16 GB のメモリ、32 GB の SSD ストレージが使用されています。

ノードプールのインスタンス タイプを変更するには、次のコマンドで instance-type フラグを使用して新しいインスタンス タイプを指定します。

gcloud container aws node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=GOOGLE_CLOUD_LOCATION \
    --instance-type=INSTANCE_TYPE

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

  • NODE_POOL_NAME: ノードプールの名前。
  • CLUSTER_NAME: クラスタの名前。
  • GOOGLE_CLOUD_LOCATION: クラスタを管理する Google Cloud リージョン。
  • INSTANCE_TYPE: このノードプールに必要な AWS マシン インスタンス タイプ(例: m5.xlarge)。

ノードプールのインスタンス タイプの更新によって、EC2 インスタンスの基盤となる CPU アーキテクチャが変更されることがあってはなりません。たとえば、元のノードプールで x86 CPU を使用するインスタンスが使用されている場合、更新後のインスタンス タイプは、他のアーキテクチャではなく x86 CPU を引き続き使用する必要があります。

サポートされているインスタンスとその基盤となるアーキテクチャの一覧については、サポートされている AWS インスタンス タイプをご覧ください。

ノードプールの暗号鍵をローテーションする

ノードプールの KMS 暗号鍵を更新する方法については、鍵のローテーションをご覧ください。

ノードプールのセキュリティ グループを置き換える

ノードプールに接続されているセキュリティ グループを更新するには、次のコマンドを実行します。

gcloud container aws node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=GOOGLE_CLOUD_LOCATION \
    --security-group-ids=SECURITY_GROUP_IDS

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

  • NODE_POOL_NAME: 更新するノードプールの名前。
  • CLUSTER_NAME: クラスタの名前。
  • GOOGLE_CLOUD_LOCATION: クラスタを管理する Google Cloud リージョン。
  • SECURITY_GROUP_IDS: ノードプールに接続するセキュリティ グループのカンマ区切りリスト。

GKE バージョン 1.25 以降を実行しているクラスタでは、ノードを再起動せずに更新を動的に実行できます。これは、GKE v1.25 以降を使用するクラスタに推奨される方法です。

動的アップデートを実行するには、API サービス エージェント ロールに次の AWS IAM 権限が必要です。

  • ec2:ModifyInstanceAttribute
  • ec2:DescribeInstances

クラスタの作成時にデフォルトの API サービス エージェントのロールを選択した場合、これらの権限は API サービス エージェントのロールに自動的に割り当てられます。

以前のバージョンの GKE を実行しているクラスタの場合、またはクラスタでバージョン 1.25 以降を実行しているが API サービス エージェントに動的アップデートを行う権限がない場合、更新はローリング アップデートを使用して実行されます。動的アップデートではノードの再起動は行われませんが、ローリング アップデートではノードの再起動が行われるため、ローリング アップデートは動的アップデートよりも中断が発生しやすくなります。ローリング アップデートの詳細については、サージ アップデートをご覧ください。

ノードプールのセキュリティ グループを削除する

次のコマンドを実行して、ノードプールに接続されているデフォルト以外のセキュリティ グループをすべて削除できます。デフォルトのセキュリティ グループの詳細については、ノードプールのセキュリティ グループをご覧ください。

gcloud container aws node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=GOOGLE_CLOUD_LOCATION \
    --clear-security-group-ids

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

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

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

ノードプールのサイズ(ノードプール内のノード数)を変更するには、次のコマンドの min-nodes フラグと max-nodes フラグに新しい値を割り当てます。

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

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

  • NODE_POOL_NAME: 更新するノードプールの名前。
  • CLUSTER_NAME: ノードプールを接続するクラスタの名前。
  • GOOGLE_CLOUD_LOCATION: クラスタを管理する、サポートされている Google Cloud リージョン。例: us-west1
  • MIN_NODES: ノードプールに含めることができるノードの最小数。値は 0 以上である必要があります。
  • MAX_NODES: ノードプールに含めることができるノードの最大数。値は 1 以上かつ MIN_NODES の値以上にする必要があります。

ノードプールのサイズ変更の詳細

ノードプールのサイズを変更する前に、ワークロードへの影響を評価することが重要です。

サイズ変更アクションとその影響

ノードプールのサイズを変更するときには、新しい構成とノードの現在の状態に基づいて、さまざまなアクションがトリガーされます。これらのアクションとその影響を理解することが不可欠です。

  • 変更なし: 現在のノード数が、指定された新しい範囲とすでに一致している場合、GKE on AWS はノード数の調整を行いません。
  • 最小数を引き上げる: 新しい最小ノード数が既存の数よりも大きい場合、GKE on AWS は、新しく定義された最小サイズに達するまでノードを徐々に追加します。
  • 最大数を減らす: 最大ノード数を既存の数よりも少ない値に変更すると、GKE on AWS は次のアクションを実行します。
    • クラスタ オートスケーラーを無効にする。
    • ノードプールの自動スケーリング グループを指定された最小サイズに設定する。
    • 削除する個々のノードを選択する。各ノードが閉鎖され、タスクがドレインされた後、終了します。この手順は、指定された最大サイズに達するまで続きます。
    • 新しい最大サイズに合わせてノードプールの自動スケーリング グループを変更する。
    • 最大サイズに達したらクラスタ オートスケーラーを再び有効にする。

クラスタ オートスケーラーの詳細については、クラスタ オートスケーラーについてをご覧ください。

サイズ変更中のワークロードの保護

ノードプールのサイズ変更中にワークロードの可用性を維持するために、GKE on AWS には次の保護機能が用意されています。

  • ノードのドレイン中に GKE on AWS は最大 1 時間にわたり PodDisruptionBudget 構成を遵守します。この期間が経過してもノードに残っている Pod は削除されます。

  • ノードが再起動または削除されるように設定されている場合、GKE on AWS はノードが正常にシャットダウンするまで最大 2 時間待ちます。この期間が経過しても Pod がノードに残っている場合、基盤となる仮想マシン インスタンスは削除されます。

ノードプールのステータスを確認する

更新が成功したことを確認するには、次のコマンドを実行してノードプールのステータスを確認できます。

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

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

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

GKE on AWS は、ノードプールに対してリクエストされた更新の実行を試み、その後ヘルスチェックを実行します。更新ステップのいずれかが失敗すると、ノードプールのステータスが DEGRADED としてマークされます。

更新オペレーションをキャンセルする

進行中のノードプールの更新をキャンセルするには、進行中のオペレーションの名前を確認する必要があります。進行中のオペレーションとその名前を一覧表示するには、次のコマンドを実行します。

gcloud container aws operations list--filter="status=PENDING OR status=RUNNING"
    --location GOOGLE_CLOUD_LOCATION

GOOGLE_CLOUD_LOCATION は、クラスタを管理するサポートされている Google Cloud リージョンに置き換えます。例: us-west1

コマンドの出力で、キャンセルする更新の OPERATION_NAME を探します。オペレーションのリストについては、gcloud container aws operations list をご覧ください。

OPERATION_NAME を特定したら、次のコマンドでオペレーションをキャンセルできます。

gcloud container aws operations cancel OPERATION_NAME
    --location GOOGLE_CLOUD_LOCATION

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

進行中のノードプールの更新をキャンセルしても、すでに完了しているノードの更新は元に戻りません。これにより、ノードプールの一部のみが更新される結果となる可能性があります。