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