# Job的替代选项

# 直接创建的Pod(Bare Pod)

当 Pod 所在的节点重启或者出现故障,Pod 将被终止,且不会被自动重启。如果使用 Job,则 Job 控制器将会创建新的 Pod 以替代已经故障节点上的 Pod。基于此原因,即使您的应用实际只需要一个 Pod 执行某项任务,仍然推荐您使用 Job,而不是直接创建 Pod。

# Replication Controller

Job 是对 Replication Controller (opens new window)Deployment 的一种有效补充。Replication Controller 和 Deployment 用来管理那些我们期望其一直运行的应用(例如,web server),Job 则用于管理那些我们期望其执行并结束的应用(例如,批处理任务)

参考 Pod容器组的生命周期, Job 的 Pod 中,RestartPolicy 必须为 OnFailure 或者 Never。(如果不设定 RestartPolicy,其默认值为 Always

# 通过Job启动控制器Pod

存在这样一种操作模式:使用一个 Job 创建一个 Pod,该 Pod 接着创建其他的 Pod,并作为一种自定义的控制器 来管理这些 Pod。这种做法提供了最大程度的自由度和灵活性,但是某种程度上,非常难以上手,且与 Kubernetes 的相关度不高。

这种模式的一个例子有:某个 Job 创建一个 Pod,该 Pod 执行一段脚本,在脚本中:

这种做法的优点在于,通过 Job 可以确保整个过程最终能够完成执行,但是您需要自己编写脚本,以控制应该创建什么样的 Pod,如何在 Pod 上分配执行任务。

此做法不是 Operator 模式 (opens new window),但是与之有相似之处。

# Cron Jobs

可以使用 CronJob 来创建 Job,与 Unix/Linux 工具 cron 相似,CronJob 将在指定的日期和时间执行。

更新时间: 2019-11-02 22:47:54