job
主要用于负责**批量处理(一次要处理指定数量任务)短暂的一次性(每个任务仅运行一次就结束)**任务。Job特点如下:
- 当Job创建的pod执行成功结束时,Job将记录成功结束的pod数量
- 当成功结束的pod达到指定的数量时,Job将完成执行
关于重启策略设置的说明:
- 如果指定为OnFailure,则job会在pod出现故障时重启容器,而不是创建pod,failed次数不变
- 如果指定为Never,则job会在pod出现故障时创建新的pod,并且故障pod不会消失,也不会重启,failed次数加1
job.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| apiVersion: batch/v1 kind: Job metadata: name: job labels: app: job spec: manualSelector: true parallelism: 2 completions: 3 backoffLimit: 6
template: metadata: name: job labels: app: job spec: containers: - name: job image: busybox command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 2;done"] restartPolicy: Never selector: matchExpressions: - key: app operator: In values: - job
|
查看效果
成功3次后job销毁
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| [root@release-master ~]# kubectl get pods -w NAME READY STATUS RESTARTS AGE job-4x6mz 1/1 Running 0 35s job-xx7fx 1/1 Running 0 35s job-4x6mz 0/1 Completed 0 36s job-4s8z4 0/1 Pending 0 0s job-4s8z4 0/1 Pending 0 0s job-xx7fx 0/1 Completed 0 36s job-4s8z4 0/1 ContainerCreating 0 0s
[root@release-master ~]# kubectl get job -w NAME COMPLETIONS DURATION AGE job 0/3 6s 7s job 1/3 36s 37s job 2/3 36s 37s job 3/3 73s 74s
|
cronjob
CronJob控制器以Job控制器资源为其管控对象,并借助它管理pod资源对象,Job控制器定义的作业任务在其控制器资源创建之后便会立即执行,但CronJob可以以类似于Linux操作系统的周期性任务作业计划的方式控制其运行时间点及重复运行的方式。也就是说,CronJob可以在特定的时间点(反复的)去运行job任务。
cron-job.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| apiVersion: batch/v1 kind: CronJob metadata: name: cron-job labels: app: cron-job spec: concurrencyPolicy: Allow schedule: "*/1 * * * *" failedJobsHistoryLimit: 1 successfulJobsHistoryLimit: 3 startingDeadlineSeconds: 30 jobTemplate: spec: parallelism: 2 completions: 3 backoffLimit: 6
template: metadata: name: cron-job labels: app: cron-job spec: containers: - name: cron-job image: busybox command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 2;done"] restartPolicy: Never
|
每分钟执行一次

每子job里需要成功执行3次任务, 然后同时允许2个pod并行执行
