CPU 使用率の高いワークロードを最適なパフォーマンスで実行する


このページでは、各 Pod を独自のノードに配置し、ノードのすべてのリソースに完全にアクセスできるように Google Kubernetes Engine(GKE)に指示することで、CPU 使用率の高いワークロードを最適化してパフォーマンスを向上させる方法について説明します。この Pod 配置モデルを使用するには、Autopilot ワークロードで Performance コンピューティング クラスをリクエストします。

Performance コンピューティング クラスのメリット

基盤となる仮想マシン(VM)の機能にアクセスする必要がある CPU 使用率の高い大規模なワークロードを実行する場合、Pod ごとに専用のノードを用意するのが理想的です。このようなワークロードとしては、CPU 使用率の高い AI / ML トレーニング ワークロードや、ハイ パフォーマンス コンピューティング(HPC)バッチ ワークロードなどがあります。

これらの専用ノード上の Pod には次の利点があります。

  • 予測可能なパフォーマンス: すべてのノードリソースにいつでもアクセスできます。
  • バースト可能なワークロード: マニフェストでリソースの上限を設定しない場合、Kubernetes ノードが排除されるリスクを最小限に抑えながら、Performance クラスの Pod がノード上の未使用の容量を使用できるようになります。

Performance クラスの Pod の機能

次の特性を持つ Pod をデプロイします。

  • Performance クラスと Compute Engine マシンシリーズを選択します。
  • リソース リクエストを指定します。可能であれば、リソース上限は指定しません。

GKE は次の処理を行います。

  • デプロイされた Pod が少なくともコンピューティング クラスの最小リソースをリクエストするようにします。
  • デプロイされた Pod とクラスタ内の任意の DaemonSet のリソース リクエストの合計を計算します。
  • 選択したマシンシリーズを基盤とするノードをプロビジョニングします。
  • Pod が独自のノードで実行されるように、ノードセレクタと toleration 機能を組み合わせて Pod マニフェストを変更します。

他の GKE 機能との互換性

次の GKE の機能を持つ Performance クラスの Pod を使用できます。

Spot Pod と拡張ランタイム Pod は相互に排他的です。GKE では、ワークロードの分離を使用する Performance クラスの Pod に対して、リソース リクエストの最小数の引き上げはできません。

料金

Pod は、基盤となる VM 全体と接続されたハードウェアをいつでも使用できます。このハードウェアの料金は Compute Engine から請求され、Autopilot ノードの管理とスケーラビリティに対するプレミアム料金が発生します。詳細については、GKE の料金をご覧ください。

始める前に

始める前に、次の作業が完了していることを確認してください。

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得する。

クラスタに接続する

Google Cloud CLI を使用して Autopilot クラスタに接続します。

gcloud container clusters get-credentials CLUSTER_NAME \
    --location=LOCATION

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

Performance クラスの Pod をデプロイする

  1. 次のマニフェストを perf-class-pod.yaml として保存します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: performance-pod
    spec:
      nodeSelector:
        cloud.google.com/compute-class: Performance
        cloud.google.com/machine-family: MACHINE_SERIES
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 20
            memory: "100Gi"
    

    MACHINE_SERIES は、Pod の Compute Engine マシンシリーズ(c3 など)に置き換えます。サポートされている値については、このドキュメントのサポートされているマシンシリーズをご覧ください。

  2. Pod をデプロイします。

    kubectl apply -f perf-class-pod.yaml
    

Performance クラスの Pod でローカル SSD を使用する

ローカル SSD を含むマシンシリーズを選択した場合、Performance クラスの Pod ではローカル SSD をエフェメラル ストレージとして使用できます。GKE は、Performance クラスの Pod のノードをプロビジョニングするときに、エフェメラル ストレージ リクエストを考慮します。

  1. 次のマニフェストを perf-class-ssd-pod.yaml として保存します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: performance-pod
    spec:
      nodeSelector:
        cloud.google.com/compute-class: Performance
        cloud.google.com/machine-family: MACHINE_SERIES
        cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 12
            memory: "50Gi"
            ephemeral: "200Gi"
    

    MACHINE_SERIES は、ローカル SSD もサポートするサポート対象のマシンシリーズに置き換えます。指定したマシンシリーズがローカル SSD をサポートしていない場合、デプロイに失敗します。

  2. Pod をデプロイします。

    kubectl apply -f perf-class-pod.yaml
    

サポートされているマシンシリーズ

Performance コンピューティング クラスは、次のマシンシリーズをサポートしています。

これらのマシンシリーズとそのユースケースを比較するには、Compute Engine ドキュメントのマシンシリーズの比較をご覧ください。

GKE がマシンサイズを選択する方法

指定されたマシンシリーズのマシンサイズを選択するために、GKE は、Performance クラスの Pod と新しいノードで実行される DaemonSet の CPU、メモリ、エフェメラル ストレージのリクエストの合計数を計算します。GKE は、使用可能な Compute Engine マシンタイプの中で、この合計数をすべてサポートする最も近い値のマシンタイプを選択します。

  • 例 1: C3 マシンシリーズを選択する Performance クラスの Pod について考えてみましょう。DaemonSet を含むリソース リクエストの合計は次のとおりです。

    • 70 vCPU
    • 200 GiB のメモリ

    GKE は、88 個の vCPU と 352 GB のメモリを備えた c3-standard-88 マシンタイプを基盤とするノードに Pod を配置します。

  • 例 2: C3D マシンシリーズとエフェメラル ストレージとしてローカル SSD を使用する Performance クラスの Pod について考えてみましょう。DaemonSet を含むリソース リクエストの合計は次のとおりです。

    • 12 vCPU
    • 50 GiB のメモリ
    • 200 GiB のエフェメラル ストレージ

    GKE は、c3d-standard-16-lssd マシンタイプを使用するノードに Pod を配置します。このマシンタイプには、16 vCPU、64 GiB のメモリ、365 GiB のローカル SSD 容量があります。

次のステップ