>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML セキュリティ
Go

Kueue - Kubernetesタスクキューに秩序を

2,626 スター

Kueue Logo

このような状況を想像してみてください:Kubernetesクラスターがフル稼働しています。片側では重要なMLモデルのトレーニングが行われ、もう片側ではアナリストがリソース集約的なETLプロセスを起動し、バックグラウンドのどこかで数十のCI/CDジョブが実行されています。これらすべてにGPU、CPU、メモリが必要で、もちろん誰もが「今すぐに」リソースを欲しがっています。おなじみの光景でしょう?結果として、いくつかのタスクはアイドル状態になり、他のタスクはより優先度の高いタスクからリソースを奪い、クラスターは非効率的に動作します。これはKubernetesでバッチワークロードを管理する任何人にとって頭を悩ませる問題です。

これはKueueがまさに解決하도록設計された問題です。kubernetes-sigsからのプロジェクトで、文字通り「キュー」を意味します。これは単なる別のスケジューラではなく、Kubernetesと深く統合し、タスクのライフサイクルを真に効率的に管理できる本格的なキューマネージャーです。

Kueueとは?誰が的需要?

Kueueは、Kubernetesタスク向けのインテリジェントなディスパッチャとして機能する一連のAPIとコントローラーです。主な仕事は、タスク什么时候可以アドミッション(つまり、ポッドを作成できる时机)され、いつ停止する価値があるか(アクティブなポッドを削除して高優先度タスクのリソースを解放)を決定することです。

誰が恩恵を受けるのか?まず第一に、Kubernetesを активно 使用しているチーム:

  • 機械学習とデータ処理:MLエンジニアやデータサイエンティストは、多くの場合、大量のGPUとCPUを必要とする numerous トレーニングジョブを起動します。Kueueはこれらのコストのかかるリソースを公正に分配するのに役立ちます。
  • ETLプロセス:データの抽出、変換、ロードタスクは非常にリソース集約的で、慎重な計画が必要です。
  • CI/CDパイプライン:特に大規模なプロジェクトでは、自動化ビルドとテストがクラスターにピーク負荷を 生成する可能性があります。
  • その他のバッチタスク:定期的に実行されリソースを奪い合うバックグラウンドプロセスがある場合、Kueueはあなたの救世主です。

本質的に、Kueueを使用すると、タスクの混沌としたストリームを秩序ある効率的に管理されたキューに変換でき、リソースはあなたのルールと優先順位に従って分配されます。

ゲームを変えるKueueの主要機能

Kueueは単にタスクをキューに入れるだけでなく、微調整と最適化のための全套装を提供します。最も興味深いものを見てみましょう。

1. インテリジェントなタスクと優先順位管理

手動のリソース配分やキューをシミュレートしようとするスクリプトは忘れてください。Kueueは柔軟なタスク管理メカニズムを提供します:

  • 優先順位:さまざまなタスクに優先順位を割り当てることができます。たとえば、重要なモデルのトレーニングタスクは、ナイトリーレポートよりも高い優先順位を持つことができます。
  • キューストラテジー:Kueueは2つの主要なストラテジーをサポートしています:
    • StrictFIFO: 古典的な「先着順」キュー。シンプルで直接的です。
    • BestEffortFIFO: キューのはるか先頭になくても、リソースが空いていればタスクをできるだけ早く開始しようとする、より柔軟なアプローチ。これにより、「先頭」が非常に具体的な何かを待っている間、リソースが空いていてもクラスターがアイドル状態になるのを防ぎます。

複数のチームがあり、それぞれが独自のタスクを起動 한다고想像してください。Kueueを使用すると、事前定義されたルールに基づいて、誰がいつクラスターにアクセスできるかを定義できます。

2. 高度なリソース管理と公平な分配

これはKueueの最も強力な側面の1つです。基本的なKubernetesスケジューリングを大幅に 超え、以下を提供します:

  • リソースフレーバーの代替可能性:たとえば、異なるモデルのGPU(NVIDIA A100とV100など)を持っているとします。Kueueは、特定のモデルを待つ代わりに、タスクがGPUを必要とする場合、空いていればどれでも使用できるように構成できます。これにより、ハードウェア利用率を最大化します。
  • 公平な共有とコホート:複数のチームや部門が1つのクラスターを使用している場合、Kueueはそれらのいずれもリソースを独占することを保証できます。キューを「コホート」に組み合わせてクォータを設定し、リソースが公正に分配されるようにできます。たとえば、MLチームにはリソースの60%、分析チームには40%を割り当てることができます。
  • プリエンプション:重要な状況では、Kueueはより重要なタスクのリソースを解放するために、低優先度タスクをプリエンプト(停止)できます。これは緊急のタスクや障害からの回復涉及する場合に特に価値があります。

3. 一般的なタスクタイプとの幅広い統合

Kueueは特定のタスクタイプに依存しません。多くの一般的なワークロードに対する組み込みサポートがあり、汎用的なツールです:

  • 標準のKubernetes BatchJob:もちろん、不可欠です。
  • Kubeflowトレーニングジョブ:モデルのトレーニングにKubeflowを使用するMLエンジニアに最適です。
  • RayJobとRayCluster:Rayベースの分散コンピューティングのサポート。
  • JobSet:関連するジョブグループの 管理用。
  • プレーンPodとPodグループ:シンプルなポッドとそのグループでさえ。
  • DeploymentとStatefulSet:興味深いことに、Kueueは serving ワークロードさえ管理でき、トレーニングと推論を混合し、動的にリソースを割り当てることが 可能になります。

これは、各タスクタイプに車輪の再発明をする必要がないことを意味します — Kueueは箱から出してすぐにあなたのスタックで動作する準備ができています。

4. オートスケーリングとマルチクラスタリング

現代的世界では、クラスターはめったに静的ではなく、時には単一の地理的位置に限定されません。Kueueはこれらの現実を考慮しています:

  • 高度なオートスケーリングサポート:KueueはCluster Autoscalerと統合でき、provisioningRequestを使用してよりインテリジェントなクラスタースケーリングを実現し、キュー内のタスクに本当に必要な場合にのみ新しいノードを 要求します。
  • マルチクラスターディスパッチ用のMultiKueue:これは素晴らしいです!複数のクラスター(たとえば、異なる地域やクラウドにある場合)がある場合、MultiKueueを使用すると空き容量を検索し、タスクをクラスター間で移行できます。これにより、信じられないほどの柔軟性と回復力が 提供され、グローバルリソースの効果的な使用が可能になります。
  • トポロジー対応スケジューリング:データセンタートポロジーを考慮したスケジューリングを通じて、ポッド間の通信帯域幅を最適化します。これは高性能コンピューティングに不可欠です。

技術的詳細:Kueueの内部

KueueはネイティブのKubernetesコントローラーとして構築されており,这意味着深いエコシステム統合です。キュー、クォータ、ワークロードを定義するための独自のCustom Resource Definitions(CRD)でKubernetesを拡張します。これにより、標準的なkubectlコマンドで管理でき、非常に便利です。

このプロジェクトは、kubernetes-sigs(Special Interest Group)の下で積極的に開発されており、Kubernetes標準への準拠と長期サポートを保証します。現在、APIはバージョンv1beta2にあり、その成熟度と安定性を示しています。チームは積極的にv1への移行に取り組んでいます。

プロジェクトのテストレベルには惊喜しました:Kubernetesのさまざまなバージョン(1.35まで)やユースケース(MultiKueueやトポロジー対応スケジューリングを含む)に対する extensive なユニットテスト、統合テスト、E2Eテスト。これはソリューションの信頼性への自信を与えます。

さらに、KueueはPrometheusメトリクスを 提供し、キューとリソースの状態の監視を容易にし、すぐに使い始められる詳細なドキュメントがあります。

実践的な応用:実際の 生活ではどのように見えるか

Kueueがワークフローをどのように変更できるか見てみましょう:

  1. MLプラットフォーム:データサイエンティストがモデルのトレーニングタスクを 提出します。特定のGPUが空くのを待つ代わりに、Kueueはタスクをキューに入れます。適切なGPUが利用可能になったとき(低優先度タスクが完了した後、またはプリエンプションの後)、Kueueはトレーニングを開始します。クラスターが過負荷の場合、MultiKueueはタスクを自動的に別の負荷の少ないクラスターにリダイレクトできます。
  2. ビッグデータ処理:ナイトリーのETLプロセスが開始されますが、日中の分析クエリのためにリソースが限られていることがわかります。Kueueはそれをキューに入れ、リソースが解放されたとき(または低優先度タスクがプリエンプトされたとき)、プロセスが開始されます。この場合、Kueueはどのチームもすべてのリソースを「使い果たす」ことを保証し、公正な分配を確保できます。
  3. マイクロサービス向けCI/CD:開発チームが積極的にコードをコミットし、数十のビルドとテストを起動しています。Kueueはこれらのタスクを管理し、本番用の重要なビルド(たとえば)がテストブランチよりも優先されることを保証し、クラスターリソースが可能な限り効率的に使用され、アイドル時間なしを保証します。

Kueueのインストールは非常にシンプルで、Kubernetes 1.29以上が必要です。1つのkubectl applyコマンドで:

kubectl apply --server-side -f https://github.com/kubernetes-sigs/kueue/releases/download/v0.15.2/manifests.yaml

その後、ドキュメントの例からキューを構成し、タスクを起動できます。

Kueueを試す価値はありますか?

Kubernetesでバッチタスク管理の問題に直面しているなら、確かにそうです。Kueueは単なるツールではありません — 効率的なリソース利用と公正な負荷分散の哲学そのものです。

特に次の場合に適しています:

  • クラスター管理者とSREエンジニア:秩序をもたらし、リソース利用を最適化し、 stability を確保するために。
  • MLOpsエンジニアとデータサイエンティスト:トレーニングタスク、推論、実験を効率的に管理するために。
  • CI/CDやバックグラウンドタスクにKubernetesを使用している開発者:プロセスを高速化し、インフラコストを削減するために。

Kueueは成熟し、十分にテストされ、 активно 開発されているプロジェクトで、強力なコミュニティがあります。多くの企業で本番環境で使用されており、これがその信頼性と実用性の最良の証明です。Kubernetesクラスターから最大限の性能を引き出し、タスクの混沌から解放されたいなら、Kueueにチャンスを与えてください — 失望させることはありません!

Kueueドキュメント 查看更多Slack上的社区立即开始使用这个强大的工具。

関連プロジェクト