36.2. 创建作业
作业配置由以下关键部分组成:
- pod 模板,用于描述 Pod 将创建的应用程序。
-
可选的
parallelism
参数,用于指定并行运行多少个 pod 副本应执行作业。如果没有指定,则默认为completions
参数中的值。 -
可选的
completions
参数,用于指定并发运行 pod 应该执行某个作业的数量。若不指定,这个值默认为一。
以下是一个作业资源
的示例 :
apiVersion: batch/v1 kind: Job metadata: name: pi spec: parallelism: 1 1 completions: 1 2 template: 3 metadata: name: pi spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: OnFailure 4
-
可选值,定义一个作业应并行运行多少个 pod 副本 ; 默认为
completions
。 - 可选值,定义需要成功完成多少个 pod 才能将作业标记为完成;默认值为 1。
- 控制器创建的 pod 模板。
- pod 的重启策略。这不适用于作业控制器。详情请查看 第 36.2.1 节 “已知限制”。
您还可以使用 oc run
,在一个命令中创建并启动作业。以下命令会创建并启动与上一示例中指定的相同的作业:
$ oc run pi --image=perl --replicas=1 --restart=OnFailure \ --command -- perl -Mbignum=bpi -wle 'print bpi(2000)'
36.2.1. 已知限制
作业规格重启策略只适用于 pod,不适用于作业控制器。不过,作业控制器被硬编码为可以一直重试直到作业完成为止。
因此,restartPolicy:Never
或 --restart=Never
会产生与 restartPolicy 相同的行为:OnFailure
或 --restart=OnFailure
。也就是说,作业失败后会自动重启,直到成功(或被手动放弃)为止。策略仅设定由哪一子系统执行重启。
使用 Never
策略时,作业控制器负责执行重启。在每次尝试时,作业控制器会在作业状态中递增失败次数并创建新的 pod。这意味着,每次尝试失败都会增加 pod 的数量。
使用 OnFailure
策略时,kubelet 负责执行重启。每次尝试都不会在作业状态中递增失败次数。另外,kubelet 将通过在相同节点上启动 pod 来重试失败的作业。