最小 CPU プラットフォームを選択する


このページでは、Google Kubernetes Engine(GKE)クラスタ内のノードに最小 CPU プラットフォームを指定する方法について説明します。

最小 CPU プラットフォームを選択する理由

最小 CPU プラットフォームを指定すると、特定の CPU 機能と仕様(高い基本周波数や最適化された電力管理機能など)が必要な場合に役立ちます。

グラフィックス、ゲーム、分析などの分野における高度なコンピューティング負荷の高い一部のワークロードでは、さまざまな CPU プラットフォームの機能セット(AVX-2、AVX-512 など)により実現される機能の中から、個々のワークロードに適した機能を利用できます。特定の CPU プラットフォームを選択することで、実行時間が大幅に短縮され、パフォーマンスも大きく向上する可能性があります。最小 CPU プラットフォームを指定すると、より予測可能な方法でこのような利点をワークロードで活用できるだけでなく、ワークロードに適さない CPU プラットフォームをノードで決して使用しないようにすることもできます。

プラットフォームの選び方

次の表に、GKE の使用方法に基づいて最小 CPU プラットフォームを選択する方法を示します。

スコープ 説明 サポートされているクラスタ構成
ワークロードレベル(推奨)

Pod 仕様で最小プラットフォームを選択します。GKE はこれらの Pod を次のようにスケジューリングします。

  • Autopilot: GKE は、指定されたプラットフォーム以降のノードで Pod をスケジューリングします。
  • Standard: GKE は、指定されたプラットフォームのノードでのみ Pod をスケジュールします。たとえば、Intel Ice Lake ノードプールが存在し、新しい Pod が最小の Intel Cascade Lake をリクエストする場合、Intel Ice Lake の方がより高度なプラットフォームであるにもかかわらず、Intel Cascade Lake を使用して新しいノードプールが作成されます。

ノードレベルとクラスタレベル 新しい 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

ノードの自動プロビジョニングが有効になっている 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" など)。

コンソール

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

    Google Kubernetes Engine に移動

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

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

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

  5. ナビゲーション パネルで [ノード] をクリックします。

  6. [マシンの構成] の

  7. [シリーズ] プルダウン リストで [マシンタイプ ファミリー] を選択します。

  8. [マシンタイプ] プルダウン リストで [カスタム] を選択します。

  9. 必要に応じて [コア数] と [メモリ] を選択します。

  10. [ CPU プラットフォームと GPU] をクリックします。

  11. [CPU プラットフォーム] プルダウン リストで、目的のプラットフォームを選択します。

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

API

リクエスト本文の nodeConfig フィールドの一部に minCpuPlatform プロパティを含めます。minCpuPlatform の値は、プラットフォームの名前(Intel HaswellIntel BroadwellIntel 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 プラットフォームを選択することもできます。

別の方法

クラスタレベルのフラグ

--autoprovisioning-min-cpu-platform フラグ

制限事項

最小 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 は新しいプラットフォームを使用してノードを作成します。同じ費用のプラットフォームが存在しない場合、クラスタまたはノードプールの作成は失敗します。

次のステップ