このページでは、Google Kubernetes Engine(GKE)クラスタ内のノードに最小 CPU プラットフォームを指定する方法について説明します。
最小 CPU プラットフォームを選択する理由
最小 CPU プラットフォームを指定すると、特定の CPU 機能と仕様(高い基本周波数や最適化された電力管理機能など)が必要な場合に役立ちます。
グラフィックス、ゲーム、分析などの分野における高度なコンピューティング負荷の高いワークロードでは、さまざまな CPU プラットフォームの機能セット(AVX-2 や AVX-512)により実現される機能の中から、個々のワークロードに適した機能を利用できます。特定の CPU プラットフォームを選択することで、実行時間が大幅に短縮され、パフォーマンスも大きく向上する可能性があります。最小 CPU プラットフォームを指定すると、より予測可能な方法でこのような利点をワークロードで活用できるだけでなく、ワークロードに適さない CPU プラットフォームをノードで決して使用しないようにすることもできます。
プラットフォームの選び方
次の表に、GKE の使用方法に基づいて最小 CPU プラットフォームを選択する方法を示します。
範囲 | 説明 | サポートされているクラスタ構成 |
---|---|---|
ワークロードレベル(推奨) | Pod 仕様で最小プラットフォームを選択します。GKE はこれらの Pod を次のようにスケジューリングします。
|
|
ノードレベルとクラスタレベル | 新しい Standard モードのクラスタまたはノードプールを作成するときに、最小 CPU プラットフォームを選択します。この設定では、ノードの自動プロビジョニングはサポートされていません。手順については、ノードプール レベルで最小 CPU プラットフォームを選択するにスキップしてください。 | 新しい Standard クラスタまたはノードプール |
料金
最小 CPU プラットフォームは追加費用なしで選択できます。
始める前に
作業を始める前に、次のことを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
CPU プラットフォームが使用可能か確認する
使用可能な CPU プラットフォームは、ノードが実行されるコンピューティング ゾーンによって異なります。Autopilot クラスタまたはリージョン Standard クラスタを使用している場合でも、ゾーンで使用できる CPU プラットフォームを確認する必要があります。
特定のゾーンで使用可能なプラットフォームを確認するには、次のコマンドを実行します。
gcloud compute zones describe COMPUTE_ZONE
COMPUTE_ZONE
は、ゾーン名(us-central1-a
など)に置き換えます。リージョン クラスタタイプを使用する場合は、そのリージョン内のゾーンの名前を指定します。
出力は次のようになります。
availableCpuPlatforms:
- Intel Ice Lake
- Intel Cascade Lake
- Intel Skylake
- Intel Broadwell
- Intel Haswell
- Intel Ivy Bridge
- Intel Sandy Bridge
- AMD Milan
- AMD Rome
- Ampere Altra
- Intel Sapphire Rapids
これらの値を使用して最小 CPU プラットフォームをリクエストする場合は、プラットフォーム名のスペースをアンダースコアに置き換えてください。例: AMD_Milan
。
最小 CPU プラットフォームをワークロードレベルで選択する
ノードの自動プロビジョニングで GKE Autopilot クラスタまたは GKE Standard クラスタを使用する場合は、Pod 仕様で最小 CPU プラットフォームを選択できます。ワークロードをデプロイすると、GKE は指定されたプラットフォーム以降のノードでのみそれらの Pod をスケジュールします。これが推奨の方法です。
Autopilot
Autopilot で、最小 CPU プラットフォームとコンピューティング クラスをリクエストします。コンピューティング クラスは CPU プラットフォームをサポートしている必要があります。Autopilot では、Balanced
コンピューティング クラスの最小 CPU プラットフォームの選択がサポートされています。各コンピューティング クラスで利用可能な CPU プラットフォームの一覧については、特定のコンピューティング クラスを使用するタイミングをご覧ください。
次のマニフェストを min-cpu.yaml
として保存します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: min-cpu-platform
labels:
app: min-cpu
spec:
replicas: 3
selector:
matchLabels:
app: min-cpu
template:
metadata:
labels:
app: min-cpu
spec:
nodeSelector:
cloud.google.com/compute-class: "COMPUTE_CLASS"
supported-cpu-platform.cloud.google.com/PLATFORM: "true"
containers:
- name: hello-app
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
ports:
- containerPort: 8080
resources:
requests:
cpu: 250m
以下を置き換えます。
PLATFORM
: CPU プラットフォームの名前(AMD_Milan
など)。プラットフォーム名は大文字と小文字が区別され、アンダースコアで区切る必要があります。COMPUTE_CLASS
: コンピューティング クラスの名前。Balanced
である必要があります。
スタンダード
ノードの自動プロビジョニングが有効になっている Standard クラスタでは、Compute Engine マシン ファミリーとともに CPU プラットフォームをリクエストします。マシン ファミリーは、その CPU プラットフォームをサポートしている必要があります。各マシン ファミリーでサポートされているプラットフォームのリストについては、Compute Engine の CPU プラットフォームをご覧ください。
次のマニフェストを min-cpu.yaml
として保存します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: min-cpu-platform
labels:
app: min-cpu
spec:
replicas: 3
selector:
matchLabels:
app: min-cpu
template:
metadata:
labels:
app: min-cpu
spec:
nodeSelector:
cloud.google.com/machine-family: MACHINE_FAMILY
cloud.google.com/requested-min-cpu-platform: PLATFORM
containers:
- name: hello-app
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
ports:
- containerPort: 8080
resources:
requests:
cpu: 250m
以下を置き換えます。
PLATFORM
: CPU プラットフォームの名前(AMD_Milan
など)。プラットフォーム名は大文字と小文字が区別され、アンダースコアで区切る必要があります。MACHINE_FAMILY
: マシン ファミリーの名前(n2d
など)。
ワークロードをデプロイします。
kubectl apply -f min-cpu.yaml
ノードはライフサイクル全体を通して同じプラットフォームを保持しますが、指定された CPU プラットフォームが廃止される場合は例外です。その場合、ノードはより新しいプラットフォームで実行されます。
最小 CPU プラットフォームをノードプール レベルで選択する
ノードの自動プロビジョニングなしの GKE Standard クラスタの場合、新しいクラスタまたはノードプールを作成するときに、最小 CPU プラットフォームを指定できます。この方法は、ワークロード レベルの設定を使用できない場合にのみ使用してください。この設定では、ノードの自動プロビジョニングはサポートされていません。
gcloud
gcloud CLI を使用して最小 CPU プラットフォームを持つ新しいノードプールを作成するには、--min-cpu-platform
フラグを設定し、CPU プラットフォームの名前を指定します。
gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--region COMPUTE_REGION \
--min-cpu-platform PLATFORM
以下を置き換えます。
POOL_NAME
: 新しいノードプールの名前。CLUSTER_NAME
: クラスタの名前。COMPUTE_REGION
: クラスタのリージョン。PLATFORM
: ノードプールで実行する CPU プラットフォーム("Intel Broadwell"
など)。
Console
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[add_box ノードプールを追加] をクリックします。
必要に応じてノードプールを構成します。
ナビゲーション パネルで [ノード] をクリックします。
[マシンの構成] の
[シリーズ] プルダウン リストで [マシンタイプ] を選択します。
[マシンタイプ] プルダウン リストで [カスタム] を選択します。
必要に応じて [コア数] と [メモリ] を選択します。
[expand_more CPU プラットフォームと GPU] をクリックします。
[CPU プラットフォーム] プルダウン リストで、目的のプラットフォームを選択します。
[作成] をクリックします。
API
リクエスト本文の nodeConfig
フィールドの一部に minCpuPlatform
プロパティを含めます。minCpuPlatform
の値は、プラットフォームの名前(Intel Haswell
、Intel Broadwell
、Intel Sandy Bridge
など)でなければなりません。
たとえば、次のリクエストでは、Intel Broadwell プラットフォームを実行する新しいノードプールを作成します。
POST https://container.googleapis.com/v1/projects/PROJECT_ID/regions/COMPUTE_REGION/clusters/CLUSTER_NAME/nodePools
{
'nodePool': {
'name': 'POOL_NAME',
'nodeConfig': {
'minCpuPlatform': 'Intel Broadwell'
...
}
...
}
}
以下を置き換えます。
PROJECT_ID
: プロジェクト ID。COMPUTE_REGION
: クラスタのリージョン。CLUSTER_NAME
: クラスタの名前。POOL_NAME
: 新しいノードプールの名前。
クラスタを作成するときにプラットフォームを指定すると、新しいクラスタのデフォルト ノードプールに最小 CPU プラットフォームの設定が適用されます。
別の方法
GKE では、次の方法で最小 CPU プラットフォームを選択することもできます。
別の方法 | |
---|---|
クラスタレベルのフラグ
|
制限事項
最小 CPU プラットフォームを選択するすべての方法には、次の制限が適用されます。
- Compute Engine の最小 CPU プラットフォームの制限はすべて適用されます。
- 特定の CPU プラットフォームの可能性は、ゾーンによって異なります。
- E2 マシンタイプは、最小 CPU プラットフォームをサポートしていません。別のマシンタイプを選択する必要があります。
- Autopilot クラスタは、
Balanced
コンピューティング クラス用のプラットフォームの選択のみをサポートしています。デフォルトまたはScale-Out
コンピューティング クラスはサポートされていません。 - Autopilot ワークロードが 80 個を超える vCPU をリクエストする場合、最小 CPU プラットフォームは Intel Ice Lake 以降にする必要があります。高度でないプラットフォームを指定すると、Pod が無期限に
Pending
状態のままになる可能性があります。
クラスタまたはノードプールの最小 CPU プラットフォームの設定には、次の制限が適用されます。
最小 CPU プラットフォームとしてゾーン内のデフォルトの CPU プラットフォームよりも高度でないものを選択した場合、または選択したプラットフォームが使用できなくなった場合、GKE は同じ費用の新しいプラットフォームがあるかどうか確認します。同じ費用の新しいプラットフォームが存在する場合、GKE は新しいプラットフォームを使用してノードを作成します。同じに費用のプラットフォームが存在しない場合、クラスタまたはノードプールの作成は失敗します。
次のステップ
- 使用可能な CPU プラットフォームのリストを確認する。
- リージョンとゾーンについて詳細を確認する。
- ノードの詳細を学習する。