一、什么是Job

Job 会创建一个或者多个 Pod,并将继续重试 Pod 的执行,直到指定数量的 Pod 成功终止。 随着 Pod 成功结束,Job 跟踪记录成功完成的 Pod 个数。 当数量达到指定的成功个数阈值时,任务(即 Job)结束。 删除 Job 的操作会清除所创建的全部 Pod。 挂起 Job 的操作会删除 Job 的所有活跃 Pod,直到 Job 被再次恢复执行。

Kubernetesl的Job资源,主要用来执行单次任务,比如执行一次备份任务、微调一次模型等。对于每次任务,Job控制器会创建一个或多个Pod执行相关指令,并且确保成功的个数达到预期的值才会把Job标记为成功(Completed),否则将会标记为失败(Failed)

说明:Job具有命名空间的限制

二、Job工作流程

Job工作流程图如下:

Day015-k8s任务管理-Job和Cronjob实践-图1

Kubernetes Job 工作流程简述

  1. 用户创建 Job 资源 用户在指定的 Namespace 下定义一个 Job 对象,配置任务参数(如容器镜像、命令、重试策略、并行度等)。
  2. Job Controller 监听并创建 Pod Kubernetes 的 Job Controller 检测到新创建的 Job 后,根据 completionsparallelism 配置,在相同 Namespace 下启动一个或多个 Pod(图中显示两个 Pod,表示并行执行任务)。
  3. Pod 执行任务 每个 Pod 运行用户定义的任务(如数据处理、批量作业)。Pod 执行完成后,会以退出码 0 表示成功,非零表示失败。
  4. Job Controller 监控 Pod 状态
  5. 若 Pod 成功完成,Job 记录完成数。
  6. 若 Pod 失败,Job Controller 根据 restartPolicy(如 OnFailure)重启 Pod 或创建新 Pod 重试任务,直到达到 backoffLimit(最大重试次数)。
  7. 任务完成 当所有 Pod 成功完成且完成数达到 completions 指定的数量时,Job 标记为 Completed,停止创建新 Pod。

三、Job的特点和优势

Job的特点和优势如下:

  • 环境隔离:Job可以使用不同的镜像执行任务,无需考虑版本冲突
  • 单次执行:Job任务通常是短暂的,运行一次后就结束
  • 状态追踪:Job控制器会追踪所有Pod的完成情况,一旦达到指定的成功次数,Job才会被标记为完成
  • 失败重试:任务执行失败,可以按需重新执行
  • 并行执行:同一个任务可以拆分不同的Pod并行执行,提高执行速度

四、Job使用场景

对于Job使用场景一般有两种:

  • 自动执行命令:创建一个 Job 对象以便以一种可靠的方式运行某 Pod 直到完成。 当第一个 Pod 失败或者被删除(比如因为节点硬件失效或者重启)时,Job 对象会启动一个新的 Pod
  • 并行执行多条命令:创建一个 Job 对象运行多个 Pod 直到完成