Files
kuboard-press/learning/k8s-intermediate/workload/wl-job/when.md
huanqing.shao fd664d3065 Job
2019-11-02 22:47:54 +08:00

44 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
vssueId: 151
layout: LearningLayout
description: Kubernetes中的Job对象将创建一个或多个Pod_并确保指定数量的Pod可以成功执行到进程正常结束_本文描述Job有哪些替代选项
meta:
- name: keywords
content: Kubernetes培训,K8S教程,K8S培训,Kubernetes Job
---
# Job的替代选项
<AdSenseTitle>
</AdSenseTitle>
## 直接创建的PodBare Pod
当 Pod 所在的节点重启或者出现故障Pod 将被终止,且不会被自动重启。如果使用 Job则 Job 控制器将会创建新的 Pod 以替代已经故障节点上的 Pod。基于此原因即使您的应用实际只需要一个 Pod 执行某项任务,仍然推荐您使用 Job而不是直接创建 Pod。
## Replication Controller
Job 是对 [Replication Controller](https://kubernetes.io/docs/user-guide/replication-controller)、[Deployment](/learning/k8s-intermediate/workload/wl-deployment/) 的一种有效补充。Replication Controller 和 Deployment 用来管理那些我们期望其一直运行的应用例如web serverJob 则用于管理那些我们期望其执行并结束的应用(例如,批处理任务)
参考 [Pod容器组的生命周期](/learning/k8s-intermediate/workload/pod-lifecycle.html) Job 的 Pod 中,`RestartPolicy` 必须为 `OnFailure` 或者 `Never`。(如果不设定 `RestartPolicy`,其默认值为 `Always`
## 通过Job启动控制器Pod
存在这样一种操作模式:使用一个 Job 创建一个 Pod该 Pod 接着创建其他的 Pod并作为一种自定义的[控制器](/learning/k8s-bg/architecture/controller.html) 来管理这些 Pod。这种做法提供了最大程度的自由度和灵活性但是某种程度上非常难以上手且与 Kubernetes 的相关度不高。
这种模式的一个例子有:某个 Job 创建一个 Pod该 Pod 执行一段脚本,在脚本中:
* 启动 Spark master controller参考 [spark example](https://github.com/kubernetes/examples/tree/master/staging/spark/README.md)
* 运行 spark driver
* 执行清理操作
这种做法的优点在于,通过 Job 可以确保整个过程最终能够完成执行,但是您需要自己编写脚本,以控制应该创建什么样的 Pod如何在 Pod 上分配执行任务。
> 此做法不是 [Operator 模式](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/),但是与之有相似之处。
## Cron Jobs
可以使用 [CronJob](/learning/k8s-intermediate/workload/wl-cronjob/) 来创建 Job与 Unix/Linux 工具 `cron` 相似CronJob 将在指定的日期和时间执行。