3.8 Job
一个Job创建1个或多个Pod,并确保特定数量的Pod被成功终止,当pods成功完成时,Job将跟踪成功完成的操作。当达到指定数量的成功完成时,任务(即Job)就完成了,删除Job时会清理它创建的Pod。一个简单的例子是创建一个Job对象,以便可靠地运行一个pod完成。如果第一个Pod失败或删除了,Job对象将会开始一个新的Pod。还可以使用一个Job并行运行多个Pod。
【Job的规约Spec】
和其他的差不多,Job对象需要apiVersion
、kind
和metadata
字段,同样需要.spec
:
- Pod Template:
.spec.template
是.spec
必要的字段,是创建Pod的模板,和pod中的模式一样,除了它是嵌套的没有apiVersion
或kind
,此外还需要Pod的字段,Job中的pod template必须指定合适的标签和重启策略,RestartPolicy
只能设置为Never
或OnFailure
; - Pod Selector:
.spec.selector
是可选参数,一般不需要指定; - Parallel Jobs:主要有3种类型的task合适作为Job运行:
- 非并行Job(Non-parallel):正常只有一个Pod启动(除非Pod失败),一旦pod成功终止,Job就完成了;
- 固定计数的并行Job:为
.spec.completions
指定一个非0整数,一个Job代表多个task,在1到.spec.completions
范围内的每个值都有一个成功的pod时完成; - 具有work queue的并行Job:不需要指定
.spec.completions
(默认为.spec.parallelism
),Pod之间自我协调或通过额外的Service决定在哪个Pod上运行,一个pod可以从work queue中获取一批最多n