クラスタの自動スケーリング

このページでは、Google Kubernetes Engine(GKE)の Standard クラスタを自動スケーリングする方法について説明します。クラスタ オートスケーラーの仕組みについては、GKE クラスタの自動スケーリングについてをご覧ください。

Autopilot クラスタを使用すると、ノードプールがノード自動プロビジョニングによって自動的にプロビジョニングされ、ワークロードの要件に合わせて自動的にスケーリングされるため、ノードのプロビジョニングやノードプールの管理について心配する必要がありません。

クラスタ オートスケーラーの使用

以下では、クラスタ オートスケーラーの使い方を説明します。

自動スケーリングを使用するクラスタを作成する

自動スケーリングが有効なクラスタは、Google Cloud CLI または Google Cloud コンソールを使用して作成できます。

gcloud

自動スケーリングを有効にしたクラスタを作成するには、--enable-autoscaling フラグを使用して --min-nodes--max-nodes を指定します。

gcloud container clusters create CLUSTER_NAME \
    --enable-autoscaling \
    --num-nodes NUM_NODES \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --location=CONTROL_PLANE_LOCATION

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

  • CLUSTER_NAME: 作成するクラスタの名前。
  • NUM_NODES: 各ロケーションで作成するノードの数。
  • MIN_NODES: 指定したノードプールで自動的にスケーリングする、ゾーンあたりの最小ノード数。GKE バージョン 1.24 以降でノードプール全体の最小ノード数を指定するには、--total-min-nodes を使用します。フラグ --total-min-nodes--total-max-nodes は、フラグ --min-nodes--max-nodes と相互に排他的です。
  • MAX_NODES: 指定したノードプールで自動的にスケーリングする、ゾーンあたりの最大ノード数。GKE バージョン 1.24 以降でノードプール全体のノードの最大数を指定するには、--total-max-nodes を使用します。フラグ --total-min-nodes--total-max-nodes は、フラグ --min-nodes--max-nodes と相互に排他的です。
  • CONTROL_PLANE_LOCATION: クラスタのコントロール プレーンの Compute Engine におけるロケーション。リージョン クラスタの場合はリージョン、ゾーンクラスタの場合はゾーンを指定します。

例: ノード自動スケーリングと最小ノード数、最大ノード数を指定したクラスタの作成

次のコマンドは、90 ノードのクラスタ、またはリージョンに存在する 3 つのゾーンのそれぞれに 30 ノードを持つクラスタを作成します。ノード自動スケーリングが有効になり、クラスタの負荷に基づいてノード数が変更されます。このクラスタ オートスケーラーは、デフォルトのノードプールのサイズをゾーンあたり最小で 15 ノード、最大で 50 ノードまで変化させることができます。

gcloud container clusters create my-cluster --enable-autoscaling \
    --num-nodes=30 \
    --min-nodes=15 --max-nodes=50 \
    --location=us-central

例: ノードの自動スケーリングを有効にして合計ノードを指定したクラスタの作成

次のコマンドは、30 ノードのクラスタ、またはリージョンに存在する 3 つのゾーンのそれぞれに 10 ノードを持つクラスタを作成します。ノード自動スケーリングが有効になり、クラスタの負荷に基づいてノード数が変更されます。この例では、ゾーン間の分散に関係なく、クラスタの合計サイズを 10~60 ノードにできます。

gcloud container clusters create my-cluster --enable-autoscaling \
    --num-nodes 10 \
    --location us-central1 \
    --total-min-nodes 10  --total-max-nodes 60

コンソール

デフォルト ノードプールの自動スケーリングが有効なクラスタを新しく作成するには:

  1. Google Cloud コンソールで、[Kubernetes クラスタの作成] ページに移動します。

    [Kubernetes クラスタの作成] に移動

  2. 必要に応じてクラスタを構成します。

  3. ナビゲーション パネルの [ノードプール] で [default-pool] をクリックします。

  4. [自動スケーリングの有効化] チェックボックスをオンにします。

  5. [ノードの最小数] フィールドと [ノードの最大数] フィールドの値を必要に応じて変更します。

  6. [作成] をクリックします。

自動スケーリング対応のノードプールを追加する

自動スケーリングが有効なノードプールは、gcloud CLI または Google Cloud コンソールを使用して作成できます。

gcloud

自動スケーリング対応のノードプールを既存のクラスタに追加するには、次のコマンドを使用します。

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --enable-autoscaling \
    --min-nodes=MIN_NODES \
    --max-nodes=MAX_NODES \
    --location=CONTROL_PLANE_LOCATION

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

  • POOL_NAME: 目的のノードプールの名前。
  • CLUSTER_NAME: ノードプールが作成されるクラスタの名前。
  • MIN_NODES: 指定したノードプールで自動的にスケーリングする、ゾーンあたりの最小ノード数。GKE バージョン 1.24 以降でノードプール全体の最小ノード数を指定するには、--total-min-nodes を使用します。フラグ --total-min-nodes--total-max-nodes は、フラグ --min-nodes--max-nodes と相互に排他的です。
  • MAX_NODES: 指定したノードプールで自動的にスケーリングする、ゾーンあたりの最大ノード数。GKE バージョン 1.24 以降でノードプール全体のノードの最大数を指定するには、--total-max-nodes を使用します。フラグ --total-min-nodes--total-max-nodes は、フラグ --min-nodes--max-nodes と相互に排他的です。
  • CONTROL_PLANE_LOCATION: クラスタのコントロール プレーンの Compute Engine におけるロケーション。リージョン クラスタの場合はリージョン、ゾーンクラスタの場合はゾーンを指定します。

例: ノードの自動スケーリングを有効にしてノードプールを追加する

次のコマンドは、ノードプールを最大 5 ノードと最小 1 ノードの範囲内でスケーリングするノードの自動スケーリングを使用するノードプールを作成します。

gcloud container node-pools create my-node-pool \
    --cluster my-cluster \
    --enable-autoscaling \
    --min-nodes 1 --max-nodes 5 \
    --location us-central1-c

コンソール

自動スケーリング対応のノードプールを既存のクラスタに追加するには:

  1. Google Cloud コンソールで Google Kubernetes Engine ページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [ ノードプールを追加] をクリックします。

  4. 必要に応じてノードプールを構成します。

  5. [サイズ] で、[自動スケーリングの有効化] チェックボックスをオンにします。

  6. [ノードの最小数] フィールドと [ノードの最大数] フィールドの値を必要に応じて変更します。

  7. [作成] をクリックします。

既存のノードプールの自動スケーリングを有効にする

既存のノードプールの自動スケーリングは、gcloud CLI または Google Cloud コンソールを使用して有効にできます。

gcloud

既存のノードプールの自動スケーリングを有効にするには、次のコマンドを使用します。

gcloud container clusters update CLUSTER_NAME \
    --enable-autoscaling \
    --node-pool=POOL_NAME \
    --min-nodes=MIN_NODES \
    --max-nodes=MAX_NODES \
    --location=CONTROL_PLANE_LOCATION

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

  • CLUSTER_NAME: 更新するクラスタの名前。
  • POOL_NAME: 目的のノードプールの名前。ノードプールが 1 つしかない場合は、値として default-pool を指定します。
  • MIN_NODES: 指定したノードプールで自動的にスケーリングする、ゾーンあたりの最小ノード数。GKE バージョン 1.24 以降でノードプール全体の最小ノード数を指定するには、--total-min-nodes を使用します。フラグ --total-min-nodes--total-max-nodes は、フラグ --min-nodes--max-nodes と相互に排他的です。
  • MAX_NODES: 指定したノードプールで自動的にスケーリングする、ゾーンあたりの最大ノード数。GKE バージョン 1.24 以降でノードプール全体のノードの最大数を指定するには、--total-max-nodes を使用します。フラグ --total-min-nodes--total-max-nodes は、フラグ --min-nodes--max-nodes と相互に排他的です。
  • CONTROL_PLANE_LOCATION: クラスタのコントロール プレーンの Compute Engine におけるロケーション。リージョン クラスタの場合はリージョン、ゾーンクラスタの場合はゾーンを指定します。

コンソール

既存のノードプールの自動スケーリングを有効にするには:

  1. Google Cloud コンソールで Google Kubernetes Engine ページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [ノード] タブをクリックします。

  4. [ノードプール] で、変更するノードプールの名前をクリックし、 [編集] をクリックします。

  5. [サイズ] で、[自動スケーリングの有効化] チェックボックスをオンにします。

  6. [ノードの最小数] フィールドと [ノードの最大数] フィールドの値を必要に応じて変更します。

  7. [保存] をクリックします。

既存のノードプールの自動スケーリングが有効になっていることを確認する

Google Cloud CLI または Google Cloud コンソールを使用して、クラスタが自動スケーリングを使用していることを確認します。

gcloud

クラスタ内のノードプールの説明を取得します。

gcloud container node-pools describe NODE_POOL_NAME --cluster=CLUSTER_NAME |grep autoscaling -A 1

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

  • POOL_NAME: 選択した新しいノードプールの名前。
  • CLUSTER_NAME: クラスタの名前。

自動スケーリングが有効になっている場合、出力は次のようになります。

autoscaling:
  enabled: true

コンソール

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、確認するクラスタの名前をクリックします。

  3. [ノード] タブをクリックします。

  4. [ノードプール] で、ノードプールが Autoscalling の状態であることを確認します。

未使用の予約の最適化を優先するノードプールを作成する

ノードプールを作成するときに --location_policy=ANY フラグを使用して、未使用の予約の使用を優先するようにクラスタ オートスケーラーに指示します。

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location_policy=ANY

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

  • POOL_NAME: 選択した新しいノードプールの名前。
  • CLUSTER_NAME: クラスタの名前。

既存のノードプールの自動スケーリングを無効にする

既存のノードプールの自動スケーリングは、gcloud CLI または Google Cloud コンソールを使用して無効にできます。

gcloud

特定のノードプールの自動スケーリングを無効にするには、--no-enable-autoscaling フラグを使用します。

gcloud container clusters update CLUSTER_NAME \
    --no-enable-autoscaling \
    --node-pool=POOL_NAME \
    --location=CONTROL_PLANE_LOCATION

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

  • CLUSTER_NAME: 更新するクラスタの名前。
  • POOL_NAME: 目的のノードプールの名前。
  • CONTROL_PLANE_LOCATION: クラスタのコントロール プレーンの Compute Engine におけるロケーション。リージョン クラスタの場合はリージョン、ゾーンクラスタの場合はゾーンを指定します。

クラスタのサイズは、クラスタの現在のデフォルト ノードプールのサイズに固定されます。このサイズは、手動で更新できます。

コンソール

特定のノードプールの自動スケーリングを無効にするには:

  1. Google Cloud コンソールで Google Kubernetes Engine ページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [ノード] タブをクリックします。

  4. [ノードプール] で、変更するノードプールの名前をクリックし、 [編集] をクリックします。

  5. [サイズ] で、[自動スケーリングの有効化] チェックボックスをオフにします。

  6. [保存] をクリックします。

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

自動スケーリングが有効なクラスタでは、最小サイズ(--min-nodes)と最大サイズ(--max-nodes)の値、または最小サイズの合計(--total-min-nodes)と最大サイズの合計(--total-max-nodes)で指定された境界内で、クラスタ オートスケーラーがノードプールのサイズを自動的に変更します。これらのフラグは相互に排他的です。これらの値を変更しても、ノードプールのサイズを手動で変更することはできません。

自動スケーリングが有効なクラスタ内のノードプールのサイズを手動で変更するには、次の手順を行います。

  1. ノードプールの自動スケーリングを無効にする
  2. クラスタのサイズを手動で変更する
  3. 自動スケーリングを再び有効にし、ノードプールの最小サイズと最大サイズを指定する

選択したノードでの Pod のスケジューリングを禁止する

ユースケースによっては、startup または status taint を使用して、選択したノードでの Pod のスケジューリングを禁止することができます。

この機能は、バージョン 1.28 以降の GKE で使用できます。

Startup taint

startup taint は、Pod をノードで実行する前に完了しなければならないオペレーションがある場合に使用します。たとえば、ノードへのドライバのインストールが完了するまで Pod が実行されないようにします。

クラスタ オートスケーラーは、startup taint が設定されたノードを未準備状態のノードとして扱いますが、すぐに準備が完了すると想定して、スケールアップ ロジックではこれらのノードを考慮します。

Startup taint は、接頭辞 startup-taint.cluster-autoscaler.kubernetes.io/ が付いたすべての taint として定義されます。

Status taint

GKE が Pod の実行に特定のノードを使用すべきでない場合は、status taint を使用します。

クラスタ オートスケーラーは、status taint が設定されたノードを準備完了状態として扱いますが、スケールアップ ロジックでは無視します。この taint のノードの準備ができていても、Pod は実行されるべきではありません。Pod でさらにリソースが必要な場合、GKE はクラスタをスケールアップし、この taint のノードを無視します。

Status taint は、接頭辞が status-taint.cluster-autoscaler.kubernetes.io/ のすべての taint として定義されます。

Ignore taint

Ignore taint は、ignore-taint.cluster-autoscaler.kubernetes.io/ という接頭辞を持つすべての taint として定義されます。

トラブルシューティング

トラブルシューティングのヒントについては、次のページをご覧ください。

次のステップ