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 狀況。

瞭解更多

參與其中

這項工作由 Kubernetes 批處理工作組領導,並與 SIG Apps 社群密切合作。

如果你有興趣參與該領域的新功能開發,我建議你訂閱我們的 Slack 頻道並參加定期的社群會議。