Job

Job负责创建一个或多个Pod来运行指定的指令。

分为两种:

Run to Completion , Cronjob

image-20200119205419529

在多工作节点集群中,如果正在运行作业的一个节点发生故障,该作业将在可用节点中启动 pod。

job练习

job属于apis/batch/v1

image-20200119214155173

yaml文件定义:

apiVersion: batch/v1
kind: Job
metadata: 
  name: job1
spec:
  template:
    spec:
      containers:
        - name: pod1
          image: busybox
          command: ["/bin/sh"]
          args: ["-c", "echo Hello world"]
      restartPolicy: Never

运行结果:

image-20200322191453981

image-20200322191524106

可以使用kubectl logs查看pod的日志:

[@root:pod]$ kubectl logs job1-klf4p
Hello world

如果删除job,pod会一起跟着删除。

kubectl delete job job1

一些要注意的点

restartPolicy

job的pod定义中,restartPolicy一定要为NeverOnFailure。pod默认的restartPolicy为Always,如果job也采用这种模式,当检测到pod状态不为running时,会一直启动pod。

image-20200322183948627

Completions

当达到指定的成功完成次数时,任务(即作业)完成。

为了运行多个 Pod,我们在作业规范下设置了一个完成值。我们将其设置为 3 以运行 3 个 POD。这次,当我们创建作业时,我们看到 Desired 计数为 3,成功计数为 0。现在,默认情况下,POD 是一个接一个创建的。仅在第一个 pod 完成后才会创建第二个 pod:

image-20200322192131591

如果 Pod 失败怎么办?例如, 现在要使用一个简单的 docker 镜像,随机成功或失败。当创建此作业时,第一个 pod 成功完成,第二个失败,第三个 pod 成功完成,第四个失败,第五个失败。要完成 3 个成功,该作业第6个创建的pod 恰好成功完成。这样就完成了工作:

image-20200322192256457

Parallelism

我们可以并行创建 Pod,而不是按顺序创建 Pod。为此,在作业规范中添加一个称为Parallelism的属性。我们将其设置为 3 以并行创建 3 个 pod。因此,该作业首先同时创建 3 个 pod。其中两个成功完成。后面我们只需要一个,它足够智能,可以一次创建一个 pod,直到我们总共获得 3 个已完成的 pod:

image-20200322192319665

Pod backoff failure policy

在某些情况下,可能由于配置等中的逻辑错误,我们希望在重试一定次数后使作业失败。为此,可以设置spec.backoffLimit以指定在将作业视为失败之前的重试次数。

backoffLimit默认设置为 6。Job controller将重新创建与作业关联的失败 Pod,并以指数回退(10 秒、20 秒、40 秒……)上限为 6 分钟。

如果在作业的下一次状态检查之前没有出现新的失败 Pod,则重置计数。