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


このページでは、Standard Google Kubernetes Engine(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 \
    --region=COMPUTE_REGION

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

  • 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 と相互に排他的です。
  • COMPUTE_REGION: 新しいクラスタの Compute Engine のリージョン。ゾーンクラスタの場合は、--zone=COMPUTE_ZONE を使用します。

例: ノード自動スケーリングと最小ノード数と最大ノード数を含むクラスタを作成する

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

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

例: ノードの自動スケーリングを有効にして合計ノードを作成する

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

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

Console

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

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

    Google Kubernetes Engine に移動

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

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

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

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

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

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

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

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

gcloud

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

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

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

  • 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 と相互に排他的です。
  • COMPUTE_REGION: 新しいクラスタの Compute Engine のリージョン。ゾーンクラスタの場合は、--zone=COMPUTE_ZONE を使用します。

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

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

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

Console

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

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

    Google Kubernetes Engine に移動

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

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

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

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

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

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

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

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

gcloud

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

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

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

  • 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 と相互に排他的です。
  • COMPUTE_REGION: 新しいクラスタの Compute Engine のリージョン。ゾーンクラスタの場合は、--zone=COMPUTE_ZONE を使用します。

Console

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

  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 Console を使用して無効にできます。

gcloud

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

gcloud container clusters update CLUSTER_NAME \
    --no-enable-autoscaling \
    --node-pool=POOL_NAME \
    --region=COMPUTE_REGION

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

  • CLUSTER_NAME: 更新するクラスタの名前。
  • POOL_NAME: 目的のノードプールの名前。
  • COMPUTE_REGION: 新しいクラスタの Compute Engine のリージョン。ゾーンクラスタの場合は、--zone=COMPUTE_ZONE を使用します。

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

Console

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

  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 として定義されます。

トラブルシューティング

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

次のステップ