このページでは、Google Kubernetes Engine(GKE)Autopilot クラスタでワークロード パフォーマンスを最適化するために、特定の Compute Engine マシンシリーズにワークロードを配置する方法について説明します。
次の内容を理解しておいてください。
- 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 のスケジューリング動作を選択します。
- 他の Pod とコンピューティング リソースを共有できる Pod がある場合や、専用ハードウェアで 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 マシンシリーズを選択する方法について説明します。
次のマニフェストを
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
など)に置き換えます。サポートされている値については、このページのサポートされているマシンシリーズをご覧ください。Pod をデプロイします。
kubectl apply -f machine-series-pod.yaml
このマニフェストにより、Autopilot は、使用可能な容量がある場合、同じマシンシリーズを選択する Pod を同じノードに効率的にスケジュールすることで、ノードのリソース使用量を最適化します。
ローカル SSD を使用する
ローカル SSD を提供するマシンシリーズを指定すると、マシンシリーズを選択する Pod でエフェメラル ストレージにローカル SSD を使用できます。Autopilot は、Pod の Compute Engine マシンタイプを選択するときに、エフェメラル ストレージ リクエストを考慮します。
次のマニフェストを
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 をサポートしていない場合、デプロイに失敗します。Pod をデプロイします。
kubectl apply -f local-ssd-pod.yaml
Pod 専用のノードをリクエストする
Pod に具体的なパフォーマンス要件がある場合(たとえば、すべてのノードリソースに対して信頼性の高いアクセスが必要な場合)、マシンシリーズ ノードセレクタと一緒に cloud.google.com/compute-class: Performance
ノードセレクタを指定して、Pod ごとに専用のノードをリクエストできます。これにより、指定されたマシンシリーズを使用し、その Pod 専用の新しいノードに Pod を配置するよう Autopilot に指示します。このノードセレクタを使用すると、Autopilot はそのノードで他の Pod をスケジュールできなくなります。
次のマニフェストを
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 スケジューリングをサポートしていない場合、デプロイはエラーで失敗します。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(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 容量があります。
次のステップ
- Autopilot がさまざまなユースケースに提供するコンピューティング オプションのガイダンスを確認する。Autopilot のコンピューティング クラスをご覧ください。
- Autopilot で GPU ベースのワークロードをデプロイする