一、前言

本文主要以下几方面介绍k8s中的Job:

  • 什么是Job
  • Job使用场景
  • Job配置参数详解
  • Job如何创建
  • Job如何终止与清理

本文主要以下几方面介绍k8s中的CronJob:

  • 什么是CronJob
  • CronJob使用场景
  • CronJob配置参数详解
  • CronJob如何创建
  • CronJob如何终止与清理

二、什么是Job

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

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

三、Job使用场景

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

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

四、Job配置参数详解

下面以一个示例来说明下Job配置参数:·

apiVersion: batch/v1
kind: Job
metadata:
  labels:
    job-name: echo
  name: echo
  namespace: default
spec:
  suspend: true # 1.21+
  ttlSecondsAfterFinished: 100
  backoffLimit: 4
  completions: 1
  parallelism: 1
  template:
    spec:
      containers:
      - command:
        - echo
        - Hello, Job
        image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
        imagePullPolicy: Always
        name: echo
        resources: {}
      restartPolicy: Never

其中主要配置参数如下:

  • backoffLimit:如果任务执行失败,失败多少次后不再执行
  • completions:有多少个Pod执行成功,认为任务是成功的。如果为空默认和parallelism数值一样
  • parallelism:并行执行任务的数量,如果parallelism数值大于未完成任务数,只会创建未完成的数量; 比如completions是4,并发是3,第一次会创建3个Pod执行任务, 第二次只会创建一个Pod执行任务
  • ttlSecondsAfterFinished:Job在执行结束之后(状态为completed或 Failed)自动清理。设置为0表示执行结束立即删除,不设置则不会清除,需要开启TTLAfterFinished特性