このページでは、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
デフォルト ノードプールの自動スケーリングが有効にされたクラスタを新しく作成するには:
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
[add_box 作成] をクリックします。
必要に応じてクラスタを構成します。
ナビゲーション ペインの [ノードプール] で [default-pool] をクリックします。
[自動スケーリングの有効化] チェックボックスをオンにします。
[ノードの最小数] フィールドと [ノードの最大数] フィールドの値を必要に応じて変更します。
[作成] をクリックします。
自動スケーリング対応のノードプールの追加
自動スケーリングを有効にしたノードプールは、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
自動スケーリング対応のノードプールを既存のクラスタに追加するには:
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[add_box ノードプールを追加] をクリックします。
必要に応じてノードプールを構成します。
[サイズ] で、[自動スケーリングの有効化] チェックボックスをオンにします。
[ノードの最小数] フィールドと [ノードの最大数] フィールドの値を必要に応じて変更します。
[作成] をクリックします。
既存のノードプールの自動スケーリングを有効にする
既存のノードプールの自動スケーリングは、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
既存のノードプールの自動スケーリングを有効にするには:
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[ノード] タブをクリックします。
[ノードプール] で、変更するノードプールの名前をクリックし、edit [編集] をクリックします。
[サイズ] で、[自動スケーリングの有効化] チェックボックスをオンにします。
[ノードの最小数] フィールドと [ノードの最大数] フィールドの値を必要に応じて変更します。
[保存] をクリックします。
既存のノードプールの自動スケーリングが有効になっていることを確認する
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
コンソール
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
クラスタのリストで、確認するクラスタの名前をクリックします。
[ノード] タブをクリックします。
[ノードプール] で、ノードプールが
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
特定のノードプールの自動スケーリングを無効にするには:
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[ノード] タブをクリックします。
[ノードプール] で、変更するノードプールの名前をクリックし、edit [編集] をクリックします。
[サイズ] で、[自動スケーリングの有効化] チェックボックスをオフにします。
[保存] をクリックします。
ノードプールのサイズを変更する
自動スケーリングが有効なクラスタの場合、クラスタ オートスケーラーは、最小サイズ(--min-nodes
)と最大サイズ(--max-nodes
)の値、または最小サイズの合計(--total-min-nodes
)と最大サイズの合計(--total-max-nodes
)で指定された境界内で、ノードプールのサイズを自動的に変更します。これらのフラグは相互に排他的です。これらの値を変更しても、ノードプールを手動でサイズ変更することはできません。
自動スケーリングが有効になっているクラスタ内のノードプールを手動でサイズ変更する場合は、次の手順を行います。
選択したノードで 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 として定義されます。
トラブルシューティング
トラブルシューティングのヒントについては、次のページをご覧ください。