マシンシリーズを選択して Autopilot Pod のパフォーマンスを最適化する


このドキュメントでは、Google Kubernetes Engine(GKE)Autopilot クラスタでワークロード パフォーマンスを最適化するために、特定の Compute Engine マシンシリーズにワークロードを配置する方法について説明します。

次の内容を理解しておいてください。

マシンシリーズの選択の仕組み

Autopilot が Pod に特定の Compute Engine ハードウェアを割り当てるように、Pod 仕様に cloud.google.com/machine-family ノードセレクタを追加できます。たとえば、CPU パワーを多く必要とする Pod には C3 マシンシリーズを選択し、メモリを多く必要とする Pod には N1 マシンシリーズを選択します。Autopilot は、選択したマシンシリーズから事前定義されたマシンタイプのいずれかをプロビジョニングして、ワークロードを最適に実行します。

特定のマシンシリーズを選択すると、Pod のパフォーマンスが最適化されるだけでなく、次のようなメリットがあります。

  • ノードの効率的な使用: デフォルトでは、Autopilot は、同じマシンシリーズをリクエストする Pod を各ノードにできるだけ多くスケジュールすることで、ノードのリソース使用量を最適化します。この方法により、ノードのリソース使用量が最適化され、価格対性能比が向上します。ワークロードがノード上のすべてのリソースにアクセスする必要がある場合は、必要に応じて、ノードごとに 1 つの Pod をリクエストするようにワークロードを構成できます。

  • バースト可能なワークロード: リソース上限をリクエストよりも高く設定することで、Pod がノード上の未使用のリソース容量にバーストするように構成できます。詳細については、GKE で Pod バーストを構成するをご覧ください。

Pod ごとに専用のノードをリクエストする

すべてのノードリソースに対して信頼できるアクセスが必要で、CPU 使用率の高いワークロードがある場合は、マシンシリーズをリクエストする Pod が独自のノードに配置されるように Pod を構成できます。

AI / ML トレーニング ワークロードやハイ パフォーマンス コンピューティング(HPC)バッチ ワークロードなど、CPU 使用率の高い大規模なワークロードを実行する場合は、Pod ごとに専用のノードを用意することをおすすめします。

複数 Pod と単一 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 を実行して最新のバージョンを取得する。
  • バージョン 1.30.1-gke.1396000 以降を実行している既存の Autopilot クラスタがあることを確認します。クラスタを作成する場合は、Autopilot クラスタの作成をご覧ください。

マシンシリーズを選択する

このセクションでは、Pod で特定の Compute Engine マシンシリーズを選択する方法について説明します。

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

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

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

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

    kubectl apply -f machine-series-pod.yaml
    

このマニフェストにより、Autopilot は、使用可能な容量がある場合、同じマシンシリーズを選択する Pod を同じノードに効率的にスケジュールすることで、ノードのリソース使用量を最適化します。

ローカル SSD を使用する

ローカル SSD を提供するマシンシリーズを指定すると、マシンシリーズを選択する Pod でエフェメラル ストレージにローカル SSD を使用できます。Autopilot は、Pod の Compute Engine マシンタイプを選択するときに、エフェメラル ストレージ リクエストを考慮します。

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

      apiVersion: v1
      kind: Pod
    metadata:
      name: local-ssd-pod
    spec:
      nodeSelector:
        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: 6
            memory: "25Gi"
            ephemeral: "100Gi"
          limits:
            cpu: 12
            memory: "50Gi"
            ephemeral: "200Gi"
    

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

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

    kubectl apply -f local-ssd-pod.yaml
    

Pod 専用のノードをリクエストする

Pod に具体的なパフォーマンス要件がある場合(たとえば、すべてのノードリソースに対して信頼性の高いアクセスが必要な場合)、マシンシリーズ ノードセレクタと一緒に cloud.google.com/compute-class: Performance ノードセレクタを指定して、Pod ごとに専用のノードをリクエストできます。これにより、指定されたマシンシリーズを使用し、その Pod 専用の新しいノードに Pod を配置するよう Autopilot に指示します。このノードセレクタを使用すると、Autopilot はそのノードで他の Pod をスケジュールできなくなります。

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

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

    MACHINE_SERIES は、ノードごとの Pod スケジューリングもサポートするサポート対象のマシンシリーズに置き換えます。指定されたマシンシリーズがノードごとの Pod スケジューリングをサポートしていない場合、デプロイはエラーで失敗します。

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

    kubectl apply -f dedicated-node-pod.yaml
    

このマニフェストをデプロイすると、Autopilot は次の処理を行います。

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

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

machine-family セレクタは、次のマシンシリーズをサポートしています。

(常にバンドル)

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

他の GKE 機能との互換性

次の GKE の機能を持つマシンシリーズを選択する Pod を使用できます。

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

GKE がマシンタイプを選択する方法

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

  • 例 1: C3D マシンシリーズを選択する 4 つのレプリカを持つ Deployment について考えてみましょう。Pod ごとに専用のノードをリクエストしません。各レプリカのリソース リクエストは次のとおりです。

    • 500m の vCPU
    • 1 GiB のメモリ

    Autopilot は、4 個の vCPU と 16 GB のメモリを備えた c3d-standard-4 マシンタイプを基盤とするノードにすべての Pod を配置します。

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

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

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

次のステップ