クラウドとインフラ

Volcano v1.16で名前空間キューとフェアシェアスケジューリングが追加

Volcano v1.16では、テナント分離のためのNamespaceQueue、履歴使用量追跡用のfairshareプラグイン、そして大規模バッチワークロード向けの性能最適化が導入されました。

サーバーラック上の階層的なキュー構造を示すイラスト
この記事用に生成されたイラスト

英語の原文から自動翻訳されました。

Cloud Native Computing Foundationは、KubernetesネイティブのバッチスケジューラであるVolcano v1.16.0をリリースしました。このバージョンでは、マルチテナントのリソース管理に関する新しいメカニズム、具体的には名前空間スコープのキュー階層構造とフェアシェアスケジューリングプラグインが導入されています。また、トポロジー検出機能をコアスケジューラから分離することで、他のスケジューリングシステムとのより広範な統合が可能になりました。

何が起きたか

Volcano v1.16.0は、重いバッチ処理やAIワークロードを実行するクラスタにおける公平性とスケーラビリティの向上に焦点を当てています。今回のリリースでは、リソースガバナンスに関する2つの主要な機能、すなわちNamespaceQueueとfairshareプラグインが追加されました。NamespaceQueueにより、テナントはクラスター全体の管理者に依存するのではなく、特定の名前空間内で独自の階層的なキューとクォータを管理できるようになります。fairshareプラグインは、スケジューリング判断にリソース消費の履歴を組み込み、共有キューを使用するチームが長期的にリソースを独占しないようにします。

今回のアップデートでは、HyperNodeコントローラーを独立してデプロイ可能にすることで、HyperNodeエコシステムも拡大しています。従来、HyperNodeをトポロジー検出に使用するには、Volcanoスケジューラのフルセットを実行する必要がありました。しかし現在では、異なるスケジューラを使用するプラットフォームでも、ハイパーノードと階層構造を管理するためにHyperNodeコントローラーのみをデプロイし、そのデータをAPI経由で外部から利用することが可能です。さらに、現在実行できないジョブに対する冗長なスケジューリングチェックを削減する「Unschedulable Job Cache(スケジュール不能ジョブキャッシュ)」など、パフォーマンス強化も含まれています。

仕組み

新しいNamespaceQueue機能は、キュー管理をKubernetesの名前空間境界と整合させます。管理者は、特定の親クラスターQueueに自分のキュー階層を接続することを許可された名前空間を指定します。その境界内では、テナントは保証リソースや回収可能な制限などの機能を持つサブキューを定義できます。この分離により、チームはすべての変更に対してcluster-admin権限を必要とせずに、内部のリソース配分を管理できます。アイデンティティは名前空間にスコープされるため、異なる名前空間で同じキュー名を使用しても競合しないことがシステムによって保証されます。

共有キュー間の公平性は、Slurmのフェアシェアスケジューリングに触発された新しいfairshareプラグインによって処理されます。現在の割り当てだけを見るのではなく、このプラグインは各名前空間の累積リソース秒数を追跡します。履歴に対して指数減衰を適用し、デフォルトの半減期は4時間です。最近のリソース消費が少ない名前空間は、リソース争いにおいて優先されます。これにより、一つのチームがジョブを継続的に提出することで共有キューを支配してしまうことを防ぎます。彼らの歴史的な使用量重みが増加し、最終的には使用量が減衰するまで優先度が低下するためです。

パフォーマンス改善の中心は、Unschedulable Job Cacheです。ジョブがキューの満杯やリソース不足のためにスケジュールできなかった場合、従来のスケジューラはすべてのサイクルで再評価を行っていました。新しいキャッシュは拒否の具体的な理由を記録し、ノードラベルの変更やリソース解放などの関連イベントが発生するまで再評価をスキップします。ウォッチドッグタイマーにより、キャッシュされたジョブは定期的に再試行され、イベントヒントが失敗した場合でも無限にスタックしないようになっています。これにより、大量の保留中のバックログを抱えるクラスタでのCPUオーバーヘッドが削減されます。

主な詳細

  • NamespaceQueue: テナントが承認された名前空間内で階層的なキューとクォータを管理できるようにし、リソースプール認可と日常のテナント管理を分離します。
  • Fairshareプラグイン: 名前空間ごとの歴史的なリソース消費を追跡し、指数減衰(デフォルトの半減期は4時間)を適用することで、共有キューにおける長期的な公平性を向上させます。
  • Unschedulable Job Cache: 保留中のジョブの拒否理由をキャッシュし、トリガーとなるイベントが発生するまで冗長なチェックをスキップすることで、スケジューラの負荷を軽減します。
  • スタンドアロンHyperNodeコントローラー: Volcanoスケジューラとは独立してデプロイでき、他のスケジューリングシステムがVolcanoのトポロジー検出とスーパーノード管理を利用できるようにします。
  • PodGroupトポロジーアンチアフィニティ: 新しいルールにより、推論レプリカが異なるスーパーノードに分散配置され、単一のトポロジードメインでの同時障害リスクを低減します。
  • Kubernetes 1.36サポート: リリースはKubernetes 1.36との互換性を更新し、動的リソース割り当て(DRA)のスコアリングおよびアクセラレータ処理の改善を含みます。

なぜ重要なのか

特にAIトレーニングや高性能計算向けに共有Kubernetesクラスタを管理するエンジニアリングチームにとって、リソース競合は常に課題です。NamespaceQueueの導入により、チームリーダーは中央プラットフォームエンジニアをボトルネックにすることなく、独自のリソース階層を管理できるようになります。この分散化により、管理者が認可した親キューを通じたガードレールを維持しつつ、運用ワークフローが高速化されます。これは、硬直的なクラスタレベルポリシーと、敏捷な開発チームが必要とする柔軟性のギャップを埋めるものです。

fairshareプラグインは、マルチテナント環境における一般的な問題点、すなわち「ノイジーネイバー」問題に対処します。歴史的な使用量を考慮することで、短命なジョブを大量に提出している場合でも、スケジューラはどのチームもリソースを無期限に占有できないようにします。これにより、すべてのチームにとって計算リソースへのアクセスがより予測可能になります。一方、Unschedulable Job Cacheは、大量の保留中ジョブバックログに関連するコントロールプレーンのオーバーヘッドを削減することで、クラスタの安定性とコスト効率に直接影響を与え、スケジューラが実際に実行できるジョブに集中できるようにします。

実施できること

  • Helmチャートで custom.namespace_queue_enable=true を設定し、親Queue仕様で許可された名前空間を定義することで、NamespaceQueueを有効にしてください。
  • スケジューラ構成でfairshareプラグインを設定し、DRFプラグインの前に配置することで、歴史的な使用量に基づいて保留中ジョブの順序付けに影響を与えてください。
  • 特徴ゲート UnschedulableJobCache=true を有効にして、持続的な保留中ジョブがあるクラスタでのスケジューラ負荷を軽減してください。
  • Volcanoのトポロジー検出を異なるスケジューラで使用したい場合は、custom.hypernode_controller_mode=standalone を使用してスタンドアロンHyperNodeコントローラーをデプロイしてください。
  • 可用性を高めるために推論レプリカを異なるスーパーノードに分散させる必要がある場合は、PodGroup定義を更新してトポロジーアンチアフィニティルールを含めてください。
  • NamespaceQueueは新しい名前空間付きリソースをサポートするために特定の更新を必要とするため、アップグレード前にCRDとRBAC権限を確認してください。
  • #kubernetes
  • #batch scheduling
  • #volcano
  • #resource management
  • #ai infrastructure

Bytechapストアのツール

続きを読む

すべての記事