一、前言¶
本文主要以下几方面介绍k8s中的Job:
- 什么是Job
- Job使用场景
- Job配置参数详解
- Job如何创建
- Job如何终止与清理
本文主要以下几方面介绍k8s中的CronJob:
- 什么是CronJob
- CronJob使用场景
- CronJob配置参数详解
- CronJob如何创建
- CronJob如何终止与清理
二、什么是Job¶
Job 会创建一个或者多个 Pod,并将继续重试 Pod 的执行,直到指定数量的 Pod 成功终止。 随着 Pod 成功结束,Job 跟踪记录成功完成的 Pod 个数。 当数量达到指定的成功个数阈值时,任务(即 Job)结束。 删除 Job 的操作会清除所创建的全部 Pod。 挂起 Job 的操作会删除 Job 的所有活跃 Pod,直到 Job 被再次恢复执行。
说明:Job具有命名空间的限制
三、Job使用场景¶
对于Job使用场景一般有两种:
- 自动执行命令:创建一个 Job 对象以便以一种可靠的方式运行某 Pod 直到完成。 当第一个 Pod 失败或者被删除(比如因为节点硬件失效或者重启)时,Job 对象会启动一个新的 Pod
- 并行执行多条命令:创建一个 Job 对象运行多个 Pod 直到完成
四、Job配置参数详解¶
下面以一个示例来说明下Job配置参数:·
apiVersion: batch/v1
kind: Job
metadata:
labels:
job-name: echo
name: echo
namespace: default
spec:
suspend: true # 1.21+
ttlSecondsAfterFinished: 100
backoffLimit: 4
completions: 1
parallelism: 1
template:
spec:
containers:
- command:
- echo
- Hello, Job
image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
imagePullPolicy: Always
name: echo
resources: {}
restartPolicy: Never
其中主要配置参数如下:
- backoffLimit:如果任务执行失败,失败多少次后不再执行
- completions:有多少个Pod执行成功,认为任务是成功的。如果为空默认和parallelism数值一样
- parallelism:并行执行任务的数量,如果parallelism数值大于未完成任务数,只会创建未完成的数量; 比如completions是4,并发是3,第一次会创建3个Pod执行任务, 第二次只会创建一个Pod执行任务
- ttlSecondsAfterFinished:Job在执行结束之后(状态为completed或 Failed)自动清理。设置为0表示执行结束立即删除,不设置则不会清除,需要开启TTLAfterFinished特性