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