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
    • 一旦至少1Pod成功完成,并且所有Pod都已终止,即可宣告Job成功完成
    • 一旦任何Pod成功退出,任何其它Pod都不应再对此任务执行任何操作或生成任何输出。 所有Pod都应启动退出过程

第三种Job适用于并行计算?

对于非并行的Job,你可以不设置spec.completionsspec.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或者没有权限)无法创建PodsPods个数可能比请求的数目小
  • Job控制器可能会因为之前同一JobPod失效次数过多而抑制新Pod的创建
  • Pod被优雅地关闭时,它需要一段时间才能停止

IndexedJob特性

特性状态

FEATURE STATE: Kubernetes v1.21 [alpha]

开启方式

API servercontroller manager服务通过添加--feature-gates="IndexedJob=true"开启IndexedJob特性

Copyright © weiliang 2021 all right reserved,powered by Gitbook本书发布时间: 2024-04-22 16:03:41

results matching ""

    No results matching ""