AI ワークロード


OpenShift Container Platform 4.20

OpenShift Container Platform での AI ワークロードの実行

概要

このドキュメントでは、OpenShift Container Platform クラスターで人工知能 (AI) ワークロードを実行する方法を説明します。大規模な AI トレーニングワークロードを、複数のノードにまたがって安定して実行する方法の詳細が記載されています。

第1章 OpenShift Container Platform 上の AI ワークロードの概要

OpenShift Container Platform は、トレーニング、推論、データサイエンスのワークフロー全体にわたり、人工知能 (AI) ワークロードを実行するためのセキュアでスケーラブルな基盤を提供します。

1.1. AI ワークロードを実行するための Operator

OpenShift Container Platform では、Operator を使用して人工知能 (AI) および機械学習 (ML) のワークロードを実行できます。Operator を使用すると、OpenShift Container Platform をアプリケーションのコアプラットフォームとして引き続き使用しながら、特定の AI/ML 要件に合わせてカスタマイズした環境を構築できます。

OpenShift Container Platform には、AI ワークロードの実行に役立つ Operator がいくつかあります。

Red Hat build of Kueue

Red Hat build of Kueue を使用すると、構造化されたキューと優先順位付けにより、ワークロードを公平かつ効率的に処理できます。適切な優先順位付けを行わないと、重要度の低いジョブがリソースを占有し、重要なジョブが遅延する可能性があります。

詳細は、「Red Hat build of Kueue の概要」を参照してください。

Leader Worker Set Operator

Leader Worker Set Operator を使用すると、リーダープロセスとワーカープロセス間の同期により、大規模な AI 推論ワークロードを複数のノードにまたがって安定して実行できるようになります。適切な連携がなければ、大規模なトレーニングの実行が失敗したり停止したりする可能性があります。

詳細は、「Leader Worker Set Operator の概要」を参照してください。

JobSet Operator (テクノロジープレビュー)

JobSet Operator を使用すると、高性能コンピューティング (HPC) や AI トレーニングなどの大規模で調整されたワークロードを簡単に管理および実行できます。JobSet Operator は、マルチテンプレートジョブのサポートや安定したネットワークなどの機能を通じて、迅速な回復と効率的なリソース使用を実現します。

詳細は、「JobSet Operator の概要」を参照してください。

第2章 Red Hat build of Kueue

2.1. Red Hat build of Kueue の概要

Red Hat build of Kueue は、ジョブのリソースへのアクセスを管理する Kubernetes ネイティブのシステムです。Red Hat build of Kueue は、ジョブを待機させるタイミング、Pod を作成してジョブの開始を許可するタイミング、ジョブを プリエンプト (そのジョブ用のアクティブな Pod を削除すること) すべきタイミングを決定できます。

注記

Red Hat build of Kueue のコンテキストでは、ジョブは、完了まで実行される 1 回限りのタスクまたはオンデマンドのタスクとして定義できます。

Red Hat build of Kueue は Kueue オープンソースプロジェクトをベースにしています。

Red Hat build of Kueue は、異種かつ弾力性のあるリソースを使用する環境に対応しています。つまり、さまざまなリソースタイプが存在し、それらのリソースが動的なスケーリングに対応している環境です。

Red Hat build of Kueue は、Kubernetes クラスター内の既存のコンポーネントを置き換えるのではなく、既存の Kubernetes API サーバー、スケジューラー、およびクラスターオートスケーラーコンポーネントと統合します。

Red Hat build of Kueue は、オールオアナッシング (all-or-nothing) のセマンティクスをサポートしています。つまり、ジョブ全体とそのすべてのコンポーネントがクラスターに受け入れられるか、ジョブがクラスターに適合しない場合はジョブ全体が拒否されます。

2.1.1. 想定ユーザー

Red Hat build of Kueue のワークフローには、さまざまな役割のユーザーが存在します。

バッチ管理者
バッチ管理者は、クラスターインフラストラクチャーを管理し、クォータおよびキューを確立します。
バッチユーザー
バッチユーザーはクラスターでジョブを実行します。バッチユーザーには、研究者、AI/ML エンジニア、またはデータサイエンティストなどがあります。
サービングユーザー
サービングユーザーは、クラスターでジョブを実行します。たとえば、推論用にトレーニングされた AI/ML モデルを公開するなどです。
プラットフォーム開発者
プラットフォーム開発者は、Red Hat build of Kueue を他のソフトウェアと統合します。また、Kueue オープンソースプロジェクトにも貢献する場合があります。

2.1.2. ワークフローの概要

Red Hat build of Kueue のワークフローは、次のように概説できます。

  1. バッチ管理者が ResourceFlavorLocalQueue、および ClusterQueue リソースを作成および設定します。
  2. ユーザーがクラスターでジョブを作成します。
  3. Kubernetes API サーバーがジョブデータを検証して受け入れます。
  4. Red Hat build of Kueue が、順序やクォータなどの設定されたオプションに基づいてジョブを許可します。リソースフレーバーを使用してジョブにアフィニティーを注入し、各ジョブに対応する Workload オブジェクトを作成します。
  5. ジョブタイプに応じた適切なコントローラーが Pod を作成します。
  6. Kubernetes スケジューラーが、クラスター内のノードに Pod を割り当てます。
  7. Kubernetes クラスターオートスケーラーが、必要に応じて追加のノードをプロビジョニングします。

2.2. リリースノート

Red Hat build of Kueue は、OpenShift Container Platform 上でサポートされる Operator としてリリースされています。

2.2.1. 互換性のある環境

Red Hat build of Kueue をインストールする前に、このセクションを参照して、クラスターが要件を満たしていることを確認してください。

2.2.1.1. サポートされているアーキテクチャー

バージョン 1.1 以降の Red Hat build of Kueue は、次のアーキテクチャーでサポートされています。

  • ARM64
  • 64-bit x86
  • ppc64le (IBM Power®)
  • s390x (IBM Z®)
2.2.1.2. サポートされているプラットフォーム

バージョン 1.1 以降の Red Hat build of Kueue は、次のプラットフォームでサポートされています。

  • OpenShift Container Platform
  • OpenShift Container Platform の Hosted Control Plane
重要

現在、Red Hat build of Kueue は、Red Hat build of MicroShift (MicroShift) ではサポートされていません。

2.2.2. Red Hat build of Kueue バージョン 1.3.1 のリリースノート

Red Hat build of Kueue バージョン 1.3.1 は一般提供版であり、OpenShift Container Platform バージョン 4.18 以降でサポートされています。Red Hat build of Kueue バージョン 1.3 は、Kueue バージョン 0.16.5 を使用しています。

2.2.2.1. 修正された問題
kueue.x-k8s.io/queue-name は存在しないキューを参照しています

kueue.x-k8s.io/queue-name を介して存在しない LocalQueue を 参照すると、実行中の Pod が終了し、削除できないスケジューリングゲートで永久に停止してしまうバグを修正しました。

(OCPBUGS-78789)

2.2.3. Red Hat build of Kueue バージョン 1.3 のリリースノート

Red Hat build of Kueue バージョン 1.3 は一般提供版であり、OpenShift Container Platform バージョン 4.18 以降でサポートされています。Red Hat build of Kueue バージョン 1.3 は、Kueue バージョン 0.16 を使用しています。

2.2.3.1. 新機能および機能拡張
Leader Worker Set Operator
Red Hat build of Kueue バージョン 1.3 では、Leader Worker Set Operator と Red Hat build of Kueue の統合が実現されているため、LeaderWorkerSet を実行する際に、Red Hat build of Kueue とリソース管理機能を活用できます。詳細は、Leader Worker Set Operator の統合を 参照してください。
JobSet Operator
Red Hat build of Kueue バージョン 1.3 では、JobSet Operator の統合が実現されており、JobSet Operator を使用して、高性能コンピューティング (HPC) や AI トレーニングなどの大規模で協調的なワークロードを管理および実行できます。詳細は、JobSet Operator の統合を 参照してください。
Red Hat build of Kueue API の v1beta2 へのアップストリーム開発

Red Hat build of Kueue バージョン 1.3 は、Red Hat build of Kueue API の v1beta2 バージョンを提供します。今回のアップデートは、Red Hat build of Kueue API の進化を継続するものであり、最終目標は API を v1 にアップグレードすることです。

アップグレード後に作成されるすべての新しい Kueue オブジェクトは、v1beta2 バージョンを使用して保存されます。以前のバージョンの API である v1beta1 は非推奨です。必要であれば、v1beta1 を使用してオブジェクトを作成することも可能です。このような場合、非推奨メッセージが表示されます。

ただし、既存のオブジェクトは、書き込みリクエスト時にのみ Kubernetes によって新しいストレージバージョンに自動的に変換されます。これは、トポロジー、リソースフレーバー、長時間実行されるワークロードなど、更新頻度の低い Red Hat build of Kueue API オブジェクトは、古い v1beta1 形式のまま無期限に残る可能性があることを意味します。

2.2.3.2. 修正された問題
オプトインされた名前空間内のジョブのみを調整します

OpenShift Container Platform は、kueue.x-k8s.io/ queue-name ラベルを持つ ジョブ リソースのリコンシリエーションを可能にしました。これらのリソースは、OpenShift Container Platform による管理をオプトインするように設定されていない名前空間にある場合でも調整可能です。今回のリリースでは、キュー名ラベルを持つジョブも、その名前空間が managedJobsNamespaceSelector と一致しない限り無視されるように、この動作を更新するアップストリーム作業が進行中です。この変更により、Red Hat build of Kueue の動作がすべての統合において一貫性を持つようになります。

(OCPBUGS-58205)

OpenShift Container Platform Web コンソールで Kueue CR の説明に "Not available" と表示される

Red Hat build of Kueue をインストールした後、Operator の詳細 ビューで、Kueue CR の説明が利用不可と表示されます。この問題は、Red Hat build of Kueue オペレーターの機能に影響を与えたり、機能を低下させたりすることはありませんでした。今回のリリースにより、利用できませんというメッセージは表示されなくなりました。

(OCPBUGS-62185)

LeaderWorkset および Jobset の検証エラー

現在、Leader Worker Set Operator とジョブセット Operator は、オペランド CR が更新され、Kueue 階層全体 (ResourceFlavor、ClusterQueue、および LocalQueue) が確立された後にのみ検証されます。設定エラーは、LeaderWorkerSet または JobSet テンプレートを適用した場合にのみ発生します。

(OCPBUGS-74210)

2.2.3.3. 既知の問題
LeaderWorkerSet Pod はデフォルトでは順次更新されます

Red Hat build of Kueue インストールに Leader Worker Set Operator を統合していて、LeaderWorkerSet Pod の更新にロールアウトストラテジーオプションを使用している場合は、OpenShift Container Platform の MaxUnavailable フィーチャーゲートがデフォルトで無効になっていることに注意してください。

LeaderWorkerSetPod に変更が加えられると、ローリングアップデートがトリガーされます。この処理では、デプロイメント内の古い Pod を新しい Pod に徐々に置き換え、ダウンタイムを回避するためにできるだけ多くの Pod を稼働状態に保ちます。OpenShift Container Platform のデフォルト設定である MaxUnavailable が無効になっている場合、Pod は一度に 1 つずつ更新されます。

アップデートを順次実行するのではなく、並行して実行したい場合は、MaxUnavailable フィーチャーゲートを有効にする必要があります。詳細は、インストール時の機能セットの有効化 および 展開ストラテジー を参照してください。

2.2.4. Red Hat build of Kueue バージョン 1.2 のリリースノート

Red Hat build of Kueue バージョン 1.2 は一般提供版であり、OpenShift Container Platform バージョン 4.18 以降でサポートされています。Red Hat build of Kueue バージョン 1.2 は、Kueue バージョン 0.14 を使用しています。

2.2.4.1. 新機能および機能拡張
保留中のワークロードの監視
Red Hat build of Kueue バージョン 1.2 では、クラスターキューとローカルキュー内の保留中のジョブのパイプラインを監視し、ジョブの開始時期をユーザーが予測できるようにする VisibilityOnDemand 機能が提供されています。詳細は、保留中のワークロードの監視を 参照してください。
2.2.4.2. 修正された問題
Red Hat build of Kueue をアンインストールしても、カスタムリソースが適切に削除されない

OpenShift Container Platform Web コンソールで [ このオペレーターのすべてのオペランドインスタンスを削除] オプションを使用して Red Hat ビルドの Kueue Operator をアンインストールした後、Red Hat build of Kueue カスタムリソースの削除が試みられました。今回のリリースでは、それらは削除対象とはみなされません。

(OCPBUGS-62254)

Red Hat build of Kueue の以前のバージョンにおけるドキュメントの誤り

Kueue カスタムリソースの作成 において、オプションのワークロードタイプである PodデプロイメントStatefulSet は省略されました。それらは現在含まれています。

(OCPBUGS-62877)

Red Hat build of Kueue メトリクスは、バージョン 1.1 以降、Prometheus に公開されていませんでした。

ServiceMonitor と RBAC リソースは Operator のインストール時に正常に作成されたにもかかわらず、Prometheus は Operator のコントローラーからメトリクスを収集していませんでした。その結果、Kueue のメトリクスはどれもクラスターモニタリングスタックで利用できませんでした。

インストール時に追加されたメトリクスサービスの設定に誤ったポート参照が使用されていたため、Prometheus が Kueue エンドポイントからメトリクスを収集できずに失敗した。ポート名が正しいポート名に更新されました。

(OCPBUGS-63441)

2.2.4.3. 既知の問題
オプトインされた名前空間内のジョブのみを調整します

OpenShift Container Platform では、kueue.x-k8s.io/ queue-name ラベルを持つ ジョブ リソースのリコンシリエーションが可能です。これらのリソースが、OpenShift Container Platform による管理をオプトインするように設定されていない名前空間にある場合でも調整が可能です。これは、Pod、デプロイメント、ステートフルセットなどの他のコア統合の動作とは矛盾しています。これらの統合は、kueue.openshift.io/ managed=true を追加して OpenShift Container Platform による管理をオプトインするように設定された名前空間にある場合にのみ調整されます。

(OCPBUGS-58205)

OpenShift Container Platform Web コンソールで Kueue CR の説明に "Not available" と表示される

Red Hat build of Kueue をインストールした後、Operator の詳細 ビューで、Kueue CR の説明が利用不可と表示されます。この問題は、Red Hat build of Kueue Operator の機能に影響を与えるものでも、その機能を低下させるものでもありません。

(OCPBUGS-62185)

2.2.5. Red Hat build of Kueue バージョン 1.1 のリリースノート

Red Hat build of Kueue バージョン 1.1 は、OpenShift Container Platform バージョン 4.18 以降でサポートされている一般提供リリースです。Red Hat build of Kueue バージョン 1.1 では、Kueue バージョン 0.12 が使用されます。

重要

クラスターに以前にインストールしたバージョンの Red Hat build of Kueue がある場合は、Operator をアンインストールし、バージョン 1.1 を手動でインストールする必要があります。詳細は、Red Hat build of Kueue のアップグレード を参照してください。

2.2.5.1. 新機能および機能拡張
デフォルトのローカルキューの設定

デフォルトのローカルキューは、kueue.x-k8s.io/queue-name ラベルを持たない新しく作成されたジョブのローカルキューとして機能します。デフォルトのローカルキューを作成してから、kueue.x-k8s.io/queue-name ラベルのない namespace に新しいジョブを作成すると、そのジョブが更新されて自動的に kueue.x-k8s.io/queue-name: default ラベルが付与されます。

(RFE-7615)

マルチアーキテクチャーと Hosted Control Plane のサポート

このリリースでは、Red Hat build of Kueue は、ARM64、64 ビット x86、ppc64le (IBM Power®)、s390x (IBM Z®) などの複数の異なるアーキテクチャー、および OpenShift Container Platform の Hosted Control Plane でサポートされるようになりました。

(OCPSTRAT-2103)

(OCPSTRAT-2106)

2.2.5.2. 修正された問題
OpenShift Container Platform Web コンソールを使用して、Kueue カスタムリソースを作成できます。

この更新前は、OpenShift Container Platform Web コンソールを使用してフォームビューで Kueue カスタムリソース (CR) を作成しようとすると、Web コンソールにエラーが表示され、リソースを作成できませんでした。このリリースでは、Kueue CR テンプレートからデフォルトの namespace が削除されました。その結果、OpenShift Container Platform Web コンソールを使用して、フォームビューで Kueue CR を作成できるようになりました。

(OCPBUGS-58118)

2.2.5.3. 既知の問題
OpenShift Container Platform Web コンソールで Kueue CR の説明に "Not available" と表示される

Red Hat build of Kueue をインストールすると、Operator details ビューで、Kueue CR の説明に "Not available" と表示されます。この問題は、Red Hat build of Kueue Operator の機能に影響を与えるものでも、その機能を低下させるものでもありません。

(OCPBUGS-62185)

Red Hat build of Kueue をアンインストールしても、カスタムリソースが適切に削除されない

OpenShift Container Platform Web コンソールで Delete all operand instances for this operator オプションを使用して Red Hat Build of Kueue Operator をアンインストールしても、一部の Red Hat build of Kueue のカスタムリソースが完全に削除されません。これらのリソースは、Installed Operators ビューに Resource is being deleted というステータスとともに表示されます。回避策として、リソースのファイナライザーを手動で削除すると、完全に削除できます。

(OCPBUGS-62254)

2.2.6. Red Hat build of Kueue バージョン 1.0.1 のリリースノート

Red Hat build of Kueue バージョン 1.0.1 は、64 ビット x86 アーキテクチャー上の OpenShift Container Platform バージョン 4.18 および 4.19 でサポートされているパッチリリースです。

Red Hat build of Kueue バージョン 1.0.1 では、Kueue バージョン 0.11 が使用されます。

2.2.6.1. Red Hat build of Kueue バージョン 1.0.1 のバグ修正
  • 以前は、Red Hat build of Kueue のリーダー選出が中断を許容するように設定されていなかったため、頻繁にクラッシュが発生していました。このリリースでは、Red Hat build of Kueue のリーダー選出の値が、OpenShift Container Platform の推奨期間と一致するように更新されました。(OCPBUGS-58496)
  • 以前は、ReadyReplicas の数がリコンサイラーに設定されていなかったため、Red Hat build of Kueue Operator のステータスで準備完了状態のレプリカが存在しないと報告されていました。このリリースでは、ReadyReplicas の数がデプロイメントの準備完了レプリカの数に基づいているため、kueue-controller-manager Pod の準備が完了すると、OpenShift Container Platform コンソールで Operator が準備完了として表示されます。(OCPBUGS-59261)
  • 以前は、Kueue カスタムリソース (CR) が openshift-kueue-operator namespace から削除されても、kueue-manager-config config map は自動的に削除されず、その namespace に残る可能性がありました。このリリースでは、Kueue CR が削除されると、kueue-manager-config config map、kueue-webhook-server-cert シークレット、および metrics-server-cert シークレットが自動的に削除されます。(OCPBUGS-57960)

2.2.7. Red Hat build of Kueue バージョン 1.0 のリリースノート

Red Hat build of Kueue バージョン 1.0 は、64 ビット x86 アーキテクチャー上の OpenShift Container Platform バージョン 4.18 および 4.19 でサポートされている一般提供リリースです。Red Hat build of Kueue バージョン 1.0 では、Kueue バージョン 0.11 が使用されます。

2.2.7.1. 新機能および機能拡張
ロールベースアクセス制御 (RBAC)
ロールベースアクセス制御 (RBAC) を使用すると、どのタイプのユーザーがどのタイプの Red Hat build of Kueue リソースを作成できるかを制御できます。
リソースクォータの設定
クラスターキュー、リソースフレーバー、およびローカルキューを作成してリソースクォータを設定すると、ユーザーが送信したジョブとワークロードで使用されるリソースの量を制御できます。
ジョブおよびワークロード管理の制御
namespace にラベルを付け、ラベルポリシーを設定すると、Red Hat build of Kueue によって管理されるジョブとワークロードを制御できます。
キュー間での借用可能なリソースの共有
コホート、フェアシェアリング、ギャングスケジューリングの設定を行うと、未使用の借用可能なリソースをキュー間で共有できるようになります。
2.2.7.2. 既知の問題
ジョブが kueue.x-k8s.io/queue-name ラベルを持っている場合、そのジョブが属する namespace にかかわらずリコンサイルされる

Red Hat build of Kueue は managedJobsNamespaceSelector 設定フィールドを使用します。そのため、管理者はどの namespace を Red Hat build of Kueue で管理するかを設定できます。namespace は、Red Hat build of Kueue で管理するように手動で設定する必要があります。そのため、システムまたはサードパーティーの namespace 内のリソースは、Red Hat build of Kueue によって影響を受けず、管理されません。

Red Hat build of Kueue 1.0 の動作では、kueue.x-k8s.io/queue-name ラベルを持つ Job リソースが、Red Hat build of Kueue による管理をオプトインするように設定されていない namespace に存在する場合でも、そのリソースのリコンシリエーションが許可されます。これは、Pod、デプロイメント、ステートフルセットなど、他の主要な連携機能の動作と一貫性がありません。これらのリソースは、Red Hat build of Kueue による管理をオプトインするように設定された namespace 内にある場合にのみリコンサイルされます。

(OCPBUGS-58205)

OpenShift Container Platform Web コンソールを使用して Kueue カスタムリソースを作成できない

OpenShift Container Platform Web コンソールを使用してフォームビューで Kueue カスタムリソース (CR) を作成しようとすると、Web コンソールにエラーが表示され、リソースを作成できません。回避策として、代わりに YAML ビューを使用して Kueue CR を作成します。

(OCPBUGS-58118)

2.3. Red Hat build of Kueue のインストール

OperatorHub の Red Hat Build of Kueue Operator を使用して、Red Hat Build of Kueue をインストールできます。

2.3.1. 互換性のある環境

Red Hat build of Kueue をインストールする前に、このセクションを参照して、クラスターが要件を満たしていることを確認してください。

2.3.1.1. サポートされているアーキテクチャー

バージョン 1.1 以降の Red Hat build of Kueue は、次のアーキテクチャーでサポートされています。

  • ARM64
  • 64-bit x86
  • ppc64le (IBM Power®)
  • s390x (IBM Z®)
2.3.1.2. サポートされているプラットフォーム

バージョン 1.1 以降の Red Hat build of Kueue は、次のプラットフォームでサポートされています。

  • OpenShift Container Platform
  • OpenShift Container Platform の Hosted Control Plane
重要

現在、Red Hat build of Kueue は、Red Hat build of MicroShift (MicroShift) ではサポートされていません。

2.3.2. Red Hat Build of Kueue Operator のインストール

Web コンソールで OperatorHub を使用して、Red Hat build of Kueue Operator を OpenShift Container Platform クラスターにインストールできます。

前提条件

  • OpenShift Container Platform クラスターの管理者権限を持っている。
  • OpenShift Container Platform Web コンソールにアクセスできる。
  • クラスターに cert-manager Operator for Red Hat OpenShift をインストールして設定した。

手順

  1. OpenShift Container Platform Web コンソールで、OperatorsOperatorHub をクリックします。
  2. 利用可能な Operator の一覧から Red Hat Build of Kueue Operator を選択し、Install をクリックします。
  3. Enable Operator recommended cluster monitoring on this Namespace を選択します。

    このオプションは、namespace オブジェクトに openshift.io/cluster-monitoring: "true" ラベルを設定します。クラスター監視が openshift-kueue-operator 名前空間を確実にスクレイピングするには、このオプションを選択する必要があります。

  4. Install をクリックします。

    注記

    または、YAML を使用して Namespace オブジェクトを作成する場合は、openshift.io/cluster-monitoring: "true" ラベルを含めるようにしてください。

    +

    apiVersion: v1
    kind: Namespace
    metadata:
      labels:
        openshift.io/cluster-monitoring: "true"
      name: openshift-kueue-operator

検証

  • OperatorsInstalled Operators に移動し、Red Hat Build of Kueue OperatorStatusSucceeded と表示されていることを確認します。

2.3.3. Red Hat build of Kueue のアップグレード

以前に Red Hat build of Kueue をインストールしたことがある場合、最新のバグ修正と機能拡張を使用するには、デプロイメントを手動で最新バージョンにアップグレードする必要があります。

前提条件

  • 以前のバージョンの Red Hat build of Kueue がインストールされている。
  • クラスター管理者の権限で OpenShift Container Platform Web コンソールにログインしている。

手順

  1. OpenShift Container Platform Web コンソールで、OperatorsInstalled Operator をクリックし、リストから Red Hat build of Kueue を選択します。
  2. Actions ドロップダウンメニューから、Uninstall Operator を選択します。
  3. Uninstall Operator? ダイアログボックスが開きます。Uninstall をクリックします。

    重要

    Uninstall をクリックする前に Delete all operand instances for this operator チェックボックスをオンにすると、次の既存のリソースを含むすべてのリソースがクラスターから削除されます。

    • Kueue CR
    • 作成したクラスターキュー、ローカルキュー、またはリソースフレーバー

    クラスターをアップグレードする際に作成したリソースを保持するには、このボックスをオフのままにしておきます。

  4. OpenShift Container Platform Web コンソールで、OperatorsOperatorHub をクリックします。
  5. 利用可能な Operator の一覧から Red Hat Build of Kueue Operator を選択し、Install をクリックします。

検証

  1. OperatorsInstalled Operators に移動します。
  2. Red Hat Build of Kueue OperatorStatusSucceeded と表示されていることを確認します。
  3. リスト内の Operator 名の下に表示されているバージョンが最新バージョンであることを確認します。

2.3.4. Kueue カスタムリソースの作成

Red Hat Build of Kueue Operator をインストールした後、インストールを設定するために Kueue カスタムリソース (CR) を作成する必要があります。

前提条件

以下の前提条件を満たしていることを確認します。

  • Red Hat build of Kueue Operator がクラスターにインストールされている。
  • クラスター管理者権限および kueue-batch-admin-role ロールがある。
  • OpenShift Container Platform Web コンソールにアクセスできる。

手順

  1. OpenShift Container Platform Web コンソールで、OperatorsInstalled Operators をクリックします。
  2. Provided APIs テーブル列で、Kueue をクリックします。これにより、Operator details ページの Kueue タブに移動します。
  3. Create Kueue をクリックします。これにより、Create Kueue YAML ビューに移動します。
  4. Kueue CR の詳細を入力します。

    Kueue CR の例

    apiVersion: kueue.openshift.io/v1
    kind: Kueue
    metadata:
      labels:
        app.kubernetes.io/name: kueue-operator
        app.kubernetes.io/managed-by: kustomize
      name: cluster 
    1
    
      namespace: openshift-kueue-operator
    spec:
      managementState: Managed
      config:
        integrations:
          frameworks: 
    2
    
          - BatchJob
        preemption:
          preemptionPolicy: Classical 
    3
    
    # ...

    1
    Kueue CR の名前は cluster である必要があります。
    2
    他のワークロードタイプで使用するために Red Hat build of Kueue を設定する場合は、ここにそのタイプを追加します。デフォルト設定は BatchJob です。その他のタイプとしては、PodデプロイメントStatefulSet があります。
    3
    オプション: Red Hat build of Kueue にフェアシェアリングを設定する場合は、preemptionPolicy 値を FairSharing に設定します。Kueue CR のデフォルト設定は Classical プリエンプションです。
  5. Create をクリックします。

検証

  • Kueue CR を作成すると、Web コンソールに Operator details ページが表示され、Kueues のリストに CR が表示されます。
  • オプション: OpenShift CLI (oc) がインストールされている場合は、次のコマンドを実行し、出力を確認して Kueue CR が正常に作成されたことを確認できます。

    $ oc get kueue

    出力例

    NAME      	AGE
    cluster   	4m

2.3.5. Red Hat build of Kueue がジョブを管理できるように namespace にラベルを付ける

Red Hat build of Kueue Operator は、対象とするジョブと namespace に対してのみポリシーが適用されるように、オプトイン Webhook メカニズムを使用します。

Red Hat build of Kueue でジョブを管理する namespace には、kueue.openshift.io/managed=true ラベルを付ける必要があります。

前提条件

  • クラスター管理者の権限がある。
  • Red Hat build of Kueue Operator がクラスターにインストールされ、Kueue カスタムリソース (CR) が作成されている。
  • OpenShift CLI (oc) がインストールされている。

手順

  • 以下のコマンドを実行して、kueue.openshift.io/managed=true ラベルを namespace に追加します。

    $ oc label namespace <namespace> kueue.openshift.io/managed=true

このラベルを追加すると、その namespace を Webhook アドミッションコントローラーによって管理するよう Red Hat build of Kueue Operator に指示することになります。その結果、その namespace 内の Red Hat build of Kueue リソースが適切に検証され、変更されるようになります。

2.4. 非接続環境での Red Hat build of Kueue のインストール

非接続の OpenShift Container Platform クラスターに Red Hat build of Kueue をインストールする前に、次の手順を実行して、非接続環境で Operator Lifecycle Manager (OLM) を有効にする必要があります。

  • OLM のデフォルトのリモート OperatorHub ソースを無効にします。
  • 完全なインターネットアクセスのあるワークステーションを使用して、OperatorHub コンテンツのローカルミラーを作成し、これをミラーレジストリーにプッシュします。
  • OLM を、デフォルトのリモートソースからではなくミラーレジストリーのローカルソースから Operator をインストールし、管理するように設定します。

非接続環境で OLM を有効にしたら、アクセス制限のないワークステーションを引き続き使用して、新しいバージョンの Operator のリリース時にローカルの OperatorHub ソースを継続的に更新できます。

これらの手順を完了するための詳細なドキュメントは、非接続環境での Operator Lifecycle Manager の使用 に関する OpenShift Container Platform ドキュメントを参照してください。

2.4.1. 互換性のある環境

Red Hat build of Kueue をインストールする前に、このセクションを参照して、クラスターが要件を満たしていることを確認してください。

2.4.1.1. サポートされているアーキテクチャー

バージョン 1.1 以降の Red Hat build of Kueue は、次のアーキテクチャーでサポートされています。

  • ARM64
  • 64-bit x86
  • ppc64le (IBM Power®)
  • s390x (IBM Z®)
2.4.1.2. サポートされているプラットフォーム

バージョン 1.1 以降の Red Hat build of Kueue は、次のプラットフォームでサポートされています。

  • OpenShift Container Platform
  • OpenShift Container Platform の Hosted Control Plane
重要

現在、Red Hat build of Kueue は、Red Hat build of MicroShift (MicroShift) ではサポートされていません。

2.4.2. Red Hat Build of Kueue Operator のインストール

Web コンソールで OperatorHub を使用して、Red Hat build of Kueue Operator を OpenShift Container Platform クラスターにインストールできます。

前提条件

  • OpenShift Container Platform クラスターの管理者権限を持っている。
  • OpenShift Container Platform Web コンソールにアクセスできる。
  • クラスターに cert-manager Operator for Red Hat OpenShift をインストールして設定した。

手順

  1. OpenShift Container Platform Web コンソールで、OperatorsOperatorHub をクリックします。
  2. 利用可能な Operator の一覧から Red Hat Build of Kueue Operator を選択し、Install をクリックします。
  3. Enable Operator recommended cluster monitoring on this Namespace を選択します。

    このオプションは、namespace オブジェクトに openshift.io/cluster-monitoring: "true" ラベルを設定します。クラスター監視が openshift-kueue-operator 名前空間を確実にスクレイピングするには、このオプションを選択する必要があります。

  4. Install をクリックします。

    注記

    または、YAML を使用して Namespace オブジェクトを作成する場合は、openshift.io/cluster-monitoring: "true" ラベルを含めるようにしてください。

    +

    apiVersion: v1
    kind: Namespace
    metadata:
      labels:
        openshift.io/cluster-monitoring: "true"
      name: openshift-kueue-operator

検証

  • OperatorsInstalled Operators に移動し、Red Hat Build of Kueue OperatorStatusSucceeded と表示されていることを確認します。

2.4.3. Red Hat build of Kueue のアップグレード

以前に Red Hat build of Kueue をインストールしたことがある場合、最新のバグ修正と機能拡張を使用するには、デプロイメントを手動で最新バージョンにアップグレードする必要があります。

前提条件

  • 以前のバージョンの Red Hat build of Kueue がインストールされている。
  • クラスター管理者の権限で OpenShift Container Platform Web コンソールにログインしている。

手順

  1. OpenShift Container Platform Web コンソールで、OperatorsInstalled Operator をクリックし、リストから Red Hat build of Kueue を選択します。
  2. Actions ドロップダウンメニューから、Uninstall Operator を選択します。
  3. Uninstall Operator? ダイアログボックスが開きます。Uninstall をクリックします。

    重要

    Uninstall をクリックする前に Delete all operand instances for this operator チェックボックスをオンにすると、次の既存のリソースを含むすべてのリソースがクラスターから削除されます。

    • Kueue CR
    • 作成したクラスターキュー、ローカルキュー、またはリソースフレーバー

    クラスターをアップグレードする際に作成したリソースを保持するには、このボックスをオフのままにしておきます。

  4. OpenShift Container Platform Web コンソールで、OperatorsOperatorHub をクリックします。
  5. 利用可能な Operator の一覧から Red Hat Build of Kueue Operator を選択し、Install をクリックします。

検証

  1. OperatorsInstalled Operators に移動します。
  2. Red Hat Build of Kueue OperatorStatusSucceeded と表示されていることを確認します。
  3. リスト内の Operator 名の下に表示されているバージョンが最新バージョンであることを確認します。

2.4.4. Kueue カスタムリソースの作成

Red Hat Build of Kueue Operator をインストールした後、インストールを設定するために Kueue カスタムリソース (CR) を作成する必要があります。

前提条件

以下の前提条件を満たしていることを確認します。

  • Red Hat build of Kueue Operator がクラスターにインストールされている。
  • クラスター管理者権限および kueue-batch-admin-role ロールがある。
  • OpenShift Container Platform Web コンソールにアクセスできる。

手順

  1. OpenShift Container Platform Web コンソールで、OperatorsInstalled Operators をクリックします。
  2. Provided APIs テーブル列で、Kueue をクリックします。これにより、Operator details ページの Kueue タブに移動します。
  3. Create Kueue をクリックします。これにより、Create Kueue YAML ビューに移動します。
  4. Kueue CR の詳細を入力します。

    Kueue CR の例

    apiVersion: kueue.openshift.io/v1
    kind: Kueue
    metadata:
      labels:
        app.kubernetes.io/name: kueue-operator
        app.kubernetes.io/managed-by: kustomize
      name: cluster 
    1
    
      namespace: openshift-kueue-operator
    spec:
      managementState: Managed
      config:
        integrations:
          frameworks: 
    2
    
          - BatchJob
        preemption:
          preemptionPolicy: Classical 
    3
    
    # ...

    1
    Kueue CR の名前は cluster である必要があります。
    2
    他のワークロードタイプで使用するために Red Hat build of Kueue を設定する場合は、ここにそのタイプを追加します。デフォルト設定は BatchJob です。その他のタイプとしては、PodデプロイメントStatefulSet があります。
    3
    オプション: Red Hat build of Kueue にフェアシェアリングを設定する場合は、preemptionPolicy 値を FairSharing に設定します。Kueue CR のデフォルト設定は Classical プリエンプションです。
  5. Create をクリックします。

検証

  • Kueue CR を作成すると、Web コンソールに Operator details ページが表示され、Kueues のリストに CR が表示されます。
  • オプション: OpenShift CLI (oc) がインストールされている場合は、次のコマンドを実行し、出力を確認して Kueue CR が正常に作成されたことを確認できます。

    $ oc get kueue

    出力例

    NAME      	AGE
    cluster   	4m

2.4.5. Red Hat build of Kueue がジョブを管理できるように namespace にラベルを付ける

Red Hat build of Kueue Operator は、対象とするジョブと namespace に対してのみポリシーが適用されるように、オプトイン Webhook メカニズムを使用します。

Red Hat build of Kueue でジョブを管理する namespace には、kueue.openshift.io/managed=true ラベルを付ける必要があります。

前提条件

  • クラスター管理者の権限がある。
  • Red Hat build of Kueue Operator がクラスターにインストールされ、Kueue カスタムリソース (CR) が作成されている。
  • OpenShift CLI (oc) がインストールされている。

手順

  • 以下のコマンドを実行して、kueue.openshift.io/managed=true ラベルを namespace に追加します。

    $ oc label namespace <namespace> kueue.openshift.io/managed=true

このラベルを追加すると、その namespace を Webhook アドミッションコントローラーによって管理するよう Red Hat build of Kueue Operator に指示することになります。その結果、その namespace 内の Red Hat build of Kueue リソースが適切に検証され、変更されるようになります。

2.5. Leader Worker Set Operator の統合

Leader Worker Set Operator を Red Hat build of Kueue と統合することで、LeaderWorkerSets を実行する際にスケジューリング機能とリソース管理機能を活用できます。

Leader Worker Set Operator を使用すると、マルチノードの AI/ML 推論デプロイメントを効率的に管理できます。Red Hat build of Kueue は、これらのデプロイメントのためのスケジューリングおよびリソース管理機能を提供します。LeaderWorkerSet API を実行して、Pod のグループをレプリケーション単位としてデプロイする際に、これらの機能を活用できるように Leader Worker Set Operator を設定できます。

2.5.1. Red Hat build of Kueue を使用して Leader Worker Set Operator をインストールする

Red Hat build of Kueue を Leader Worker Set Operator と連携するように設定できます。

前提条件

  • ソフトウェアカタログにある Red Hat ビルドの Kueue Operator を使用して、Red Hat build of Kueue をインストールしました。
  • ソフトウェアカタログから、Leader Worker Set Operator と Operand をインストールしました。
  • クラスター管理者権限および kueue-batch-admin-role ロールがある。
  • OpenShift Container Platform Web コンソールにアクセスできる。
  • クラスターに cert-manager Operator for Red Hat OpenShift をインストールしました。

手順

  • 次の例に示すように、Red Hat build of Kueue クラスターオブジェクトの config.integrations.framework セクションに LeaderWorkerSet を 追加します。

    apiVersion: kueue.openshift.io/v1
    kind: Kueue
    metadata:
      labels:
        app.kubernetes.io/name: kueue-operator
        app.kubernetes.io/managed-by: kustomize
      name: cluster
      namespace: openshift-kueue-operator
    spec:
      managementState: Managed
      config:
        integrations:
          frameworks:
          - BatchJob
          - LeaderWorkerSet

2.5.2. Red Hat ビルドの Kueue で Leader Worker Set Operator を実行する

Leader Worker Set Operator は、既存のフレームワークに追加して実行できます。

前提条件

  • Red Hat build of Kueue Operator を使用して、Red Hat Build の Kueue がインストールされます。
  • Leader Worker Set Operator と Operand がインストールされています。
  • cert-manager Operator for Red Hat OpenShift がインストールされている。
  • LeaderWorkerSet が作成される 名前空間 には、kueue.openshift.io/managed=true を使用してラベルが付けられます。
  • 以下のオブジェクトが設定されていることを確認してください。

    • クラスターキュー
    • リソースフレーバー
    • ローカルキュー
    • Namespace

手順

  1. leaderworkerset.yaml という名前のファイルを作成します。

    LeaderWorkerSet の例

    apiVersion: leaderworkerset.x-k8s.io/v1
    kind: LeaderWorkerSet
    metadata:
      generation: 1
      name: my-lws
      namespace: my-namespace
    spec:
      leaderWorkerTemplate:
        leaderTemplate:
          metadata: {}
          spec:
            containers:
            - image: nginxinc/nginx-unprivileged:1.27
              name: leader
              resources: {}
        restartPolicy: RecreateGroupOnPodRestart
        size: 3
        workerTemplate:
          metadata: {}
          spec:
            containers:
            - image: nginxinc/nginx-unprivileged:1.27
              name: worker
              ports:
              - containerPort: 8080
                protocol: TCP
              resources: {}
      networkConfig:
        subdomainPolicy: Shared
      replicas: 2
      rolloutStrategy:
        rollingUpdateConfiguration:
          maxSurge: 1
          maxUnavailable: 1
        type: RollingUpdate
      startupPolicy: LeaderCreated

  2. LeaderWorkerSet 設定の metadata.labels セクションで、ターゲットとなるローカルキューを指定してください。

    metadata:
      labels:
        kueue.x-k8s.io/queue-name: user-queue
  3. 次のコマンドを実行して、リーダーワーカーセットの設定を適用します。

    $ oc apply -f leaderworkerset.yaml

2.6. JobSetOperator の統合

JobSet Operator を Red Hat build of Kueue と統合することで、JobSet Operator の実行時に、Red Hat build of Kueue が提供するスケジューリング機能とリソース管理機能を活用できます。

JobSet Operator を使用すると、高性能コンピューティング (HPC) や AI トレーニングなどの大規模で協調的なワークロードを管理および実行できます。

JobSet Operator は、分散バッチワークロードを Kubernetes ジョブのグループとしてモデル化します。これにより、リーダー、ワーカー、パラメーターサーバーなど、異なる Pod のグループごとに異なる Pod テンプレートを簡単に指定できます。

2.6.1. Red Hat build of Kueue を使用して JobSet Operator をインストールする

Red Hat build of Kueue を JobSet オペレーターと連携するように設定できます。

前提条件

  • ソフトウェアカタログにある Red Hat ビルドの Kueue Operator を使用して、Red Hat build of Kueue をインストールしました。
  • ソフトウェアカタログから JobSet Operator をインストールしました。
  • クラスター管理者権限および kueue-batch-admin-role ロールがある。
  • OpenShift Container Platform Web コンソールにアクセスできる。
  • クラスターに cert-manager Operator for Red Hat OpenShift をインストールしました。

手順

  • 次の例に示すように、Red Hat build of Kueue クラスターオブジェクトの config.integrations.frameworks セクションに JobSet を 追加します。

    apiVersion: kueue.openshift.io/v1
    kind: Kueue
    metadata:
      name: cluster
      namespace: openshift-kueue-operator
    spec:
      managementState: Managed
      config:
        integrations:
          frameworks:
          - JobSet

2.6.2. Red Hat build of Kueue を使用して JobSet Operator を実行する

JobSet Operator は、既存のフレームワークに追加して実行できます。

前提条件

  • Red Hat build of Kueue Operator を使用して、Red Hat Build の Kueue がインストールされます。
  • JobSet Operator がインストールされています。
  • cert-manager Operator for Red Hat OpenShift がインストールされている。
  • JobSet が作成される 名前 空間には、kueue.openshift.io/managed= true というラベルが付けられます。
  • 以下のオブジェクトが設定されていることを確認してください。

    • クラスターキュー
    • リソースフレーバー
    • ローカルキュー
    • Namespace

手順

  1. jobset.yaml という名前のファイルを作成します。

    ジョブセット の例

    apiVersion: jobset.x-k8s.io/v1alpha2
    kind: JobSet
    metadata:
      name: jobset
      namespace: my-namespace
    spec:
      replicatedJobs:
        - name: workers
          replicas: 1
          template:
            spec:
              parallelism: 3
              completions: 3
              backoffLimit: 1
              template:
                spec:
                  containers:
                    - name: sleep
                      image: busybox
                      resources:
                        requests:
                          cpu: 200m
                          memory: "200Mi"
                      command:
                        - sleep
                      args:
                        - 220s
        - name: driver
          template:
            spec:
              parallelism: 1
              completions: 1
              backoffLimit: 0
              template:
                spec:
                  containers:
                    - name: sleep
                      image: busybox
                      resources:
                        requests:
                          cpu: 200m
                          memory: "200Mi"
                      command:
                        - sleep
                      args:
                        - 220s

  2. JobSet 設定の metadata.labels セクションで、ターゲットとなるローカルキューを指定してください。

    metadata:
      labels:
        kueue.x-k8s.io/queue-name: <local-queue-name>
  3. 以下のコマンドを実行して、JobSet の設定を適用してください。

    $ oc apply -f jobset.yaml

2.7. ロールベースの権限の設定

以下の手順では、Red Hat build of Kueue デプロイメントでロールベースアクセス制御 (RBAC) を設定する方法を説明します。これらの RBAC 権限によって、どのタイプのユーザーがどのタイプの Red Hat build of Kueue オブジェクトを作成できるかが決まります。

2.7.1. クラスターロール

Red Hat build of Kueue Operator は、デフォルトで kueue-batch-admin-role および kueue-batch-user-role クラスターロールをデプロイします。

kueue-batch-admin-role
このクラスターロールには、クラスターキュー、ローカルキュー、ワークロード、およびリソースフレーバーを管理する権限が含まれます。
kueue-batch-user-role
このクラスターロールには、ジョブを管理し、ローカルキューとワークロードを表示する権限が含まれます。

2.7.2. バッチ管理者の権限の設定

kueue-batch-admin-role クラスターロールをユーザーまたはユーザーグループにバインドすることで、バッチ管理者の権限を設定できます。

前提条件

  • Red Hat build of Kueue Operator がクラスターにインストールされている。
  • クラスター管理者の権限がある。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. ClusterRoleBinding オブジェクトを YAML ファイルとして作成します。

    ClusterRoleBinding オブジェクトの例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: kueue-admins 
    1
    
    subjects: 
    2
    
    - kind: User
      name: admin@example.com
      apiGroup: rbac.authorization.k8s.io
    roleRef: 
    3
    
      kind: ClusterRole
      name: kueue-batch-admin-role
      apiGroup: rbac.authorization.k8s.io

    1
    ClusterRoleBinding オブジェクトの名前を指定します。
    2
    ユーザー権限を付与するユーザーまたはユーザーグループに関する詳細を追加します。
    3
    kueue-batch-admin-role クラスターロールに関する詳細を追加します。
  2. ClusterRoleBinding オブジェクトを適用します。

    $ oc apply -f <filename>.yaml

検証

  • 次のコマンドを実行し、出力に kueue-batch-admin-role クラスターロールの正しい情報が含まれていることを確認し、ClusterRoleBinding オブジェクトが正しく適用されたことを確認できます。

    $ oc describe clusterrolebinding.rbac

    出力例

    ...
    Name:         kueue-batch-admin-role
    Labels:       app.kubernetes.io/name=kueue
    Annotations:  <none>
    Role:
      Kind:  ClusterRole
      Name:  kueue-batch-admin-role
    Subjects:
      Kind            Name                      Namespace
      ----            ----                      ---------
      User            admin@example.com         admin-namespace
    ...

2.7.3. ユーザー権限の設定

kueue-batch-user-role クラスターロールをユーザーまたはユーザーグループにバインドすることで、Red Hat build of Kueue ユーザーの権限を設定できます。

前提条件

  • Red Hat build of Kueue Operator がクラスターにインストールされている。
  • クラスター管理者の権限がある。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. RoleBinding オブジェクトを YAML ファイルとして作成します。

    ClusterRoleBinding オブジェクトの例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: kueue-users 
    1
    
      namespace: user-namespace 
    2
    
    subjects: 
    3
    
    - kind: Group
      name: team-a@example.com
      apiGroup: rbac.authorization.k8s.io
    roleRef: 
    4
    
      kind: ClusterRole
      name: kueue-batch-user-role
      apiGroup: rbac.authorization.k8s.io

    1
    RoleBinding オブジェクトの名前を指定します。
    2
    RoleBinding オブジェクトが適用される namespace に関する詳細を追加します。
    3
    ユーザー権限を付与するユーザーまたはユーザーグループに関する詳細を追加します。
    4
    kueue-batch-user-role クラスターロールに関する詳細を追加します。
  2. RoleBinding オブジェクトを適用します。

    $ oc apply -f <filename>.yaml

検証

  • 次のコマンドを実行し、出力に kueue-batch-user-role クラスターロールの正しい情報が含まれていることを確認し、RoleBinding オブジェクトが正しく適用されたことを確認できます。

    $ oc describe rolebinding.rbac

    出力例

    ...
    Name:         kueue-users
    Labels:       app.kubernetes.io/name=kueue
    Annotations:  <none>
    Role:
      Kind:  ClusterRole
      Name:  kueue-batch-user-role
    Subjects:
      Kind            Name                      Namespace
      ----            ----                      ---------
      Group           team-a@example.com        user-namespace
    ...

2.8. クォータの設定

管理者は、Red Hat build of Kueue を使用してクォータを設定し、ユーザーワークロードのリソース割り当てとシステムスループットを最適化できます。CPU、メモリー、Pod、GPU などのコンピュートリソースのクォータを設定できます。

以下の手順を実行すると、Red Hat build of Kueue でクォータを設定できます。

  1. クラスターキューを設定します。
  2. リソースフレーバーを設定します。
  3. ローカルキューを設定します。

その後、ユーザーはワークロードをローカルキューに送信できます。

2.8.1. クラスターキューの設定

クラスターキューは、ClusterQueue オブジェクトによって表されるクラスタースコープのリソースであり、CPU、メモリー、Pod などのリソースプールを管理します。クラスターキューを使用すると、使用制限、リソースフレーバーのクォータ、消費順序、フェアシェアリングルールを定義できます。

注記

ResourceFlavor オブジェクトも設定されるまで、クラスターキューは使用可能になりません。

前提条件

  • Red Hat build of Kueue Operator がクラスターにインストールされている。
  • クラスター管理者権限または kueue-batch-admin-role ロールがある。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. ClusterQueue オブジェクトを YAML ファイルとして作成します。

    単一のリソースフレーバーを使用した基本的な ClusterQueue オブジェクトの例

    apiVersion: kueue.x-k8s.io/v1beta2
    kind: ClusterQueue
    metadata:
      name: cluster-queue
    spec:
      namespaceSelector: {} 
    1
    
      resourceGroups:
      - coveredResources: ["cpu", "memory", "pods", "foo.com/gpu"] 
    2
    
        flavors:
        - name: "default-flavor" 
    3
    
          resources: 
    4
    
          - name: "cpu"
            nominalQuota: 9
          - name: "memory"
            nominalQuota: 36Gi
          - name: "pods"
            nominalQuota: 5
          - name: "foo.com/gpu"
            nominalQuota: 100

    1
    このクラスターキューが管理するリソースを使用できる namespace を定義します。例に示すように、空の namespaceSelector は、すべての namespace がこれらのリソースを使用できることを意味します。
    2
    クラスターキューによって管理されるリソースタイプを定義します。この例では、ClusterQueue オブジェクトは CPU、メモリー、Pod、および GPU リソースを管理します。
    3
    リストされているリソースタイプに適用されるリソースフレーバーを定義します。この例では、default-flavor リソースフレーバーが CPU、メモリー、Pod、および GPU リソースに適用されます。
    4
    ジョブを許可するリソース要件を定義します。このサンプルクラスターキューは、次の条件が満たされた場合にのみジョブを許可します。
    • CPU 要求の合計は 9 以下です。
    • メモリー要求の合計は 36Gi 以下です。
    • Pod の合計数は 5 以下です。
    • GPU リクエストの合計は 100 以下です。
  2. 次のコマンドを実行して、ClusterQueue オブジェクトを適用します。

    $ oc apply -f <filename>.yaml

次のステップ

ResourceFlavor オブジェクト も設定されるまで、クラスターキューは使用可能になりません。

2.8.2. リソースフレーバーの設定

ClusterQueue オブジェクトを設定したら、ResourceFlavor オブジェクトを設定できます。

クラスター内のリソースは通常、同種ではありません。クラスター内のリソースが同種である場合は、カスタムリソースフレーバーにラベルを追加する代わりに、空の ResourceFlavor を使用できます。

カスタム ResourceFlavor オブジェクトを使用すると、ラベル、taint、および toleration を通じてクラスターノードに関連付けられているさまざまなリソースのバリエーションを表すことができます。その後、ワークロードを特定のノードタイプに関連付けて、きめ細かなリソース管理が可能になります。

前提条件

  • Red Hat build of Kueue Operator がクラスターにインストールされている。
  • クラスター管理者権限または kueue-batch-admin-role ロールがある。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. ResourceFlavor オブジェクトを YAML ファイルとして作成します。

    空の ResourceFlavor オブジェクトの例

    apiVersion: kueue.x-k8s.io/v1beta2
    kind: ResourceFlavor
    metadata:
      name: default-flavor

    カスタム ResourceFlavor オブジェクトの例

    apiVersion: kueue.x-k8s.io/v1beta2
    kind: ResourceFlavor
    metadata:
      name: "x86"
    spec:
      nodeLabels:
        cpu-arch: x86

  2. 以下のコマンドを実行して ResourceFlavor オブジェクトを適用します。

    $ oc apply -f <filename>.yaml

2.8.3. ローカルキューの設定

ローカルキューは、LocalQueue オブジェクトによって表される namespace オブジェクトであり、単一の namespace に属する密接に関連するワークロードをグループ化します。

管理者は、LocalQueue オブジェクトをクラスターキューを指すように設定できます。これにより、クラスターキューのリソースが、LocalQueue オブジェクトで指定された namespace 内のワークロードに割り当てられます。

前提条件

  • Red Hat build of Kueue Operator がクラスターにインストールされている。
  • クラスター管理者権限または kueue-batch-admin-role ロールがある。
  • OpenShift CLI (oc) がインストールされている。
  • ClusterQueue オブジェクトを作成している。

手順

  1. LocalQueue オブジェクトを YAML ファイルとして作成します。

    基本的な LocalQueue オブジェクトの例

    apiVersion: kueue.x-k8s.io/v1beta2
    kind: LocalQueue
    metadata:
      namespace: team-namespace
      name: user-queue
    spec:
      clusterQueue: cluster-queue

  2. 次のコマンドを実行して、LocalQueue オブジェクトを適用します。

    $ oc apply -f <filename>.yaml

2.8.4. デフォルトのローカルキューの設定

クラスター管理者は、各ジョブに明示的にラベルを付けることなく、選択した namespace 内のすべてのジョブを管理することで、クラスター内のクォータの適用を改善できます。これは、デフォルトのローカルキューを作成することで実行できます。

デフォルトのローカルキューは、kueue.x-k8s.io/queue-name ラベルを持たない新しく作成されたジョブのローカルキューとして機能します。デフォルトのローカルキューを作成してから、kueue.x-k8s.io/queue-name ラベルのない namespace に新しいジョブを作成すると、そのジョブが更新されて自動的に kueue.x-k8s.io/queue-name: default ラベルが付与されます。

重要

デフォルトのローカルキューを作成しても、namespace 内の既存のジョブは影響を受けません。デフォルトのローカルキューを作成する前に、namespace にジョブがすでに存在する場合は、そのジョブに明示的にラベルを付けてキューに割り当てる必要があります。

前提条件

  • クラスターに Red Hat build of Kueue バージョン 1.1 がインストールされている。
  • クラスター管理者権限または kueue-batch-admin-role ロールがある。
  • OpenShift CLI (oc) がインストールされている。
  • ClusterQueue オブジェクトを作成している。

手順

  1. default という名前の LocalQueue オブジェクトを YAML ファイルとして作成します。

    デフォルトの LocalQueue オブジェクトの例

    apiVersion: kueue.x-k8s.io/v1beta2
    kind: LocalQueue
    metadata:
      namespace: team-namespace
      name: default
    spec:
      clusterQueue: cluster-queue

  2. 次のコマンドを実行して、LocalQueue オブジェクトを適用します。

    $ oc apply -f <filename>.yaml

検証

  1. デフォルトのローカルキューと同じ namespace にジョブを作成します。
  2. ジョブが kueue.x-k8s.io/queue-name: default ラベルで更新されることを確認します。

2.9. ジョブおよびワークロードの管理

Red Hat build of Kueue は、ユーザーが作成したジョブを直接操作しません。代わりに、Kueue はジョブのリソース要件を表す Workload オブジェクトを管理します。Red Hat build of Kueue は、各ジョブのワークロードを自動的に作成し、2 つのオブジェクト間の決定とステータスを同期します。

2.9.1. Red Hat build of Kueue がジョブを管理できるように namespace にラベルを付ける

Red Hat build of Kueue Operator は、対象とするジョブと namespace に対してのみポリシーが適用されるように、オプトイン Webhook メカニズムを使用します。

Red Hat build of Kueue でジョブを管理する namespace には、kueue.openshift.io/managed=true ラベルを付ける必要があります。

前提条件

  • クラスター管理者の権限がある。
  • Red Hat build of Kueue Operator がクラスターにインストールされ、Kueue カスタムリソース (CR) が作成されている。
  • OpenShift CLI (oc) がインストールされている。

手順

  • 以下のコマンドを実行して、kueue.openshift.io/managed=true ラベルを namespace に追加します。

    $ oc label namespace <namespace> kueue.openshift.io/managed=true

このラベルを追加すると、その namespace を Webhook アドミッションコントローラーによって管理するよう Red Hat build of Kueue Operator に指示することになります。その結果、その namespace 内の Red Hat build of Kueue リソースが適切に検証され、変更されるようになります。

2.9.2. ジョブのラベルポリシーの設定

Kueue カスタムリソース (CR) の spec.config.workloadManagement.labelPolicy 仕様は、Red Hat build of Kueue がさまざまなジョブを管理するか無視するかを決定する方法を制御する省略可能なフィールドです。使用できる値は QueueNameNone、および空 ("") です。

labelPolicy 設定が省略されているか、空 ("") の場合、デフォルトのポリシーとして、Red Hat build of Kueue は kueue.x-k8s.io/queue-name ラベルを持つジョブを管理し、kueue.x-k8s.io/queue-name ラベルを持たないジョブを無視します。これは、labelPolicyQueueName に設定されている場合と同じワークフローです。

labelPolicy 設定が None に設定されている場合、ジョブは kueue.x-k8s.io/queue-name ラベルがなくても、Red Hat build of Kueue によって管理されます。

workloadManagement 仕様設定の例

apiVersion: kueue.openshift.io/v1
kind: Kueue
metadata:
  labels:
    app.kubernetes.io/name: kueue-operator
    app.kubernetes.io/managed-by: kustomize
  name: cluster
  namespace: openshift-kueue-operator
spec:
  config:
    workloadManagement:
      labelPolicy: QueueName
# ...

kueue.x-k8s.io/queue-name ラベルを含むユーザー作成の Job オブジェクトの例

apiVersion: batch/v1
kind: Job
metadata:
  generateName: sample-job-
  namespace: my-namespace
  labels:
    kueue.x-k8s.io/queue-name: user-queue
spec:
# ...

2.10. 保留中のワークロードを監視する

Red Hat build of Kueue は、保留中のワークロードを監視するための VisibilityOnDemand 機能を提供します。ワークロードとは、実行が完了してから終了するアプリケーションのことです。それは、1 つまたは複数の Pod で設定され、それらが緩やかに、あるいは密接に結合することで、全体としてタスクを完了する。ワークロードは、Red Hat build of Kueue における受け入れ単位です。

VisibilityOnDemand 機能は、バッチ管理者がクラスターキューとローカルキュー内の保留中のジョブのパイプラインを監視できる機能と、バッチユーザーがローカルキューのみを監視できる機能を提供し、ユーザーがジョブの開始時期を予測するのに役立ちます。

受信リクエストやリクエスト量の多さを制御したり、保留中のワークロードを表示するためのユーザー権限を設定したりできます。

2.10.1. API の優先順位と公平性

Red Hat build of Kueue は、Kubernetes API の優先度と公平性 (APF) を利用して、保留中のワークロードを管理します。APF は、API サーバーへの受信リクエストを制御するための API レベルのポリシーを定義できるフロー制御メカニズムです。これは、API サーバーが予期せぬ高リクエスト量によって過負荷状態になるのを防ぐと同時に、重要なトラフィックがベストエフォート型のワークロードに対するスロットリング効果を受けないように保護します。

2.10.2. ユーザー権限の付与

Red Hat build of Kueue デプロイメントのユーザーに対して、ロールベースアクセス制御 (RBAC) オブジェクトを設定できます。これらのオブジェクトは、どのタイプのユーザーがどのタイプの Red Hat build of Kueue オブジェクトを作成できるかを決定します。

特定の API へのアクセスを必要とするユーザーには、適切な権限を付与する必要があります。

  • ユーザーが ClusterQueue リソースからの保留中のワークロードにアクセスする必要がある場合は、ClusterRole kueue-batch-admin-role を参照する ClusterRoleBinding スキーマを作成する必要があります。
  • ユーザーが LocalQueue リソースからの保留中のワークロードにアクセスする必要がある場合は、ClusterRole kueue-batch-user-role を参照する RoleBinding スキーマを作成する必要があります。

2.10.3. オンデマンドで保留中のワークロードを監視する

保留中のワークロードの監視をテストするには、ClusterQueueLocalQueue の 両方のリソースを正しく設定する必要があります。その後、その ローカルキュー にジョブを作成できます。Kueue はジョブから作成されたワークロードオブジェクトを管理するため、ジョブが送信されて クラスターキューが 飽和状態になると、対応するワークロードが保留中のワークロードのリストに表示されます。

前提条件

  • クラスター管理者の権限がある。
  • Red Hat build of Kueue Operator がクラスターにインストールされ、Kueue カスタムリソース (CR) が作成されている。
  • OpenShift CLI (oc) がインストールされている。
  • OpenShift CLI (oc) は、クラスターと通信します。

以下の手順では、ワークロード監視のインストール方法とテスト方法について説明します。

手順

  1. 以下のコマンドを実行してアセットを作成します。

    cat <<EOF| oc create -f -
    ---
    apiVersion: kueue.x-k8s.io/v1beta2
    kind: ResourceFlavor
    metadata:
      name: "default-flavor"
    ---
    apiVersion: kueue.x-k8s.io/v1beta2
    kind: ClusterQueue
    metadata:
      name: "cluster-queue"
    spec:
      namespaceSelector: {} # match all.
      resourceGroups:
      - coveredResources: ["cpu", "memory"]
        flavors:
        - name: "default-flavor"
          resources:
          - name: "cpu"
            nominalQuota: 9
          - name: "memory"
            nominalQuota: 36Gi
    ---
    apiVersion: kueue.x-k8s.io/v1beta2
    kind: LocalQueue
    metadata:
      namespace: "default"
      name: "user-queue"
    spec:
      clusterQueue: "cluster-queue"
    ---
    EOF
  2. ジョブマニフェストを含む以下のファイルを作成してください。

    cat >> job.yaml << EOF
    apiVersion: batch/v1
    kind: Job
    metadata:
      generateName: sample-job-
      namespace: default
      labels:
        kueue.x-k8s.io/queue-name: user-queue
    spec:
      parallelism: 3
      completions: 3
      suspend: true
      template:
        spec:
          containers:
          - name: <example-job>
            image: registry.k8s.io/e2e-test-images/agnhost:2.53
            command: [ "/bin/sh" ]
            args: [ "-c", "sleep 60" ]
            resources:
              requests:
                cpu: "1"
                memory: "200Mi"
          restartPolicy: Never
    EOF
  3. 以下のコマンドを実行して、Kueue が管理するデフォルトの名前空間にラベルを付けます。

    $ oc label namespace default kueue.openshift.io/managed=true
  4. 以下のコマンドを実行して、6 つのジョブを作成します。

    for i in {1..6}; do oc create -f job.yaml; done

    この例では、3 つのジョブが ClusterQueue リソースを飽和させており、残りの 3 つのジョブは保留状態になっているはずです。

2.10.3.1. ClusterQueue で保留中のワークロードを表示する

クラスターレベルで保留中のすべてのワークロードを表示するには、管理者は Kueue の可視化 API の ClusterQueue オブジェクト可視化エンドポイントを使用できます。このエンドポイントは、現在その ClusterQueue リソースによる承認を待っているすべてのワークロードのリストを返します。

手順

  1. ClusterQueue で保留中のワークロードを表示するには、次のコマンドを実行します。

    $ oc get --raw "/apis/visibility.kueue.x-k8s.io/v1beta2/clusterqueues/cluster-queue/pendingworkloads"

    出力例

    {
      "kind": "PendingWorkloadsSummary",
      "apiVersion": "visibility.kueue.x-k8s.io/v1beta2",
      "metadata": {
        "creationTimestamp": null
      },
      "items": [
        {
          "metadata": {
            "name": "job-sample-job-jrjfr-8d56e",
            "namespace": "default",
            "creationTimestamp": "2023-12-05T15:42:03Z",
            "ownerReferences": [
              {
                "apiVersion": "batch/v1",
                "kind": "Job",
                "name": "sample-job-jrjfr",
                "uid": "5863cf0e-b0e7-43bf-a445-f41fa1abedfa"
              }
            ]
          },
          "priority": 0,
          "localQueueName": "user-queue",
          "positionInClusterQueue": 0,
          "positionInLocalQueue": 0
        },
        {
          "metadata": {
            "name": "job-sample-job-jg9dw-5f1a3",
            "namespace": "default",
            "creationTimestamp": "2023-12-05T15:42:03Z",
            "ownerReferences": [
              {
                "apiVersion": "batch/v1",
                "kind": "Job",
                "name": "sample-job-jg9dw",
                "uid": "fd5d1796-f61d-402f-a4c8-cbda646e2676"
              }
            ]
          },
          "priority": 0,
          "localQueueName": "user-queue",
          "positionInClusterQueue": 1,
          "positionInLocalQueue": 1
        },
        {
          "metadata": {
            "name": "job-sample-job-t9b8m-4e770",
            "namespace": "default",
            "creationTimestamp": "2023-12-05T15:42:03Z",
            "ownerReferences": [
              {
                "apiVersion": "batch/v1",
                "kind": "Job",
                "name": "sample-job-t9b8m",
                "uid": "64c26c73-6334-4d13-a1a8-38d99196baa5"
              }
            ]
          },
          "priority": 0,
          "localQueueName": "user-queue",
          "positionInClusterQueue": 2,
          "positionInLocalQueue": 2
        }
      ]
    }

    以下のオプションのクエリーパラメーターを渡すことができます。

    制限値 < 整数 >
    デフォルト値は 1000 です。取得すべき保留中のワークロードの最大数を指定します。
    オフセット < 整数 >
    0 がデフォルト値です。0 から始まる、最初に取得すべき保留中のワークロードの位置を指定します。
  2. ClusterQueue 内の位置 0 から始まる保留中のワークロードを 1 つだけ表示するには、次のコマンドを実行します。

    $ oc get --raw "/apis/visibility.kueue.x-k8s.io/v1beta2/clusterqueues/cluster-queue/pendingworkloads?limit=1&offset=0"
2.10.3.2. LocalQueue で保留中のワークロードを表示する

ユーザーは、特定のテナントがその名前空間内で送信した保留中のワークロードを表示するには、Kueue の可視性 API の LocalQueue リソース可視性エンドポイントにクエリーを実行できます。これにより、そのキューで待機しているジョブの順序付きリストが提供されます。

手順

  1. LocalQueue で保留中のワークロードを表示するには、次のコマンドを実行します。

    $ oc get --raw /apis/visibility.kueue.x-k8s.io/v1beta2/namespaces/default/localqueues/user-queue/pendingworkloads

    出力例

    {
      "kind": "PendingWorkloadsSummary",
      "apiVersion": "visibility.kueue.x-k8s.io/v1beta2",
      "metadata": {
        "creationTimestamp": null
      },
      "items": [
        {
          "metadata": {
            "name": "job-sample-job-jrjfr-8d56e",
            "namespace": "default",
            "creationTimestamp": "2023-12-05T15:42:03Z",
            "ownerReferences": [
              {
                "apiVersion": "batch/v1",
                "kind": "Job",
                "name": "sample-job-jrjfr",
                "uid": "5863cf0e-b0e7-43bf-a445-f41fa1abedfa"
              }
            ]
          },
          "priority": 0,
          "localQueueName": "user-queue",
          "positionInClusterQueue": 0,
          "positionInLocalQueue": 0
        },
        {
          "metadata": {
            "name": "job-sample-job-jg9dw-5f1a3",
            "namespace": "default",
            "creationTimestamp": "2023-12-05T15:42:03Z",
            "ownerReferences": [
              {
                "apiVersion": "batch/v1",
                "kind": "Job",
                "name": "sample-job-jg9dw",
                "uid": "fd5d1796-f61d-402f-a4c8-cbda646e2676"
              }
            ]
          },
          "priority": 0,
          "localQueueName": "user-queue",
          "positionInClusterQueue": 1,
          "positionInLocalQueue": 1
        },
        {
          "metadata": {
            "name": "job-sample-job-t9b8m-4e770",
            "namespace": "default",
            "creationTimestamp": "2023-12-05T15:42:03Z",
            "ownerReferences": [
              {
                "apiVersion": "batch/v1",
                "kind": "Job",
                "name": "sample-job-t9b8m",
                "uid": "64c26c73-6334-4d13-a1a8-38d99196baa5"
              }
            ]
          },
          "priority": 0,
          "localQueueName": "user-queue",
          "positionInClusterQueue": 2,
          "positionInLocalQueue": 2
        }
      ]
    }

    以下のオプションのクエリーパラメーターを渡すことができます。

    制限値 < 整数 >
    デフォルト値は 1000 です。取得すべき保留中のワークロードの最大数を指定します。
    オフセット < 整数 >
    0 がデフォルト値です。0 から始まる、最初に取得すべき保留中のワークロードの位置を指定します。
  2. LocalQueue 内の位置 0 から始まる保留中のワークロードを 1 つだけ表示するには、次のコマンドを実行します。

    $ oc get --raw "/apis/visibility.kueue.x-k8s.io/v1beta2/namespaces/default/localqueues/user-queue/pendingworkloads?limit=1&offset=0"

2.10.4. 監視設定の変更

組織の要件に合わせて監視設定を変更し、ユーザーが保留中のワークロードにタイムリーかつ確実にアクセスして表示できるようにしてください。

この手順では、Red Hat build of Kueue VisibilityOnDemand 機能のリソースフロー制御を変更する方法について説明します。変更内容は、求人情報に関する同時リクエストを処理するシステムの能力に直接影響を与えます。

手順

  1. 次のコマンドを実行して、KueueVisibilityOnDemandPriorityLevelConfiguration アセットを編集します。

    $ oc edit prioritylevelconfiguration kueue-visibility
  2. PriorityLevelConfiguration アセットの nominalConcurrencyShares フィールドを、kueue.openshift.io/allow- nominal-concurrency-shares-update の値を true に設定して変更します。

    nominalConcurrencyShares に指定できる値は 、0、2 ( デフォルト値) から 5 までです。許容されない値 (値 1 または 5 より大きい値) を指定した場合、デフォルト値の 2 が適用されます。

    以下の例を参照してください。

    apiVersion: flowcontrol.apiserver.k8s.io/v1
    kind: PriorityLevelConfiguration
    metadata:
      name: kueue-visibility
      annotations:
        kueue.openshift.io/allow-nominal-concurrency-shares-update: "false"
    spec:
      limited:
        borrowingLimitPercent: 0
        lendablePercent: 90
        limitResponse:
          queuing:
            handSize: 4
            queueLengthLimit: 50
            queues: 16
          type: Queue
        nominalConcurrencyShares: 2
      type: Limited

    kueue.openshift.io/allow-nominal-concurrency-shares-update のデフォルト値は false です。nominalConcurrencyShares の値を 2 以外の値に変更する場合は、まず kueue.openshift.io/allow-nominal-concurrency-shares-update の値を true に変更する必要があります。そうしないと、nominalConcurrencyShares に割り当てた値は有効になりません。

  3. 以下のコマンドを実行して、値が保持されていることを確認してください。

    $ oc get prioritylevelconfiguration kueue-visibility

2.11. コホートの使用

コホートを使用すると、クラスターキューをグループ化し、どのクラスターキューがリソースを相互に共有できるかを定義できます。共有可能リソースとは、コホート内のすべてのクラスターキューに割り当てられた未使用の公称クォータとして定義されます。

コホートを使用すると、リソース不足を防ぎ、フェアシェアリングの設定を有効にすることで、リソースの使用率を最適化できます。コホートを使用すると、関連するワークロードまたは各チームのクラスターキューをグループ化できるため、チーム間のリソース管理と割り当てを簡素化することもできます。また、コホートを使用してグループレベルでリソースクォータを設定し、クラスターキューのグループが消費できるリソースの制限を定義することもできます。

2.11.1. クラスターキュー仕様内でのコホートの設定

次の例に示すように、ClusterQueue オブジェクトの .spec.cohortName フィールドにコホート名を指定することで、クラスターキューをコホートに追加できます。

apiVersion: kueue.x-k8s.io/v1beta2
kind: ClusterQueue
metadata:
  name: cluster-queue
spec:
# ...
  cohortName: example-cohort
# ...

spec.cohortName が一致するすべてのクラスターキューは、同じコホートに属します。

spec.cohortName フィールドが省略されている場合、クラスターキューはどのコホートにも属さず、借用可能なリソースにアクセスできません。

2.12. フェアシェアリングの設定

フェアシェアリングは、コホートのテナント間で、借用可能なリソースを均等に、または重み付けされた割合で共有するのに使用されるプリエンプションストラテジーです。借用可能なリソースは、コホート内のすべてのクラスターキューの未使用の名目上のクォータです。

Kueue カスタムリソース (CR) の preemptionPolicy 値を FairSharing に設定することで、フェアシェアリングを設定できます。

2.12.1. クラスターキューの重み

フェアシェアリングを有効にした後、フェアシェアリングを実行するには、各クラスターキューのシェア値を設定する必要があります。シェア値は、ClusterQueue オブジェクト内の weight 値として表されます。

シェア値を使用すると、管理者は特定のジョブタイプやチームを優先できるため、この値は重要です。重要なアプリケーションや優先度の高いチームには、利用可能なリソースが相対的に多く割り当てられるように、重みを付けた値を設定できます。重みを設定すると、未使用のリソースが先着順ではなく、定義された組織またはプロジェクトの優先順位に従って配分されるようになります。

weight 値、またはシェア値は、借用可能なリソースを競う際のクラスターキューの比較優位性を定義します。通常、Red Hat build of Kueue は、シェア値が低いジョブから先に許可します。シェア値が高いジョブは、シェア値が低いジョブよりも先にプリエンプトされる可能性が高くなります。

フェアシェアリングの重みが設定されたクラスターキューの例

apiVersion: kueue.x-k8s.io/v1beta2
kind: ClusterQueue
metadata:
  name: cluster-queue
spec:
  namespaceSelector: {}
  resourceGroups:
  - coveredResources: ["cpu"]
    flavors:
    - name: default-flavor
      resources:
      - name: cpu
        nominalQuota: 9
  cohortName: example-cohort
  fairSharing:
    weight: 2

2.12.1.1. 重みゼロ

weight 値が 0 の場合、シェア値は無限です。つまり、そのクラスターキューは他のキューと比べて常に不利な状態に置かれ、フェアシェアリングが有効な場合は、そのワークロードが常に最初にプリエンプトされることになります。

2.13. ギャングスケジューリング

ギャングスケジューリングにより、必要なリソースがすべて利用可能になった場合にのみ、関連するジョブのグループまたは ギャング が開始されます。Red Hat build of Kueue は、ギャング内の関連ジョブすべてをまとめて開始および実行する容量を OpenShift Container Platform クラスターが保証できるようになるまで、ジョブを一時停止することで、ギャングスケジューリングを可能にします。これは、オールオアナッシング (all-or-nothing) スケジューリングとも呼ばれます。

GPU などの高価で限られたリソースを使用する場合、ギャングスケジューリングは重要です。ギャングスケジューリングにより、ジョブが GPU を要求するものの使用しないという状況を防ぐことができ、GPU の使用率が向上し、実行コストを削減できます。ギャングスケジューリングは、リソースのセグメンテーションやデッドロックなどの問題を防ぐ場合にも役立ちます。

2.13.1. ギャングスケジューリングの設定

クラスター管理者は、Kueue カスタムリソース (CR) の gangScheduling spec を変更することで、ギャングスケジューリングを設定できます。

ギャングスケジューリングが設定された Kueue CR の例

apiVersion: kueue.openshift.io/v1
kind: Kueue
metadata:
  name: cluster
  labels:
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/name: kueue-operator
  namespace: openshift-kueue-operator
spec:
  config:
    gangScheduling:
      policy: ByWorkload 
1

      byWorkload:
        admission: Parallel 
2

# ...

1
policy 値を設定して、ギャングスケジューリングを有効または無効化できます。可能な値は ByWorkloadNone、または空 ("") です。
ByWorkload
policy 値が ByWorkload に設定されている場合、各ジョブは単一のユニットとして処理され、許可の対象となります。指定された時間内にジョブの準備が完了しない場合は、ジョブ全体が退避され、後で再試行されます。
None
policy 値が None に設定されている場合、ギャングスケジューリングは無効になります。
空白 ("")
policy 値が空、または "" に設定されている場合、Red Hat build of Kueue Operator がギャングスケジューリングの設定を決定します。現在、ギャングスケジューリングはデフォルトで無効になっています。
2
policy 値が ByWorkload に設定されている場合、ジョブの許可設定を行う必要があります。admission spec に指定できる値は、ParallelSequential、または空 ("") です。
Parallel
admission 値が Parallel に設定されている場合、任意のジョブの Pod をいつでも許可できます。これにより、ジョブがクラスター容量をめぐって競合するデッドロックが発生する可能性があります。デッドロックが発生すると、別のジョブからの Pod のスケジューリングが成功すると、現在のジョブからの Pod のスケジューリングが妨げられる可能性があります。
Sequential
admission 値が Sequential に設定されている場合、現在処理中のジョブからの Pod のみが許可されます。現在のジョブのすべての Pod が許可され準備完了になると、Red Hat build of Kueue は次のジョブを処理します。クラスターに複数のジョブを処理するのに十分な容量がある場合、順次処理によって許可速度が低下する可能性がありますが、ジョブのすべての Pod が正常に一緒にスケジュールされる可能性が高くなります。
空白 ("")
admission 値が空または "" に設定されている場合、Red Hat build of Kueue Operator がジョブの許可設定を決定します。現在、admission 値はデフォルトで Parallel に設定されています。

2.14. クォータ制限付きジョブの実行

Red Hat build of Kueue を有効にして Kubernetes ジョブを実行すると、定義したクォータ制限内でリソースの割り当てを管理できます。これにより、予測可能なリソースの可用性、クラスターの安定性、およびパフォーマンスの最適化に役立ちます。

2.14.1. 利用可能なローカルキューの特定

ジョブをキューに送信する前に、ローカルキューの名前を見つける必要があります。

前提条件

  • クラスター管理者によって OpenShift Container Platform クラスターに Red Hat build of Kueue がインストールおよび設定されている。
  • クラスター管理者によって kueue-batch-user-role クラスターロールが割り当てられている。
  • OpenShift CLI (oc) がインストールされている。

手順

  • 次のコマンドを実行し、namespace 内で使用可能なローカルキューをリスト表示します。

    $ oc -n <namespace> get localqueues

    出力例

    NAME         CLUSTERQUEUE    PENDING WORKLOADS
    user-queue   cluster-queue   3

2.14.2. Red Hat build of Kueue で実行するジョブの定義

Red Hat build of Kueue で実行するジョブを定義する場合は、次の基準を満たしていることを確認してください。

  • kueue.x-k8s.io/queue-name ラベルを使用して、ジョブの送信先となるローカルキューを指定します。
  • 各ジョブ Pod のリソース要求を含めます。

Red Hat build of Kueue はジョブを一時停止し、リソースが利用可能になったときにジョブを開始します。Red Hat build of Kueue は、ジョブと同じ名前の Workload オブジェクトとして表される、対応するワークロードを作成します。

前提条件

  • クラスター管理者によって OpenShift Container Platform クラスターに Red Hat build of Kueue がインストールおよび設定されている。
  • クラスター管理者によって kueue-batch-user-role クラスターロールが割り当てられている。
  • OpenShift CLI (oc) がインストールされている。
  • ジョブを送信するローカルキューの名前を特定した。

手順

  1. Job オブジェクトを作成します。

    ジョブの例

    apiVersion: batch/v1
    kind: Job 
    1
    
    metadata:
      generateName: sample-job- 
    2
    
      namespace: my-namespace
      labels:
        kueue.x-k8s.io/queue-name: user-queue 
    3
    
    spec:
      parallelism: 3
      completions: 3
      template:
        spec:
          containers:
          - name: dummy-job
            image: registry.k8s.io/e2e-test-images/agnhost:2.53
            args: ["entrypoint-tester", "hello", "world"]
            resources: 
    4
    
              requests:
                cpu: 1
                memory: "200Mi"
          restartPolicy: Never

    1
    リソースタイプを、バッチ計算タスクを表す Job オブジェクトとして定義します。
    2
    ジョブの一意の名前を生成するための接頭辞を提供します。
    3
    ジョブを送信するキューを識別します。
    4
    各 Pod のリソース要求を定義します。
  2. 次のコマンドを実行してジョブを実行します。

    $ oc create -f <filename>.yaml

検証

  • 次のコマンドを実行して出力を確認し、作成したジョブに対して Pod が実行されていることをチェックします。

    $ oc get job <job-name>

    出力例

    NAME               STATUS      COMPLETIONS   DURATION   AGE
    sample-job-sk42x   Suspended   0/1                      2m12s

  • 次のコマンドを実行して出力を確認し、ワークロードがジョブの namespace で作成されたことをチェックします。

    $ oc -n <namespace> get workloads

    出力例

    NAME                         QUEUE          RESERVED IN   ADMITTED   FINISHED   AGE
    job-sample-job-sk42x-77c03   user-queue                                         3m8s

2.15. サポートの利用

このドキュメントで説明されている手順、または Red Hat build of Kueue 全般に問題がある場合は、Red Hat カスタマーポータル にアクセスしてください。

カスタマーポータルでは、以下を行うことができます。

  • Red Hat 製品に関するアーティクルおよびソリューションを対象とした Red Hat ナレッジベースの検索またはブラウズ。
  • Red Hat サポートに対するサポートケースの送信。
  • その他の製品ドキュメントへのアクセス。

2.15.1. Red Hat ナレッジベースについて

Red Hat ナレッジベース は、お客様が Red Hat の製品やテクノロジーを最大限に活用できるようにするための豊富なコンテンツを提供します。Red Hat ナレッジベースは、Red Hat 製品のインストール、設定、および使用に関する記事、製品ドキュメント、および動画で構成されています。さらに、既知の問題に対する解決策を検索でき、それぞれに根本原因の簡潔な説明と修復手順が記載されています。

2.15.2. Red Hat サポート用のデータ収集

oc adm must-gather CLI コマンドを使用すると、次のような問題のデバッグに必要になる可能性が高い、Red Hat build of Kueue インスタンスに関する情報を収集できます。

  • ワークロード、クラスターキュー、ローカルキュー、リソースフレーバー、アドミッションチェック、および対応するクラスターリソース定義 (CRD) などの Red Hat build of Kueue カスタムリソース
  • サービス
  • Endpoints
  • Webhook の設定
  • openshift-kueue-operator namespace および kueue-controller-manager Pod からのログ

収集されたデータは、デフォルトでは現在の作業ディレクトリー内の must-gather/ という名前の新しいディレクトリーに書き込まれます。

前提条件

  • Red Hat build of Kueue Operator がクラスターにインストールされている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. must-gather データを保存するディレクトリーに移動します。
  2. 次のコマンドを実行して、must-gather データを収集します。

    $ oc adm must-gather \
      --image=registry.redhat.io/kueue/kueue-must-gather-rhel9:<version>

    <version> は、Red Hat build of Kueue の現在のバージョンです。

  3. 作業ディレクトリーに作成された must-gather ディレクトリーから圧縮ファイルを作成します。固有の must-gather データの日付とクラスター ID を必ず提供してください。クラスター ID を確認する方法の詳細は、How to find the cluster-id or name on OpenShift cluster を参照してください。
  4. Red Hat カスタマーポータルの カスタマーサポート ページ で、圧縮ファイルをサポートケースに添付します。

第3章 Leader Worker Set Operator

3.1. Leader Worker Set Operator の概要

Leader Worker Set Operator を使用して、マルチノード AI/ML 推論デプロイメントを効率的に管理します。Leader Worker Set Operator は、Pod のグループを 1 つのユニットとして扱い、大規模なワークロードのスケーリング、リカバリー、更新を単純化します。

AI/ML 推論に大規模言語モデル (LLM) を使用するには、多くの場合、大量のコンピュートリソースが必要です。通常はワークロードを複数のノードに分散する必要があります。そのため、デプロイメントが複雑になり、スケーリング、障害からの回復、効率的な Pod の配置に関する課題が生じる可能性があります。

Leader Worker Set Operator は、Pod のグループを 1 つの連携したユニットとして扱うことで、このようなマルチノードのデプロイメントを簡素化します。また、グループ内の各 Pod のライフサイクルを管理し、グループ全体をまとめてスケーリングし、グループレベルで更新と障害回復を実行して、一貫性を確保します。

3.1.1. Leader Worker Set Operator について

Leader Worker Set Operator を使用して、Pod のグループを単一の管理可能なユニットとしてデプロイします。これは、シャーディングされた大規模言語モデル (LLM) などの大規模な AI/ML 推論ワークロードをデプロイする場合に役立ちます。

Leader Worker Set Operator は、オープンソースプロジェクトである LeaderWorkerSet をベースにしています。LeaderWorkerSet は、Pod のグループをユニットとしてデプロイするために使用できるカスタム Kubernetes API です。これは、大規模言語モデル (LLM) が複数のノードに分散される人工知能 (AI) および機械学習 (ML) 推論ワークロードに役立ちます。

LeaderWorkerSet API を使用すると、Pod が 1 つのリーダーと複数のワーカーで構成されるユニットにグループ化され、すべての Pod が単一のエンティティーとしてまとめて管理されます。グループ内の各 Pod には、一意の Pod アイデンティティーがあります。グループ内の Pod は並行して作成され、同一のライフサイクルステージを共有します。ロールアウト、ローリング更新、および Pod 障害時の再起動は、グループとして実行されます。

LeaderWorkerSet の設定では、グループのサイズとグループのレプリカの数を定義します。必要に応じて、リーダー Pod とワーカー Pod に個別のテンプレートを定義して、ロール別のカスタマイズを行うことができます。また、同じグループ内の Pod が同じトポロジー内に配置されるように、トポロジーを考慮した配置を設定することもできます。

重要

Leader Worker Set Operator をインストールする前に、cert-manager Operator for Red Hat OpenShift をインストールする必要があります。これはサービスを設定し、メトリクス収集を管理するために必要です。

OpenShift Container Platform では、Leader Worker Set Operator のモニタリングが Prometheus を通じてデフォルトで提供されます。

3.1.1.1. LeaderWorkerSet のアーキテクチャー

LeaderWorkerSet アーキテクチャーを確認し、LeaderWorkerSet API が、分散ワークロードを連携させるために、1 つの Pod をリーダー、残りの Pod をワーカーとして、Pod のグループを 1 つのユニットに編成する方法を理解します。

次の図は、LeaderWorkerSet アーキテクチャーを示しています。

図3.1 リーダーワーカーセットのアーキテクチャー

リーダーワーカーセットのアーキテクチャー

LeaderWorkerSet API は、リーダーステートフルセットを使用して、Pod グループのデプロイメントとライフサイクルを管理します。定義されたレプリカごとに、リーダーワーカーグループが作成されます。

各リーダーワーカーグループには、リーダー Pod とワーカーステートフルセットが含まれます。ワーカーステートフルセットは、リーダー Pod によって所有され、そのリーダー Pod に関連付けられたワーカー Pod のセットを管理します。size を指定すると、各リーダーワーカーグループ内の Pod の合計数が定義されます。その数にはリーダー Pod も含まれます。

3.2. Leader Worker Set Operator のリリースノート

Leader Worker Set Operator のリリースノートを確認して、開発を追跡し、各リリースの新機能と変更点を把握します。

Leader Worker Set Operator を使用すると、分散推論ワークロードを管理し、大規模な推論リクエストを効率的に処理できます。

このリリースノートは、Leader Worker Set Operator の開発履歴を記録したものです。

詳細は、Leader Worker Set Operator について を参照してください。

3.2.1. Leader Worker Set Operator 1.0.0 のリリースノート

Leader Worker Set Operator 1.0.0 のリリースノートで、このリリースの新機能と更新内容を確認します。

発行日: 2025 年 9 月 18 日

Leader Worker Set Operator 1.0.0 では、次のアドバイザリーが利用可能です。

3.2.1.1. 新機能および機能拡張
  • これは、Leader Worker Set Operator の最初のリリースです。

3.3. Leader Worker Set Operator による分散ワークロードの管理

Leader Worker Set Operator を使用すると、分散推論ワークロードを管理し、大規模な推論リクエストを効率的に処理できます。

3.3.1. Leader Worker Set Operator のインストール

OpenShift Container Platform Web コンソールから Leader Worker Set Operator をインストールして、分散 AI ワークロードの管理を開始できます。

前提条件

  • cluster-admin 権限でクラスターにアクセスできる。
  • OpenShift Container Platform Web コンソールにアクセスできる。
  • cert-manager Operator for Red Hat OpenShift がインストールされている。

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. cert-manager Operator for Red Hat OpenShift がインストールされていることを確認します。
  3. Leader Worker Set Operator をインストールします。

    1. EcosystemSoftware Catalog に移動します。
    2. フィルターボックスに Leader Worker Set Operator と入力します。
    3. Leader Worker Set Operator を選択し、Install をクリックします。
    4. Install Operator ページで以下を行います。

      1. Update channelstable-v1.0 に設定します。これにより、Leader Worker Set Operator 1.0 の最新の安定版リリースがインストールされます。
      2. Installation mode で、A specific namespace on the cluster を選択します。
      3. Installed Namespace の下で、Operator recommended Namespace: openshift-lws-operator を選択します。
      4. Update approval で、次のいずれかの更新ストラテジーを選択します。

        • Automatic ストラテジーを使用すると、新しいバージョンが利用可能になったときに、Operator Lifecycle Manager (OLM) によって Operator を自動的に更新できます。
        • Manual ストラテジーには、Operator の更新を承認するための適切な認証情報を持つユーザーが必要です。
      5. Install をクリックします。
  4. Leader Worker Set Operator のカスタムリソース (CR) を作成します。

    1. Installed OperatorsLeader Worker Set Operator に移動します。
    2. Provided APIs の下にある LeaderWorkerSetOperator ペインで Create instance をクリックします。
    3. Create をクリックします。

3.3.2. リーダーワーカーセットのデプロイ

Leader Worker Set Operator を使用すると、リーダーワーカーセットをデプロイして、複数のノード間で分散されるワークロードの管理を支援できます。

前提条件

  • Leader Worker Set Operator をインストールした。

手順

  1. 次のコマンドを実行して新しいプロジェクトを作成します。

    $ oc new-project my-namespace
  2. leader-worker-set.yaml という名前のファイルを作成します。

    apiVersion: leaderworkerset.x-k8s.io/v1
    kind: LeaderWorkerSet
    metadata:
      generation: 1
      name: my-lws
      namespace: my-namespace
    spec:
      leaderWorkerTemplate:
        leaderTemplate:
          metadata: {}
          spec:
            containers:
            - image: nginxinc/nginx-unprivileged:1.27
              name: leader
              resources: {}
        restartPolicy: RecreateGroupOnPodRestart
        size: 3
        workerTemplate:
          metadata: {}
          spec:
            containers:
            - image: nginxinc/nginx-unprivileged:1.27
              name: worker
              ports:
              - containerPort: 8080
                protocol: TCP
              resources: {}
      networkConfig:
        subdomainPolicy: Shared
      replicas: 2
      rolloutStrategy:
        rollingUpdateConfiguration:
          maxSurge: 1
          maxUnavailable: 1
        type: RollingUpdate
      startupPolicy: LeaderCreated

    各項目の説明:

    metadata.name
    リーダーワーカーセットのリソースの名前を指定します。
    metadata.namespace
    リーダーワーカーセットが実行される namespace を指定します。
    spec.leaderWorkerTemplate.leaderTemplate
    リーダー Pod の Pod テンプレートを指定します。
    spec.leaderWorkerTemplate.restartPolicy
    Pod 障害が発生した場合の再起動ポリシーを指定します。使用できる値は、グループ全体を再起動する RecreateGroupOnPodRestart か、グループを再起動しない None です。
    spec.leaderWorkerTemplate.size
    リーダー Pod を含む、各グループに作成する Pod の数を指定します。たとえば、値が 3 の場合、リーダー Pod 1 個とワーカー Pod 2 個が作成されます。デフォルト値は 1 です。
    spec.leaderWorkerTemplate.workerTemplate
    ワーカー Pod の Pod テンプレートを指定します。
    spec.networkConfig.subdomainPolicy
    ヘッドレスサービスを作成するときに使用するポリシーを指定します。使用できる値は UniquePerReplica または Shared です。デフォルト値は Shared です。
    spec.replicas
    レプリカの数、つまりリーダーワーカーグループの数を指定します。デフォルト値は 1 です。
    spec.rolloutStrategy.rollingUpdateConfiguration.maxSurge
    ローリング更新中に replicas 値を超えてスケジュールできるレプリカの最大数を指定します。値は整数またはパーセンテージで指定できます。

    設定可能なすべてのフィールドの詳細は、LeaderWorkerSet API のアップストリームドキュメントを参照してください。

  3. 次のコマンドを実行して、リーダーワーカーセットの設定を適用します。

    $ oc apply -f leader-worker-set.yaml

検証

  1. 次のコマンドを実行して、Pod が作成されたことを確認します。

    $ oc get pods -n my-namespace

    出力例

    NAME         READY   STATUS    RESTARTS   AGE
    my-lws-0     1/1     Running   0          4s
    my-lws-0-1   1/1     Running   0          3s
    my-lws-0-2   1/1     Running   0          3s
    my-lws-1     1/1     Running   0          7s
    my-lws-1-1   1/1     Running   0          6s
    my-lws-1-2   1/1     Running   0          6s

    • my-lws-0 は、最初のグループのリーダー Pod です。
    • my-lws-1 は、2 番目のグループのリーダー Pod です。
  2. 次のコマンドを実行して、ステートフルセットを確認します。

    $ oc get statefulsets

    出力例

    NAME       READY   AGE
    my-lws     4/4     111s
    my-lws-0   2/2     57s
    my-lws-1   2/2     60s

    • my-lws は、すべてのリーダーワーカーグループのリーダーステートフルセットです。
    • my-lws-0 は、最初のグループのワーカーステートフルセットです。
    • my-lws-1 は、2 番目のグループのワーカーステートフルセットです。

3.4. Leader Worker Set Operator のアンインストール

クラスターで Leader Worker Set Operator が不要になった場合は、Operator をアンインストールして関連リソースを削除できます。

3.4.1. Leader Worker Set Operator のアンインストール

クラスターで Operator が不要になった場合は、Web コンソールを使用して Leader Worker Set Operator をアンインストールできます。

前提条件

  • cluster-admin 権限でクラスターにアクセスできる。
  • OpenShift Container Platform Web コンソールにアクセスできる。
  • Leader Worker Set Operator をインストールした。

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. OperatorsInstalled Operators に移動します。
  3. Project ドロップダウンリストから openshift-lws-operator を選択します。
  4. LeaderWorkerSetOperator インスタンスを削除します。

    1. Leader Worker Set Operator をクリックし、LeaderWorkerSetOperator タブを選択します。
    2. クラスター エントリーの横にあるオプションメニュー kebab をクリックし、[LeaderWorkerSetOperator を削除] を選択します。
    3. 確認ダイアログで Delete をクリックします。
  5. Leader Worker Set Operator をアンインストールします。

    1. OperatorsInstalled Operators に移動します。
    2. Leader Worker Set Operator エントリーの横にあるオプションメニュー kebab をクリックし、Operator のアンインストールを クリックします。
    3. 確認ダイアログで、Uninstall をクリックします。

3.4.2. Leader Worker Set Operator リソースのアンインストール

必要に応じて、Leader Worker Set Operator をアンインストールした後、カスタムリソース (CR) と関連する namespace を削除します。これにより、残っているすべての Leader Worker Set アーティファクトがクリーンアップされます。

前提条件

  • cluster-admin 権限でクラスターにアクセスできる。
  • OpenShift Container Platform Web コンソールにアクセスできる。
  • Leader Worker Set Operator をアンインストールした。

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. Leader Worker Set Operator をインストールしたときに作成された CRD を削除します。

    1. AdministrationCustomResourceDefinitions に移動します。
    2. Name フィールドに LeaderWorkerSetOperator と入力し、CRD をフィルタリングします。
    3. LeaderWorkerSetOperator CRD の横にあるオプションメニュー kebab をクリックし、[カスタムリソース定義の削除] を選択します。
    4. 確認ダイアログで Delete をクリックします。
  3. openshift-lws-operator namespace を削除します。

    1. AdministrationNamespaces に移動します。
    2. フィルターボックスに openshift-lws-operator と入力します。
    3. openshift-lws-operator エントリーの横にあるオプションメニュー kebab をクリックし、[名前空間の削除] を選択します。
    4. 確認ダイアログで、openshift-lws-operator と入力し、Delete をクリックします。

第4章 JobSet Operator

4.1. JobSet Operator の概要

OpenShift Container Platform の JobSet Operator を使用すると、高性能コンピューティング (HPC) や AI トレーニングなどの大規模で協調的なワークロードを管理および実行できます。マルチテンプレートジョブのサポートや安定したネットワーク接続といった機能は、迅速な復旧とリソースの効率的な利用に役立ちます。

4.1.1. JobSet Operator について

OpenShift Container Platform の JobSet Operator を使用すると、高性能コンピューティング (HPC) や人工知能 (AI) トレーニングなどの大規模で分散および調整されたコンピューティングワークロードを管理して、自動的な安定、調整、障害復旧を実現できます。

JobSet Operator は、JobSet オープンソースプロジェクトをベースにしています。

JobSet Operator は、ジョブのグループを単一の調整されたユニットとして管理するように設計されています。これは、一連のマシンをチームとして数時間または数日間実行する必要のある、HPC や大規模 AI モデルのトレーニングなどの分野で特に役立ちます。

JobSet Operator を使用すると、標準的な OpenShift Container Platform ジョブにおいては大きすぎる、または複雑すぎる問題を解決できます。JobSet Operator は調整、安定性、および回復を行います。

JobSet Operator は、IP アドレスを取得するための安定したヘッドレスサービスを自動的にセットアップします。これにより、障害が発生して再起動した後でも、ワーカーは互いを見つけて通信できます。また、自動障害復旧機能も提供します。大規模なトレーニングジョブのごく一部が失敗した場合、保存されたチェックポイントからワーカーグループ全体を再起動するように Operator を設定できます。これにより、時間と計算コストが節約されます。

JobSet Operator は起動制御を提供し、これにより依存関係を確実に満たすために特定の起動シーケンスを定義できます。たとえば、ワーカーが接続を試みる前にリーダーが実行されるようにします。

JobSet Operator を使用すると、OpenShift Container Platform 上での大規模で分散および調整されたコンピューティングタスクの管理が容易になり、多数の個別コンポーネントが 1 つの回復力のある管理しやすいシステムになります。

4.2. JobSet Operator のリリースノート

OpenShift Container Platform 上で調整された大規模なコンピューティングワークロードを管理する JobSet Operator の開発、機能、修正を追跡します。

詳細は、JobSet Operator について を参照してください。

4.2.1. JobSet Operator 1.0 のリリースノート

JobSet Operator 1.0 の初回リリースにおける新機能とアドバイザリーを確認してください。

発行日:2026 年 2 月 12 日

JobSet Operator 1.0 に関する以下のアドバイザリーが利用可能です。

4.2.1.1. 新機能および機能拡張
  • これは、JobSet Operator の一般提供開始版です。

4.3. JobSet Operator のインストール

OpenShift Container Platform に JobSet Operator をインストールすると、大規模で調整されたコンピューティングワークロードの管理が可能になり、アプリケーションで統一された API および障害回復機能を使用できます。

4.3.1. JobSet Operator のインストール

Web コンソールを使用して OpenShift Container Platform に JobSet Operator をインストールし、大規模で調整されたコンピューティングワークロードの管理を開始します。

前提条件

  • cluster-admin 権限でクラスターにアクセスできる。
  • OpenShift Container Platform Web コンソールにアクセスできる。
  • cert-manager Operator for Red Hat OpenShift がインストールされている。

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. cert-manager Operator for Red Hat OpenShift がインストールされていることを確認します。
  3. JobSet Operator をインストールします。

    1. EcosystemSoftware Catalog に移動します。
    2. openshift-operators プロジェクトを検索して選択します。
    3. フィルターボックスに JobSet Operator と入力します。
    4. JobSet Operator を選択し、Install をクリックします。
    5. Install Operator ページで以下を行います。

      1. 更新チャネルstable-v1.0 に設定されており、JobSet Operator の最新の安定版リリースがインストールされます。
      2. Installation mode で、A specific namespace on the cluster を選択します。
      3. Installed Namespace の下で、Operator recommended Namespace: openshift-jobset-operator を選択します。
      4. Update approval で、次のいずれかの更新ストラテジーを選択します。

        • Automatic ストラテジーを使用すると、新しいバージョンが利用可能になったときに、Operator Lifecycle Manager (OLM) によって Operator を自動的に更新できます。
        • Manual ストラテジーには、Operator の更新を承認するための適切な認証情報を持つユーザーが必要です。
      5. Install をクリックします。
  4. JobSet Operator のカスタムリソース (CR) を作成します。

    1. Installed OperatorsJobSet Operator に移動します。
    2. Provided APIs の下にある JobSetOperator ペインで Create instance をクリックします。
    3. 名前を cluster に設定します。
    4. managementStateManaged に設定します。
    5. Create をクリックします。

検証

  • 次のコマンドを入力して、JobSet Operator とオペランド Pod が実行されていることを確認します。

    $ oc get pod -n openshift-jobset-operator

    出力例

    NAME                                        READY   STATUS    RESTARTS   AGE
    jobset-controller-manager-5595547fb-b4g2x   1/1     Running   0          48s
    jobset-operator-596cb848c6-q2dmp            1/1     Running   0          2m33s

4.4. JobSet Operator を使用したワークロードの管理

OpenShift Container Platform の JobSet Operator を使用すると、高性能コンピューティング (HPC) や AI トレーニングなどの大規模で協調的なワークロードを管理および実行できます。マルチテンプレートジョブのサポートや安定したネットワーク接続といった機能は、迅速な復旧とリソースの効率的な利用に役立ちます。

4.4.1. ジョブセットのデプロイ

JobSet Operator を使用すると、JobSet をデプロイして、大規模で協調的なワークロードを管理および実行できます。

前提条件

  • JobSet Operator をインストールしました。
  • NVIDIA 製 GPU を搭載したクラスターが利用可能です。

手順

  1. 次のコマンドを実行して新しいプロジェクトを作成します。

    $ oc new-project <my_namespace>
  2. jobset.yaml という名前のファイルを作成します。

    apiVersion: jobset.x-k8s.io/v1alpha2
    kind: JobSet
    metadata:
      name: pytorch
    spec:
      replicatedJobs:
      - name: workers
        template:
          spec:
            parallelism: <pods_running_number>
            completions: <pods_finish_number>
            backoffLimit: 0
            template:
              spec:
                imagePullSecrets:
                  - name: my-registry-secret
                initContainers:
                  - name: prepare
                    image: docker.io/alpine/git:v2.52.0
                    args: ['clone', 'https://github.com/pytorch/examples']
                    volumeMounts:
                      - name: workdir
                        mountPath: /git
                containers:
                  - name: pytorch
                    image: docker.io/pytorch/pytorch:2.10.0-cuda13.0-cudnn9-runtime
                    resources:
                      limits:
                        nvidia.com/gpu: "1"
                      requests:
                        nvidia.com/gpu: "1"
                    ports:
                    - containerPort: 4321
                    env:
                    - name: MASTER_ADDR
                      value: "pytorch-workers-0-0.pytorch"
                    - name: MASTER_PORT
                      value: "4321"
                    - name: RANK
                      valueFrom:
                        fieldRef:
                          fieldPath: metadata.annotations['batch.kubernetes.io/job-completion-index']
                    - name: PYTHONUNBUFFERED
                      value: "0"
                    command:
                    - /bin/sh
                    - -c
                    - |
                      cd examples/distributed/ddp-tutorial-series
                      torchrun --nproc_per_node=1 --nnodes=3 --rdzv_id=100 --rdzv_backend=c10d --rdzv_endpoint=$MASTER_ADDR:$MASTER_PORT multinode.py 1000 100
                    volumeMounts:
                      - name: workdir
                        mountPath: /workspace
                volumes:
                  - name: workdir
                    emptyDir: {}

    各項目の説明:

    <pods_running_number>
    同時に実行される Pod の数を指定します。
    <pods_finish_number>
    ジョブが完了したとみなされるために、正常に完了する必要のある Pod の総数を指定します。
  3. 以下のコマンドを実行して、JobSet の設定を適用してください。

    $ oc apply -f jobset.yaml

検証

  • 以下のコマンドを実行して、Pod が起動したことを確認してください。

    $ oc get pods -n <my_namespace>

    出力例

    NAME                        READY   STATUS    RESTARTS   AGE
    pytorch-workers-0-0-2lzwt   1/1     Running   0          2m17s
    pytorch-workers-0-1-g2lrv   1/1     Running   0          2m17s
    pytorch-workers-0-2-dpljq   1/1     Running   0          2m17s

4.4.2. ジョブセットコーディネーターの指定

JobSetPod 間の通信を管理するには、特定の JobSet コーディネーター Pod を割り当てることができます。これにより、分散ワークロードは、タスクの同期とデータ交換のための中心的な調整ポイントとして、安定したネットワークエンドポイントを参照できるようになります。

前提条件

  • JobSet Operator をインストールしました。

手順

  1. 以下のコマンドを実行して、新しい名前空間を作成します。

    $ oc new-project <new_namespace>
  2. jobset-coordinator.yaml という名前の YAML ファイルを作成します。

    サンプル YAML ファイル

    apiVersion: jobset.x-k8s.io/v1alpha2
    kind: JobSet
    metadata:
      name: coordinator
    spec:
      coordinator:
        replicatedJob: driver
        jobIndex: 0
        podIndex: 0
      replicatedJobs:
      - name: workers
        template:
          spec:
            parallelism: <pods_running_number>
            completions: <pods_finish_number>
            backoffLimit: 0
            template:
              spec:
                containers:
                - name: worker
                  env:
                    - name: COORDINATOR_ENDPOINT
                      valueFrom:
                        fieldRef:
                          fieldPath: metadata.labels['jobset.sigs.k8s.io/coordinator']
                  image: quay.io/nginx/nginx-unprivileged:1.29-alpine
                  command: [ "/bin/sh", "-c" ]
                  args:
                    - |
                      while ! curl -s "${COORDINATOR_ENDPOINT}:8080" | grep Welcome; do
                        sleep 3
                      done
                      sleep 100
      - name: driver
        template:
          spec:
            parallelism: <pods_running_number>
            completions: <pods_finish_number>
            backoffLimit: 0
            template:
              spec:
                containers:
                - name: driver
                  image: quay.io/nginx/nginx-unprivileged:1.29-alpine
                ports:
                  - containerPort: 8080
                    protocol: TCP

    各項目の説明:

    <pods_running_number>
    同時に実行される Pod の数を指定します。
    <pods_finish_number>
    ジョブが完了したとみなされるために、正常に完了する必要のある Pod の総数を指定します。
  3. 以下のコマンドを実行して、jobset-coordinator.yaml ファイルを適用します。

    $ oc apply -f jobset-coordinator.yaml

検証

  • 次のコマンドを実行して、Pod が作成されたことを確認します。

    $ oc get pods -n <new_namespace>

    出力例

    NAME                            READY   STATUS              RESTARTS   AGE
    coordinator-driver-0-0-svgk7    1/1     Running             0          67s
    coordinator-workers-0-0-57jvg   1/1     Running             0          67s
    coordinator-workers-0-1-mghvx   1/1     Running             0          67s
    coordinator-workers-0-2-7cnvv   1/1     Running             0          67s

4.4.3. JobSet Operator の障害ポリシー設定

子ジョブの失敗に対するワークロードの動作を制御するには、ジョブセットの失敗ポリシーを設定できます。これにより、障害の原因や影響を受ける特定のレプリケートジョブに基づいて、ジョブセット全体を再起動または失敗させるなど、特定のアクションを定義できます。

4.4.3.1. 不履行時のポリシー措置

これらのアクションは、ジョブの失敗が定義されたルールに一致した場合に利用できます。

Expand
アクション説明

ジョブセットの失敗

ジョブセット全体を即座に失敗としてマークします。

RestartJobSet

すべての子ジョブを再作成することで、ジョブセットを再起動します。この操作は、maxRestarts の 制限にカウントされます。ルールに一致するものがなかった場合のデフォルトの動作です。

RestartJobSetAndIgnoreMaxRestarts

maxRestarts 制限にカウントされずにジョブセットを再起動します。

4.4.3.2. ルールターゲティング属性

以下の属性を使用して、障害ルールを定義します。

Expand
属性説明

targetReplicatedJobs

どのレプリケートされたジョブがこのルールをトリガーするかを指定します。

仕事の失敗理由

特定のジョブ失敗理由に基づいてルールをトリガーします。有効な値には、BackoffLimitExceededDeadlineExceeded、および PodFailurePolicy が含まれます。

4.4.3.3. 設定例

この設定では、リーダー ジョブが失敗した場合にジョブセット全体が失敗とみなされます。

リーダーが失敗した場合にジョブセットを失敗とマークするための YAML ファイルの例

apiVersion: jobset.x-k8s.io/v1alpha2
kind: JobSet
metadata:
  name: failjobset-action-example
spec:
  failurePolicy:
    maxRestarts: 3
    rules:
      - action: FailJobSet
        targetReplicatedJobs:
        - leader
  replicatedJobs:
  - name: leader
    replicas: 1
    template:
      spec:
        backoffLimit: 0
        completions: 2
        parallelism: 2
        template:
          spec:
            containers:
            - name: leader
              image: docker.io/bash:latest
              command:
              - bash
              - -xc
              - |
                echo "JOB_COMPLETION_INDEX=$JOB_COMPLETION_INDEX"
                if [[ "$JOB_COMPLETION_INDEX" == "0" ]]; then
                  for i in $(seq 10 -1 1)
                  do
                    echo "Sleeping in $i"
                    sleep 1
                  done
                  exit 1
                fi
                for i in $(seq 1 1000)
                do
                  echo "$i"
                  sleep 1
                done
  - name: workers
    replicas: 1
    template:
      spec:
        backoffLimit: 0
        completions: 2
        parallelism: 2
        template:
          spec:
            containers:
            - name: worker
              image: docker.io/bash:latest
              command:
              - bash
              - -xc
              - |
                sleep 1000

4.4.4. JobSet Operator のボリュームクレームポリシーの設定

JobSet を設定することで、複数のレプリケートされたジョブ間で共有される永続ボリューム要求 (PVC) を自動的に作成および管理できます。これは、データセット、モデル、またはチェックポイントへの共有アクセスを必要とするワークロードに役立ちます。

前提条件

  • クラスターに JobSet Operator がインストールされています。
  • ワークロードに対して、デフォルトのストレージクラスを設定したか、ストレージクラスを選択しました。

手順

  1. JobSet YAML ファイルの spec.volumeClaimPolicies セクションでボリュームテンプレートを定義します。

    apiVersion: jobset.x-k8s.io/v1alpha2
    kind: JobSet
    metadata:
      name: <job_name>
    spec:
      volumeClaimPolicies:
        - templates:
            - metadata:
                name: <persistent_volume_claim_name_prefix>
              spec:
                accessModes: ["ReadWriteOnce"]
                storageClassName: mystorageclass
                resources:
                  requests:
                    storage: 1Gi
          retentionPolicy:
            whenDeleted: Retain

    各項目の説明:

    < ジョブ名 >
    名前空間内のジョブを識別するための固有の識別子を指定します。
    <persistent_volume_claim_name>
    PVC の名前を指定します。ここで使用した名前は、volumeMounts の 名前としても使用されます。<persistent_volume_claim_name>-<job_name> の形式で作成された PVC をマウントするボリュームが、Pod に自動的に追加されます。
    < 削除保持ポリシー >
    削除保持ポリシーを指定します。オプションとして、この値を 保持 に設定することで、ジョブセットが削除された後もデータを保持できます。
  2. replicatedJobs の 設定で、定義したテンプレート名に一致する volumeMount を追加してください。

    apiVersion: jobset.x-k8s.io/v1alpha2
    kind: JobSet
    metadata:
      name: <job_name>
    spec:
      replicatedJobs:
      - name: workers
        template:
          spec:
            parallelism: 2
            completions: 2
            backoffLimit: 0
            template:
              spec:
                imagePullSecrets:
                  - name: my-registry-secret
                initContainers:
                  - name: prepare
                    image: docker.io/alpine/git:v2.52.0
                    args: ['clone', 'https://github.com/pytorch/examples']
                    volumeMounts:
                      - name: <persistent_volume_claim_name>
                        mountPath: /git/checkpoint
    #...
  3. 以下のコマンドを実行して、JobSet の設定を適用してください。

    $ oc apply -f <jobset_yaml>

検証

  • PVC が <claim_name>-<jobset_name> という 命名規則を使用して作成されたことを確認してください。

    $ oc get pvc

    出力例

    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    pvc-1       Bound    pvc-385996a0-70af-4791-aa8e-9e6459e6b123   3Gi        RWO            file-storage   3d
    pvc-2       Bound    pvc-8aeddd4d-aad5-4039-8d04-640a71c9a72d   12Gi       RWO            file-storage   3d
    pvc-3       Bound    pvc-0050144d-940c-4c4e-a23a-2a660a5490eb   12Gi       RWO            file-storage   3d

4.5. JobSet Operator のアンインストール

OpenShift Container Platform の Web コンソールを使用して、クラスターから Operator インスタンスとそのリソースを削除し、JobSetOperator をアンインストールします。

4.5.1. JobSet Operator のアンインストール

OpenShift Container Platform の Web コンソールを使用して Operator インスタンスを削除することにより、JobSet Operator をアンインストールします。

前提条件

  • cluster-admin 権限でクラスターにアクセスできる。
  • OpenShift Container Platform Web コンソールにアクセスできる。
  • JobSet Operator をインストールしました。

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. OperatorsInstalled Operators に移動します。
  3. プロジェクト ドロップダウンリストから openshift-js-operator を選択してください。
  4. JobSetOperator インスタンスを削除します。

    1. JobSet Operator をクリックし、JobSetOperator タブを選択します。
    2. クラスター エントリーの横にあるオプションメニュー kebab をクリックし、[JobSetOperator の削除] を選択します。
    3. 確認ダイアログで Delete をクリックします。
  5. JobSet Operator をアンインストールしてください。

    1. OperatorsInstalled Operators に移動します。
    2. JobSet Operator エントリーの横にあるオプションメニュー kebab をクリックし、Operator のアンインストールを クリックします。
    3. 確認ダイアログで、Uninstall をクリックします。

4.5.2. JobSet Operator リソースをアンインストールしています

必要に応じて、JobSet Operator をアンインストールした後、クラスターから関連リソースを削除できます。

前提条件

  • cluster-admin 権限でクラスターにアクセスできる。
  • OpenShift Container Platform Web コンソールにアクセスできる。
  • JobSet Operator をアンインストールしました。

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. JobSet Operator のインストール時に作成された CRD を削除します。

    1. AdministrationCustomResourceDefinitions に移動します。
    2. CRD をフィルタリングするには、名前 フィールドに JobSetOperator と入力してください。
    3. JobSetOperator CRD の横にあるオプションメニュー kebab をクリックし、[カスタムリソース定義の削除] を選択します。
    4. 確認ダイアログで Delete をクリックします。
  3. openshift-jobset-operator 名前空間を削除します。

    1. AdministrationNamespaces に移動します。
    2. 名前空間のリストに openshift-jobset-operator が 適切に含まれています。
    3. openshift-jobset-operator エントリーの横にあるオプションメニュー kebab をクリックし、[名前空間の削除] を選択します。
    4. 確認ダイアログで openshift-jobset-operator と入力し、削除 をクリックします。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る