K8s Job
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
Job正常执行结束后结果如上图。这是一个只执行一次的Job。它的操作方式就是创建一个Pod,然后运行一遍,然后就退出。如果想执行多次,则只需要增加一个参数
1completions: 2
执行2次时创建了两个Pod,然后保证这两个Pod都执行成功。
我们在使用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