このページでは、Google Kubernetes Engine(GKE)Autopilot ワークロードに指定できるリソースの最大リクエスト、最小リクエスト、デフォルトのリクエストと、Autopilot がワークロードの安定性を維持するためにこれらのリクエストを自動的に変更する方法について説明します。
Autopilot リソース リクエストの概要
Autopilot は、ワークロード構成に指定したリソース リクエストを使用して、ワークロードを実行するノードを構成します。Autopilot は、ワークロードが使用するコンピューティング クラスまたはハードウェア構成に基づいて、リソースの最小リクエストと最大リクエストを適用します。一部のコンテナのリクエストを指定していない場合、Autopilot は、コンテナが正常に実行されるようにデフォルト値を割り当てます。
Autopilot クラスタにワークロードをデプロイすると、選択したコンピューティング クラスまたはハードウェア構成(GPU など)で許容される最小値と最大値に対してワークロード構成が GKE により検証されます。リクエストが最小値未満の場合は、Autopilot がワークロード構成を自動的に変更し、リクエストが許容範囲に収まるようにします。リクエストが最大値より大きい場合、Autopilot はワークロードを拒否し、エラー メッセージが表示されます。
次のリストは、リソース リクエストのカテゴリの概要を示します。
- デフォルトのリソース リクエスト: ワークロードに独自のリクエストを指定しない場合、Autopilot によって追加されます。
- リソースの最小リクエストと最大リクエスト: Autopilot は、リクエストがこの制限内に収まるように、指定されたリクエストを検証します。リクエストが制限を超えると、Autopilot によってワークロード リクエストが変更されます。
- ワークロードの分離と期間延長のリクエスト: Autopilot には、互いに分離しているワークロードや GKE が開始した強制排除からの保護を強化した Pod ごとに別々のデフォルト値と最小値があります。
- DaemonSet のリソース リクエスト: Autopilot では、DaemonSet のコンテナごとに異なるデフォルト値、最小値、最大値があります。
リソースのリクエスト方法
Autopilot では、リソースを Pod 仕様でリクエストします。リクエストできるサポート対象の最小リソースと最大リソースは、Pod が実行されるノードのハードウェア構成によって変わります。特定のハードウェア構成をリクエストする方法については、次のページをご覧ください。
デフォルトのリソース リクエスト
Pod 内の一部のコンテナにリソース リクエストを指定しない場合、Autopilot はデフォルト値を適用します。これらのデフォルト値は、多くの小規模なワークロードに適しています。
さらに、Autopilot は、選択したコンピューティング クラスやハードウェア構成に関係なく、次のデフォルト リソース リクエストを適用します。
DaemonSet のコンテナ
- CPU: 50 mCPU
- メモリ: 100 MiB
- エフェメラル ストレージ: 100 MiB
その他すべてのコンテナ
- エフェメラル ストレージ: 1 GiB
Autopilot によるクラスタの制限の詳細については、割り当てと上限をご覧ください。
コンピューティング クラスのデフォルト リクエスト
Autopilot では、コンピューティング クラスで実行される Pod の Pod 仕様で定義されていないリソースには、次のデフォルト値が適用されます。一方のリクエストのみを設定し、もう一方を空白のままにすると、GKE は最小リクエストと最大リクエストのセクションで定義されている CPU とメモリの比率を使用して、欠落しているリクエストを比率に沿う値に設定します。
コンピューティング クラス | リソース | デフォルト リクエスト |
---|---|---|
汎用(デフォルト) | CPU | 0.5 vCPU |
メモリ | 2 GiB | |
アクセラレータ | アクセラレータのデフォルトのリソース セクションをご覧ください。 | |
バランス | CPU | 0.5 vCPU |
メモリ | 2 GiB | |
パフォーマンス | CPU |
|
メモリ |
|
|
エフェメラル ストレージ |
|
|
スケールアウト | CPU | 0.5 vCPU |
メモリ | 2 GiB |
アクセラレータのデフォルト リクエスト
次の表に、Pod 仕様の requests
フィールドに値が指定されていない Pod に GKE が割り当てるデフォルト値を示します。この表は、Accelerator
コンピューティング クラスを使用する Pod に適用されます。これは、Autopilot クラスタでアクセラレータを実行する推奨の方法です。
アクセラレータ | リソース | トータルのデフォルト リクエスト |
---|---|---|
NVIDIA H100(80 GB)GPUnvidia-h100-80gb |
CPU |
|
メモリ |
|
|
エフェメラル ストレージ |
|
|
NVIDIA A100(40 GB)GPUnvidia-tesla-a100 |
CPU |
|
メモリ |
|
|
NVIDIA A100(80 GB)GPUnvidia-a100-80gb |
CPU |
|
メモリ |
|
|
エフェメラル ストレージ |
|
|
NVIDIA L4 GPUnvidia-l4 |
CPU |
|
メモリ |
|
|
NVIDIA T4 GPUnvidia-tesla-t4 |
CPU |
|
メモリ |
|
|
TPU v5etpu-v5-lite-device (単一ホスト) |
CPU | すべてのトポロジ: 1 mCPU |
メモリ | すべてのトポロジ: 1 MiB | |
TPU v5etpu-v5-lite-podslice (マルチホスト) |
CPU | すべてのトポロジ: 1 mCPU |
メモリ | すべてのトポロジ: 1 MiB | |
TPU v5ptpu-v5p-slice |
CPU | すべてのトポロジ: 1 mCPU |
メモリ | すべてのトポロジ: 1 MiB | |
TPU v4tpu-v4-podslice |
CPU | すべてのトポロジ: 1 mCPU |
メモリ | すべてのトポロジ: 1 MiB |
アクセラレータ コンピューティング クラスなしのサポートされている GPU
アクセラレータ コンピューティング クラスを使用しない場合は、次の GPU のみがサポートされます。これらの GPU のデフォルトのリソース リクエストは、アクセラレータ コンピューティング クラスと同じです。
- NVIDIA A100(40 GB)
- NVIDIA A100(80 GB)
- NVIDIA L4
- NVIDIA Tesla T4
リソースの最小リクエストと最大リクエスト
デプロイ構成でリクエストされるリソースの合計は、Autopilot で許可されるサポート範囲の最小値と最大値の間に入る必要があります。次の条件が適用されます。
- エフェメラル ストレージ リクエストは、別途指定しない限り、すべてのコンピューティング クラスとハードウェア構成で 10 MiB~10 GiB でなければなりません。大量のボリュームを使用する場合は、汎用のエフェメラル ボリュームを使用することをおすすめします。エフェメラル ストレージと同等の機能とパフォーマンスを提供し、どの GKE ストレージ オプションで使用しても高い汎用性があります。たとえば、
pd-balanced
を使用する汎用エフェメラル ボリュームの最大サイズは 64 TiB です。 DaemonSet Pod の場合、最小リソース リクエストは次のとおりです。
- バーストをサポートするクラスタ: Pod あたり 1 mCPU、Pod あたり 2 MiB のメモリ、Pod 内のコンテナあたり 10 MiB のエフェメラル ストレージ。
- バーストをサポートしていないクラスタ: Pod あたり 10 mCPU、Pod あたり 10 MiB のメモリ、Pod 内のコンテナあたり 10 MiB のエフェメラル ストレージ。
クラスタがバーストをサポートしているかどうかを確認するには、GKE でのバーストの可用性をご覧ください。
CPU とメモリの比率は、選択したコンピューティング クラスまたはハードウェア構成で許容される範囲内になければなりません。CPU とメモリの比率が許容範囲を超えている場合、Autopilot は小さい方のリソースを自動的に増加させます。たとえば、
Scale-Out
クラスで実行されている Pod に 1 vCPU と 16 GiB のメモリ(比率 1:16)をリクエストすると、Autopilot は、CPU リクエストを 4 vCPU に増加させ、比率は 1:4 になります。
コンピューティング クラスの最小値と最大値
Autopilot がサポートするコンピューティング クラスごとの CPU とメモリの最小値、最大値と許容される比率を次の表に示します。
コンピューティング クラス | CPU とメモリの比率(vCPU:GiB) | リソース | 最小 | 最大 |
---|---|---|---|---|
汎用(デフォルト) | 1:1~1:6.5 | CPU | この値は、クラスタがバーストをサポートしているかどうかによって異なります。
クラスタがバーストをサポートしているかどうかを確認するには、GKE でのバーストの可用性をご覧ください。 |
30 vCPU |
メモリ | この値は、クラスタがバーストをサポートしているかどうかによって異なります。
クラスタがバーストをサポートしているかどうかを確認するには、GKE でのバーストの可用性をご覧ください。 |
110 GiB | ||
アクセラレータ | アクセラレータの最小値と最大値をご覧ください。 | |||
バランス | 1:1~1:8 | CPU | 0.25 vCPU | 222 vCPU 最小 CPU プラットフォームが選択されている場合:
|
メモリ | 0.5 GiB | 851 GiB 最小 CPU プラットフォームが選択されている場合:
|
||
パフォーマンス | なし | CPU | 0.001 vCPU |
|
メモリ | 1 MiB |
|
||
エフェメラル ストレージ | 10 MiB |
|
||
スケールアウト | 1:4 | CPU | 0.25 vCPU |
|
メモリ | 1 GiB |
|
Autopilot Pod でコンピューティング クラスをリクエストする方法については、Autopilot Pod のコンピューティング クラスを選択するをご覧ください。
アクセラレータの最小値と最大値
次のセクションでは、GPU や TPU などのハードウェア アクセラレータを使用する Pod の CPU とメモリの最小値、最大値、許容される比率について説明します。
特に指定されていない限り、バージョン 1.28.6-gke.1369000 以降と 1.29.1-gke.1575000 以降では、サポートされるエフェメラル ストレージの最大値は 122 GiB です。それより前のバージョンでは、サポートされるエフェメラル ストレージの最大値は 10 GiB です。
アクセラレータ コンピューティング クラスの最小値と最大値
次の表に、アクセラレータ コンピューティング クラスを使用する Pod の最小リソース リクエストと最大リソース リクエストを示します。これは、GKE Autopilot クラスタでアクセラレータを実行するために推奨される方法です。アクセラレータ コンピューティング クラスでは、GKE は CPU とメモリのリクエストの比率を適用しません。
アクセラレータ タイプ | リソース | 最小 | 最大 |
---|---|---|---|
NVIDIA H100(80GB)nvidia-h100-80gb |
CPU |
|
|
メモリ |
|
|
|
エフェメラル ストレージ |
|
|
|
NVIDIA A100(40GB)nvidia-tesla-a100 |
CPU | 0.001 vCPU |
A100 GPU ノードで実行されるすべての DaemonSet の CPU リクエストの合計は、2 vCPU を超えないようにする必要があります。 |
メモリ | 1 MiB |
A100 GPU ノードで実行されるすべての DaemonSet のメモリ リクエストの合計は、14 GiB 超えないようにする必要があります。 |
|
NVIDIA A100(80GB)nvidia-a100-80gb |
CPU | 0.001 vCPU |
A100(80GB)GPU ノードで実行されるすべての DaemonSet の CPU リクエストの合計は、2 vCPU を超えないようにする必要があります。 |
メモリ | 1 MiB |
A100(80GB)GPU ノードで実行されるすべての DaemonSet のメモリ リクエストの合計は、14 GiB を超えないようにする必要があります。 |
|
エフェメラル ストレージ | 512 MiB |
|
|
NVIDIA L4nvidia-l4 |
CPU | 0.001 vCPU |
L4 GPU ノードで実行されるすべての DaemonSet の CPU リクエストの合計は、2 vCPU を超えないようにする必要があります。 |
メモリ | 1 MiB |
L4 GPU ノードで実行されるすべての DaemonSet のメモリ リクエストの合計は、14 GiB を超えないようにする必要があります。 |
|
NVIDIA Tesla T4nvidia-tesla-t4 |
CPU | 0.001 vCPU |
|
メモリ | 1 MiB |
|
|
TPU v5etpu-v5-lite-device |
CPU | 0.001 vCPU |
|
メモリ | 1 MiB |
|
|
エフェメラル ストレージ | 10 MiB | 56 TiB | |
TPU v5etpu-v5-lite-podslice |
CPU | 0.001 vCPU |
|
メモリ | 1 MiB |
|
|
エフェメラル ストレージ | 10 MiB | 56 TiB | |
TPU v5ptpu-v5p-slice |
CPU | 0.001 vCPU | 280 vCPU |
メモリ | 1 MiB | 448 GiB | |
エフェメラル ストレージ | 10 MiB | 56 TiB | |
TPU v4tpu-v4-podslice |
CPU | 0.001 vCPU | 240 vCPU |
メモリ | 1 MiB | 407 GiB | |
エフェメラル ストレージ | 10 MiB | 56 TiB |
Autopilot Pod で GPU をリクエストする方法については、Autopilot に GPU ワークロードをデプロイするをご覧ください。
コンピューティング クラスなしの GPU の最小値と最大値
次の表に、アクセラレータ コンピューティング クラスを使用しない Pod の最小リソース リクエストと最大リソース リクエストを示します。
GPU のタイプ | CPU とメモリの比率(vCPU:GiB) | リソース | 最小 | 最大 |
---|---|---|---|---|
NVIDIA A100(40GB)nvidia-tesla-a100 |
未適用 | CPU |
|
A100 GPU ノードで実行されるすべての DaemonSet の CPU リクエストの合計は、2 vCPU を超えないようにする必要があります。 |
メモリ |
|
A100 GPU ノードで実行されるすべての DaemonSet のメモリ リクエストの合計は、14 GiB 超えないようにする必要があります。 |
||
NVIDIA A100(80GB)nvidia-a100-80gb |
未適用 | CPU |
|
A100(80GB)GPU ノードで実行されるすべての DaemonSet の CPU リクエストの合計は、2 vCPU を超えないようにする必要があります。 |
メモリ |
|
A100(80GB)GPU ノードで実行されるすべての DaemonSet のメモリ リクエストの合計は、14 GiB を超えないようにする必要があります。 |
||
エフェメラル ストレージ |
|
|
||
NVIDIA L4nvidia-l4 |
|
CPU |
|
L4 GPU ノードで実行されるすべての DaemonSet の CPU リクエストの合計は、2 vCPU を超えないようにする必要があります。 |
メモリ |
|
L4 GPU ノードで実行されるすべての DaemonSet のメモリ リクエストの合計は、14 GiB を超えないようにする必要があります。 |
||
NVIDIA Tesla T4nvidia-tesla-t4 |
1:1~1:6.25 | CPU | 0.5 vCPU |
|
メモリ | 0.5 GiB |
|
Autopilot Pod で GPU をリクエストする方法については、Autopilot に GPU ワークロードをデプロイするをご覧ください。
ワークロードの分離と期間延長のリソース リクエスト
Autopilot を使用すると、次のような方法を使用して Kubernetes のスケジュール設定と強制排除の動作を操作できます。
- taint と toleration とノードセレクタを使用して、特定の Pod が特定のノードにのみ配置されるようにします。詳細については、GKE でワークロードの分離を構成するをご覧ください。
- Pod の反アフィニティを使用して、Pod が同じノード上に配置されないようにします。これらのメソッドを使用してスケジューリング動作を制御するワークロードのデフォルトと最小のリソース リクエストは、使用しないワークロードよりも高くなります。
- アノテーションを使用して、ノードの自動アップグレードとスケールダウン イベントによる強制排除から Pod を最大 7 日間保護します。詳細については、Autopilot Pod の実行時間を延長するをご覧ください。
指定したリクエストが最小値未満の場合、Autopilot の動作は、使用したメソッドに従って次のように変化します。
- taint、toleration、セレクタ、期間延長の Pod: Autopilot は、Pod のスケジュールを設定するときにリクエストを増やすように Pod を変更します。
- Pod の反アフィニティ: Autopilot は Pod を拒否し、エラー メッセージが表示されます。
次の表に、デフォルトのリクエストと、指定できる最小のリソース リクエストを示します。構成またはコンピューティング クラスがこのテーブルにない場合、Autopilot は特別な最小値またはデフォルト値を適用しません。
コンピューティング クラス | リソース | デフォルト | 最小 |
---|---|---|---|
汎用 | CPU | 0.5 vCPU | 0.5 vCPU |
メモリ | 2 GiB | 0.5 GiB | |
バランス | CPU | 2 vCPU | 1 vCPU |
メモリ | 8 GiB | 4 GiB | |
スケールアウト | CPU | 0.5 vCPU | 0.5 vCPU |
メモリ | 2 GiB | 2 GiB |
初期コンテナ
初期コンテナは連続で実行され、アプリケーション コンテナを開始する前に完了する必要があります。Autopilot 初期コンテナにリソース リクエストを指定しない場合、GKE は各初期コンテナに対して Pod が利用できるトータルのリソースを割り当てます。この動作は GKE Standard では異なります。各初期コンテナは、Pod がスケジュールされているノードで使用可能な未割り当てリソースを使用できます。
アプリケーション コンテナとは異なり、GKE では Autopilot 初期コンテナにリソース リクエストを指定しないことをおすすめします。これにより、各コンテナは Pod で使用可能なすべてのリソースを取得できます。リクエストするリソースがデフォルトより少ない場合は、初期コンテナが制限されます。Autopilot のデフォルトよりも多くのリソースをリクエストすると、Pod が存在する全期間で請求額が増える可能性があります。
Autopilot でリソース制限を設定する
Kubernetes では、Pod 仕様のリソースに requests
と limits
の両方を設定できます。Pod の動作は、次の表に示すように、limits
が requests
と異なるかどうかによって異なります。
値の設定 | Autopilot の動作 |
---|---|
requests は limits と等しい |
Pod は Guaranteed QoS クラスを使用します。 |
requests は設定、limits は未設定 |
動作は、クラスタがバーストをサポートしているかどうかによって異なります。
クラスタがバーストをサポートしているかどうかを確認するには、GKE でのバーストの可用性をご覧ください。 |
requests は未設定、limits は設定 |
Autopilot は、requests を limits の値に設定します。これは Kubernetes のデフォルトの動作です。変更前: resources: limits: cpu: "400m" 変更後: resources: requests: cpu: "400m" limits: cpu: "400m" |
requests は limits より小さい |
動作は、クラスタがバーストをサポートしているかどうかによって異なります。
クラスタがバーストをサポートしているかどうかを確認するには、GKE でのバーストの可用性をご覧ください。 |
requests は limits より大きい |
Autopilot は、requests を limits の値に設定します。変更前: resources: requests: cpu: "450m" limits: cpu: "400m" 変更後: resources: requests: cpu: "400m" limits: cpu: "400m" |
requests は未設定、limits は未設定 |
Autopilot は、
クラスタがバーストをサポートしているかどうかを確認するには、GKE でのバーストの可用性をご覧ください。 |
ほとんどの場合、ワークロードに適切なリソース リクエストと同等の上限を設定します。
起動時やトラフィックの増加時など、定常状態よりも一時的に多くのリソースを必要とするワークロードの場合は、リクエストよりも高い上限を設定して Pod をバーストできるようにします。詳細については、GKE で Pod バーストを構成するをご覧ください。
Autopilot での自動リソース管理
ワークロードに指定したリソース リクエストが許可された範囲外の場合、または一部のコンテナ用のリソースをリクエストしない場合、Autopilot は、許可された範囲に適合するようにワークロード構成を変更します。Autopilot は、リクエストが指定されていないコンテナにデフォルト値を適用したうえで、リソース比率とリソースのスケールアップ要件を計算します。
- リクエストがない: 一部のコンテナでリソースをリクエストしない場合、Autopilot はコンピューティング クラスまたはハードウェア構成のデフォルトのリクエストを適用します。
- CPU とメモリの比率: Autopilot は、小さい方のリソースをスケールアップして、比率が許容範囲内になるようにします。
- エフェメラル ストレージ: Autopilot は、各コンテナで必要な最小サイズを満たすようにエフェメラル ストレージ リクエストを変更します。すべてのコンテナにわたるストレージ リクエストの累積値は、最大許容値を超えることはできません。Autopilot は、値が最大値を超えると、リクエストをスケールダウンします。
- 最小数を下回るリクエスト: 選択したハードウェア構成で許容される最小リソース数よりも少ないリソースをリクエストすると、Autopilot は、少なくとも最小リソース値をリクエストするように Pod を自動的に変更します。
デフォルトでは、Autopilot が最小またはデフォルトのリソース値を満たすようにリソースを自動的にスケーリングすると、GKE は追加の容量を Pod マニフェストの最初のコンテナに割り当てます。GKE バージョン 1.27.2-gke.2200 以降では、Pod マニフェストの annotations
フィールドに次のコードを追加して、追加のリソースを特定のコンテナに割り当てるように GKE に指示できます。
autopilot.gke.io/primary-container: "CONTAINER_NAME"
CONTAINER_NAME
は、コンテナの名前に置き換えます。
リソースの変更の例
次のシナリオ例では、実行中の Pod とコンテナの要件を満たすように Autopilot がワークロード構成を変更する方法を示します。
単一コンテナで 0.05 vCPU 未満の場合
コンテナ数 | 元のリクエスト | 変更されたリクエスト |
---|---|---|
1 | CPU: 30 mCPU メモリ: 0.5 GiB エフェメラル ストレージ: 10 MiB |
CPU: 50 mCPU メモリ: 0.5 GiB エフェメラル ストレージ: 10 MiB |
複数のコンテナの合計 CPU が 0.05 vCPU 未満の場合
コンテナ数 | 元のリクエスト | 変更されたリクエスト |
---|---|---|
1 | CPU: 10 mCPU メモリ: 0.5 GiB エフェメラル ストレージ: 10 MiB |
CPU: 30 mCPU メモリ: 0.5 GiB エフェメラル ストレージ: 10 MiB |
2 | CPU: 10 mCPU メモリ: 0.5 GiB エフェメラル ストレージ: 10 MiB |
CPU: 10 mCPU メモリ: 0.5 GiB エフェメラル ストレージ: 10 MiB |
3 | CPU: 10 mvCPU メモリ: 0.5 GiB エフェメラル ストレージ: 10 MiB |
CPU: 10 mCPU メモリ: 0.5 GiB エフェメラル ストレージ: 10 MiB |
Pod リソースの合計 | CPU: 50 mCPU メモリ: 1.5 GiB エフェメラル ストレージ: 30 MiB |
複数のコンテナの合計が 0.25 vCPU を超える場合
複数のコンテナの合計リソースが 0.25 vCPU 以上の場合、CPU は 0.25 vCPU の倍数に丸められ、余分な CPU が最初のコンテナに追加されます。この例では、元の累積 CPU は 0.32 vCPU で、合計 0.5 vCPU に変更されます。
コンテナ数 | 元のリクエスト | 変更されたリクエスト |
---|---|---|
1 | CPU: 0.17 vCPU メモリ: 0.5 GiB エフェメラル ストレージ: 10 MiB |
CPU: 0.35 vCPU メモリ: 0.5 GiB エフェメラル ストレージ: 10 MiB |
2 | CPU: 0.08 vCPU メモリ: 0.5 GiB エフェメラル ストレージ: 10 MiB |
CPU: 0.08 vCPU メモリ: 0.5 GiB エフェメラル ストレージ: 10 MiB |
3 | CPU: 0.07 vCPU メモリ: 0.5 GiB エフェメラル ストレージ: 10 MiB |
CPU: 0.07 vCPU メモリ: 0.5 GiB エフェメラル ストレージ: 10 MiB |
4 | 初期コンテナで、リソースが未定義 | Pod リソースを受信 |
Pod リソースの合計 | CPU: 0.5 vCPU メモリ: 1.5 GiB エフェメラル ストレージ: 30 MiB |
単一コンテナで、リクエストされた CPU に対してメモリが低すぎる場合
この例では、メモリが CPU の量に対して少なすぎます(最小比は 1 vCPU : 1 GiB)。CPU とメモリの許容最小比は 1:1 です。この値より小さい場合は、メモリ リクエストが引き上げられます。
コンテナ数 | 元のリクエスト | 変更されたリクエスト |
---|---|---|
1 | CPU: 4 vCPU メモリ: 1 GiB エフェメラル ストレージ: 10 MiB |
CPU: 4 vCPU メモリ: 4 GiB エフェメラル ストレージ: 10 MiB |
Pod リソースの合計 | CPU: 4 vCPU メモリ: 4 GiB エフェメラル ストレージ: 10 MiB |
次のステップ
- Autopilot ワークロード内のコンピューティング クラスを選択する方法を確認する。
- サポートされている Autopilot コンピューティング クラスについて確認する。
- Autopilot Pod で GPU を選択する方法を確認する。