Job负责创建一个或多个Pod来运行指定的指令。
分为两种:
Run to Completion
, Cronjob
在多工作节点集群中,如果正在运行作业的一个节点发生故障,该作业将在可用节点中启动 pod。
job属于apis/batch/v1
:
yaml文件定义:
apiVersion: batch/v1
kind: Job
metadata:
name: job1
spec:
template:
spec:
containers:
- name: pod1
image: busybox
command: ["/bin/sh"]
args: ["-c", "echo Hello world"]
restartPolicy: Never
运行结果:
可以使用kubectl logs
查看pod的日志:
[@root:pod]$ kubectl logs job1-klf4p
Hello world
如果删除job,pod会一起跟着删除。
kubectl delete job job1
job的pod
定义中,restartPolicy
一定要为Never
或OnFailure
。pod默认的restartPolicy为Always,如果job也采用这种模式,当检测到pod状态不为running
时,会一直启动pod。
当达到指定的成功完成次数时,任务(即作业)完成。
为了运行多个 Pod,我们在作业规范下设置了一个完成值。我们将其设置为 3 以运行 3 个 POD。这次,当我们创建作业时,我们看到 Desired 计数为 3,成功计数为 0。现在,默认情况下,POD 是一个接一个创建的。仅在第一个 pod 完成后才会创建第二个 pod:
如果 Pod 失败怎么办?例如, 现在要使用一个简单的 docker 镜像,随机成功或失败。当创建此作业时,第一个 pod 成功完成,第二个失败,第三个 pod 成功完成,第四个失败,第五个失败。要完成 3 个成功,该作业第6个创建的pod 恰好成功完成。这样就完成了工作:
我们可以并行创建 Pod,而不是按顺序创建 Pod。为此,在作业规范中添加一个称为Parallelism
的属性。我们将其设置为 3 以并行创建 3 个 pod。因此,该作业首先同时创建 3 个 pod。其中两个成功完成。后面我们只需要一个,它足够智能,可以一次创建一个 pod,直到我们总共获得 3 个已完成的 pod:
在某些情况下,可能由于配置等中的逻辑错误,我们希望在重试一定次数后使作业失败。为此,可以设置spec.backoffLimit
以指定在将作业视为失败之前的重试次数。
backoffLimit
默认设置为 6。Job controller
将重新创建与作业关联的失败 Pod,并以指数回退(10 秒、20 秒、40 秒……)上限为 6 分钟。
如果在作业的下一次状态检查之前没有出现新的失败 Pod,则重置计数。