概要
Kubernetesスケジューラに「ワークロード対応プリエンプション」を追加するKEPです。AIトレーニングやマルチホスト推論のように複数Podが密接に連携するワークロードが、プリエンプション(高優先度Podのためにリソースを強制解放すること)によって不必要に壊滅的な影響を受ける問題を解決します。現在Kubernetes v1.36でAlpha段階です。
背景・前提知識
プリエンプションとは: クラスターのリソースが足りない場合に、高優先度のPodを動かすために低優先度のPodを強制的に退去させることです。KubernetesのPriorityClassという仕組みで優先度を設定できます。
問題のある状況: AIトレーニングジョブは100台のGPUを持つ100個のPodが同時に動いて初めて意味があります。1つのPodがプリエンプションで消えると、残り99個のPodが動いていても処理が止まります。既存のKubernetesのプリエンプションはPod単体で判断するため、「このPodを消すとワークロード全体が壊れる」という文脈を考慮できません。
KEP-4671との関係: このKEPはKEP-4671: Gang Scheduling using Workload Objectを前提にします。KEP-4671はWorkload/PodGroup APIを導入し、複数Podをひとまとまりのワークロードとして扱う基盤を作りました。KEP-5710はその上にプリエンプション機能を追加します。
詳細
KEP-5710が導入する概念:
プリエンプション単位の定義: 個々のPodではなく、PodGroupやWorkload全体をプリエンプションの単位として扱います。「このPodGroupの全Podを一括で退去させる」という判断ができるようになります。
Pod グループ優先度: PodGroup全体の優先度を設定できます。個々のPodの優先度ではなく、ワークロードレベルの優先度でスケジューリング判断を行います。
アルゴリズム: 最初のAlpha実装は既存のPodプリエンプションアルゴリズムを基盤として、ワークロード単位の判断を加えた形で実装されます。理想的なアルゴリズムの実装は将来のKEPに委ねられています。
想定ユースケース:
- AIトレーニングジョブのプリエンプション: 高優先度の別ワークロードが来た場合、トレーニングジョブ全体を一括で退去
- マルチホスト推論のプリエンプション: 推論サービスの複数ホストを適切に扱う
- 縮退モードで動けるワークロード: 一部Podが消えても動けるワークロードには部分的退去を許可
使用例
# PodGroupへの優先度設定(イメージ)
apiVersion: scheduling.x-k8s.io/v1alpha1
kind: PodGroup
metadata:
name: my-training-job
spec:
minMember: 100
# ワークロード全体の優先度
priority: 100
# プリエンプション単位の設定
preemptionPolicy: PreemptLowerPriorityクラスター管理者は、AIトレーニングジョブとリアルタイム推論サービスを同じクラスターに混在させ、優先度に基づいて適切にリソースを割り当てられるようになります。