Replicas 和deployment这两类资源都是用于控制workload的。这两种类型的资源一般都是持续运行的,同时还有一些辅助方式帮助workload出现异常时恢复,以及根据情况进行动态伸缩的特性。

Job

根据Job的定义创建出对应的Pod,然后关注Pod的状态, 直到满足定义。例如Pod执行成功了或者执行失败了,并且达到了重试次数。

 1---
 2apiVersion: batch/v1
 3kind: Job
 4metadata:
 5  name: pi
 6spec:
 7  template:
 8    spec:
 9      containers:
10        - name: pi
11          image: perl
12          command: ["perl", "-Mbignum=bpi","-wle", "print bpi(2000)"]
13      restartPolicy: Never
14  backoffLimit: 4

image-20210929135611702

Job正常执行结束后结果如上图。这是一个只执行一次的Job。它的操作方式就是创建一个Pod,然后运行一遍,然后就退出。如果想执行多次,则只需要增加一个参数

1completions: 2

执行2次时创建了两个Pod,然后保证这两个Pod都执行成功。

image-20210929140422641

我们在使用Deployment等Workload的时候,一般会指定restartPolicy,默认都是RestartOnFail。在Job中不能这么指定,因为这个逻辑应该由Job来控制, 而不是让Pod来控制。

CronJob

定时任务, CronJob就是在Job的基础上加上了周期定义的API

 1---
 2apiVersion: batch/v1
 3kind: CronJob
 4metadata:
 5  name: batch-job-pi
 6spec:
 7  schedule: "0,15,30,45 * * * *"
 8  jobTemplate:
 9    spec:
10      template:
11        metadata:
12          labels:
13            app: pi-job
14        spec:
15          containers:
16            - name: pi
17              image: perl
18              command: ["perl", "-Mbignum=bpi","-wle", "print bpi(2000)"]
19          restartPolicy: Never