Kubernetes 1.33: Job 的 SuccessPolicy 進入 GA 階段
我謹代表 Kubernetes 專案高興地宣佈,Job 的 success policy(成功策略)已在 v1.33 版本中正式釋出(General Availability,GA)。
關於 Job 的 Success Policy
在批處理工作負載中,你可能希望使用 leader-follower 模式,例如 MPI,其中 leader 控制執行,包括 follower 的生命週期。
在這種情況下,即使某些索引失敗了,你也可能希望將其標記為成功。不幸的是,在大多數情況下,一個未使用成功策略的 leader-follower 模式的 Kubernetes Job 會要求**所有** Pod 都成功完成,該 Job 才能達到整體的成功狀態。
對於 Kubernetes Job,API 允許你使用 .spec.successPolicy
欄位來指定提前退出的標準(你只能為索引式 Job 使用 .spec.successPolicy
欄位)。該欄位透過一組規則來描述,可以使用一個 Job 的成功索引列表,或定義成功索引所需的最小數量。
這個新穩定的欄位對於科學模擬、AI/ML 和高效能計算(HPC)批處理工作負載特別有價值。這些領域的使用者經常執行大量實驗,可能只需要特定數量的實驗成功完成,而不需要所有實驗都成功。在這種情況下,leader 索引的失敗是唯一相關的 Job 退出標準,而各個 follower Pod 的結果僅透過 leader 索引的狀態間接處理。此外,follower 不知道何時可以自行終止。
在 Job 滿足任何**成功策略**後,該 Job 會被標記為成功,並且所有 Pod 都會被終止,包括正在執行的 Pod。
工作原理
以下 Job 清單的摘錄使用 .successPolicy.rules[0].succeededCount
,展示瞭如何使用自定義成功策略:
parallelism: 10
completions: 10
completionMode: Indexed
successPolicy:
rules:
- succeededCount: 1
在這裡,當一個索引成功時,無論其編號如何,該 Job 都會被標記為成功。此外,你可以在 .successPolicy.rules[0].succeededCount
中對 succeededCount
約束索引號,如下所示:
parallelism: 10
completions: 10
completionMode: Indexed
successPolicy:
rules:
- succeededIndexes: 0 # index of the leader Pod
succeededCount: 1
此示例表明,一旦具有特定索引(Pod 索引 0)的 Pod 成功,該 Job 就會被標記為成功。
一旦 Job 達到了 successPolicy
規則之一,或根據 .spec.completions
達到了其 Complete
標準,kube-controller-manager 中的 Job 控制器會將 SuccessCriteriaMet
狀況新增到 Job 狀態中。之後,Job 控制器會為具有 SuccessCriteriaMet
狀況的 Job 啟動 Pod 的清理和終止。最終,當 Job 控制器完成清理和終止後,Job 會獲得 Complete
狀況。
瞭解更多
- 閱讀成功策略的文件。
- 閱讀 Job 成功/完成策略的 KEP。
參與其中
這項工作由 Kubernetes 批處理工作組領導,並與 SIG Apps 社群密切合作。
如果你有興趣參與該領域的新功能開發,我建議你訂閱我們的 Slack 頻道並參加定期的社群會議。