コンテンツに移動
Containers & Kubernetes

ノードプール間での優先度に基づくスケジュール設定

2023年11月20日
Google Cloud Japan Team

※この投稿は米国時間 2023 年 11 月 4 日に、Google Cloud blog に投稿されたものの抄訳です。

Google Kubernetes Engine(GKE)は、市場の最先端を行くマネージド Kubernetes サービスです。GKE は現在、Google Cloud を使用する複数の組織で活用されています。さまざまな費用が増加するなか、お客様はクラウド費用の最適化に舵を切り始めています。プロダクトとサービスに最高水準の最適化手法を取り入れ、より優れた費用対効果で効率的にワークロードを実行する方法を模索しています。

GKE で費用を最適化するための方法は数多く存在し、低コストのコンピューティングを可能にする Spot VM でワークロードを実行するという手法もその一つです。Spot VM は、大幅な割引料金で提供されているアイドル サーバーマシンです。ノードプールを使用して複数のマシンタイプにワークロードをデプロイすることで、費用を削減できます。

このブログ投稿では、4 種類のノードプール(E2 標準、N2 標準、N2d 標準、N2 標準(Spot VM))を使用してワークロードをデプロイし、本番環境ワークロードの実行にかかる費用を削減する方法を説明します。

ノードプールの追加

以下のノードプールを含む標準的な GKE クラスタを作成します。これらのノードプールを GPU やその他の必要なマシンシェイプで置き換えることもできます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_GKE-Blog-Image1.max-1200x1200.jpg
https://storage.googleapis.com/gweb-cloudblog-publish/images/2_MKrWBTI.max-2000x2000.jpg

優先度クラスの定義

Pod には、他の Pod と比較した優先度を示す優先度クラスを割り当てることができます。Pod のスケジュールを設定できない場合、スケジューラは優先度の低い Pod をプリエンプト(強制排除)して空きを作ろうとします。

優先度クラスの定義を使用すると、必要なノードプールで優先度の低い Pod を強制排除できます。

ここで取り上げる例では、値が 10000 の低優先度のクラスと値が 1000000 の高優先度のクラスを定義しました。

priorityclass.yaml

読み込んでいます...

Deployment のノード アフィニティと優先度クラス

ノードのラベルに基づいてノードで Pod がスケジュール設定されないよう制限するには、ノード アフィニティを使用します。ノード アフィニティには以下の 2 種類があります。

  • requiredDuringSchedulingIgnoredDuringExecution: ルールに合致しない限り、スケジューラは Pod をスケジュール設定できません。
  • preferredDuringSchedulingIgnoredDuringExecution: スケジューラは、このルールに合致するノードを特定しようとします。合致するノードがない場合は、スケジューラが引き続き Pod をスケジュール設定します。

2 つの Deployment を個別に作成します。以下の deployment-1 と deployment-2 は、それぞれ異なるノードプールのセットで実行されます。

設定に必要な Deployment ファイル

deployment-app1.yaml

読み込んでいます...

上の Deployment では、ノードプール 1、2、4 に Pod がデプロイされ、Spot VM の重みは 80 です。deployment-1 は低優先度クラスでデプロイされる点に注意してください。

deployment-app1.yaml のデプロイ後

読み込んでいます...

出力 1

deployment-app2.yaml

読み込んでいます...

deployment-2 では、ノードプール 1、3、4 に Pod がデプロイされ、Spot VM の重みは 80 です。高優先度クラスでデプロイされているため、プール 1 と 4 で実行されている Pod は強制排除されます。

deployment-app2.yaml のデプロイ後

読み込んでいます...

出力 2

2 番目の Deployment を実行したら、前述した 2 つの出力を比較してください。最初の Deployment で実行されている Pod が強制排除されていることがわかります。このようにノード アフィニティやノードプールといった機能を利用して複雑な本番環境ワークロードを実行し、Spot VM で費用を最適化することができます。

GPU マシンタイプでノートプールを作成すると ML ワークロードを実行できます。ここで説明した例は、GPU マシンでも問題なく機能します。優先度に基づくスケジュール設定は、状況に応じて優先度の高い GPU マシンを必要とする GKE のアクティブな ML ワークロードにも対応します。

まとめ

GKE を使用すると、プラットフォームのオーケストレーションによる最適化された AI ワークロードを実行できます。

最近リリースされた GKE エディションの詳細をご確認ください。これらのエディションは、組織の構成およびポリシー管理、フリート全体のネットワーキング機能、ID 管理、オブザーバビリティ、マイクロサービス ベースのアーキテクチャに対応しています。

ー Google Cloud、テクニカル アカウント マネージャー Sarun Singla

投稿先