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 频道并参加定期的社区会议。