Job
Job创建一个或多个pod,并将继续重试pod的执行,直到指定数量的pod成功终止。
当pods成功完成时,Job将跟踪成功的完成。
当达到指定的成功完成次数时,Job(即作业)即完成。
删除Job将清理它创建的pod,暂停Job将删除其活动pod,直到作业再次恢复。
一个简单的例子是创建一个作业对象,以便可靠地运行一个Pod以完成任务。如果第一个Pod失败或被删除(例如由于节点硬件故障或节点重新启动),作业对象将启动一个新的Pod。
还可以使用作业并行运行多个pod。
job类型
适合以
Job形式来运行的任务主要有三种
1.非并行
Job:- 通常只启动一个
Pod,除非该Pod失败 - 当
Pod成功终止时,立即视Job为完成状态
- 通常只启动一个
2.具有
确定完成计数(completions)的并行Job:.spec.completions字段设置为非0的正数值Job用来代表整个任务,当成功的Pod个数达到.spec.completions时,Job被视为完成
3.带
工作队列(parallelism)的并行Job:- 不设置
spec.completions,默认值为.spec.parallelism - 多个
Pod之间必须相互协调,或者借助外部服务确定每个Pod要处理哪个工作条目。 例如,任一Pod都可以从工作队列中取走最多N个工作条目 - 每个
Pod都可以独立确定是否其它Pod都已完成,进而确定Job是否完成 - 当
Job中任何Pod成功终止,不再创建新Pod - 一旦至少
1个Pod成功完成,并且所有Pod都已终止,即可宣告Job成功完成 - 一旦任何
Pod成功退出,任何其它Pod都不应再对此任务执行任何操作或生成任何输出。 所有Pod都应启动退出过程
- 不设置
第三种Job适用于并行计算?
对于非并行的Job,你可以不设置spec.completions和spec.parallelism。
这两个属性都不设置时,均取默认值1,即第一种类型Job
对于确定完成计数类型的Job,你应该设置.spec.completions为所需要的完成个数。
你可以设置.spec.parallelism,也可以不设置,其默认值为1
控制并行性
并行性请求(.spec.parallelism)可以设置为任何非负整数。如果未设置,则默认为1。
如果设置为0,则Job相当于启动之后便被暂停,直到此值被增加
实际并行性(在任意时刻运行状态的Pods个数)可能比并行性请求略大或略小,原因如下:
- 对于确定完成计数
Job,实际上并行执行的Pods个数不会超出剩余的完成数。 如果.spec.parallelism值较高,会被忽略。 - 对于工作队列
Job,有任何Job成功结束之后,不会有新的Pod启动。不过,剩下的Pods允许执行完毕 - 如果
Job控制器没有时间作出反应 - 如果
Job控制器因为任何原因(例如,缺少ResourceQuota或者没有权限)无法创建Pods。Pods个数可能比请求的数目小 Job控制器可能会因为之前同一Job中Pod失效次数过多而抑制新Pod的创建- 当
Pod被优雅地关闭时,它需要一段时间才能停止
IndexedJob特性
特性状态
FEATURE STATE: Kubernetes v1.21 [alpha]
开启方式
API server与controller manager服务通过添加--feature-gates="IndexedJob=true"开启IndexedJob特性