Kubernetes Job and CronJob
一、简介
我们在日常工作中经常会遇到一些需要进行批处理和分析的需求,当然也会有按时间进行调度的工作,在 Kubernetes 集群中,提供了 Job 和 CronJob 两种资源对象来应对我们这种需求。
Job 负责处理任务,即仅执行一次的任务,它保证批处理的一个或多个Pod 成功结束。而 CronJob 则就是在 Job 的基础上加了时间调度。
我们用Job这个资源对象来创建一个任务,我们定一个Job来执行一个倒计时的任务,定义YAML文件:
apiVersion: batch/v1 kind: Job metadata: name: job-demo spec: template: metadata: name: job-demo spec: restartPolicy: Never containers: - name: counter image: registry.cn-hangzhou.aliyuncs.com/google_containers/busybox command: - 'sh' - '-c' - 'for i in `seq 10 -1 1`;do echo $i;done'
# kubectl create -f job-demo.yaml # kubectl get job NAME COMPLETIONS DURATION AGE job-demo 1/1 2s 3m7s # kubectl logs job-demo-q4bb4 10 9 8 7 6 5 4 3 2 1 # kubectl get pods NAME READY STATUS RESTARTS AGE job-demo-q4bb4 0/1 Completed 0 13s
注意Job的RestartPolicy仅支持Never和OnFailure两种,不支持Always,我们知道Job就相当于来执行一个批处理任务,执行完就结束了
三、CronJob
CronJob其实就是在Job的基础上加上了时间调度,我们可以:在给定的时间点运行一个任务,也可以周期性地在给定时间点运行。这个实际上和我们Linux中的crontab就非常类似了。
一个CronJob对象其实就对应中crontab文件中的一行,它根据配置的时间格式周期性地运行一个Job,格式和crontab也是一样的。
CronJob 格式如下:
分 时 日 月 星期 要运行的命令 第1列分钟0~59 第2列小时0~23) 第3列日1~31 第4列月1~12 第5列星期0~7(0和7表示星期天) 第6列要运行的命令
定义一个cronjob-demo.yaml文件
apiVersion: batch/v1beta1 kind: CronJob metadata: name: cronjob-demo spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: restartPolicy: OnFailure containers: - name: hello image: registry.cn-hangzhou.aliyuncs.com/google_containers/busybox args: - 'sh' - '-c' - 'date; echo Hello from Kubernetes Cluster'
# kubectl apply -f cronjob-demo.yaml cronjob.batch/cronjob-demo created # kubectl get cronjob NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE cronjob-demo */1 * * * * False 0 <none> 10s # kubectl logs cronjob-demo-1593575520-p9979 Wed Jul 1 03:52:15 UTC 2020 Hello from Kubernetes Cluster # kubectl get pods NAME READY STATUS RESTARTS AGE cronjob-demo-1593575520-p9979 0/1 Completed 0 103s cronjob-demo-1593575580-vkv8q 0/1 Completed 0 51s
我们这里的Kind是CronJob了,要注意的是.spec.schedule字段是必须填写的,用来指定任务运行的周期,格式就和crontab一样,另外一个字段是.spec.jobTemplate, 用来指定需要运行的任务,格式当然和Job是一致的。
# 删除 jobs # kubectl get job NAME COMPLETIONS DURATION AGE cronjob-demo-1593575520 1/1 8s 3m2s cronjob-demo-1593575580 1/1 2s 2m10s cronjob-demo-1593575640 1/1 3s 70s cronjob-demo-1593575700 1/1 3s 10s # kubectl delete jobs --all job.batch "cronjob-demo-1593575580" deleted job.batch "cronjob-demo-1593575640" deleted job.batch "cronjob-demo-1593575700" deleted
浙公网安备 33010602011771号