# Kubernetes的Jobs和CronJobs的使用
# 1 前言
有时项目需要启动仅执行一次的任务,而不是像Web
应用一样长期运行。Kubernetes Jobs
负责处理任务,保证任务的成功执行,能定义执行次数和并行数等。而CronJobs
则加上时间调度,可定时执行。
# 2 Jobs
# 2.1 简单示例
直接上示例:
apiVersion: batch/v1
kind: Job
metadata:
name: pkslow-job
spec:
template:
spec:
containers:
- name: busybox
image: busybox
command: ['echo', 'www.pkslow.com']
restartPolicy: Never
上面的功能是打印一行字符串。restartPolicy
可以设置为OnFailure
或Never
,不能设置为Always
:
The Job "pkslow-job" is invalid: spec.template.spec.restartPolicy: Unsupported value: "Always": supported values: "OnFailure", "Never"
执行如下:
$ kubectl apply -f job.yaml
job.batch/pkslow-job created
$ kubectl get job
NAME COMPLETIONS DURATION AGE
pkslow-job 0/1 8s 8s
# 2.2 设置其它参数
参数spec.completions
表示所需要的完成个数,只有完成这么多个才能算整个Job
完成。
参数spec.parallelism
表示几个Pod
并行执行。
添加这两个参数如下:
apiVersion: batch/v1
kind: Job
metadata:
name: pkslow-job
spec:
template:
spec:
containers:
- name: busybox
image: busybox
command: ['echo', 'www.pkslow.com']
restartPolicy: Never
completions: 6
parallelism: 2
直接更新是不行的,对于同一个Job
,这是不可变参数:
$ kubectl apply -f job.yaml
The Job "pkslow-job" is invalid: spec.completions: Invalid value: 2: field is immutable
先删掉再执行就可以了。
$ kubectl delete -f job.yaml
job.batch "pkslow-job" deleted
$ kubectl apply -f job.yaml
job.batch/pkslow-job created
可以看到,会有两个Pod
同时运行,最终如果6个都完成,才表示整个Job
完成。
更多参数请参考文档:Kubernetes Job (opens new window)
# 3 CronJobs
定时的CronJobs
就是在Jobs
的基础加上Cron 表达式
,示例如下:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: pkslow-cronjob
spec:
jobTemplate:
spec:
template:
spec:
containers:
- name: busybox
image: busybox
command: ['echo', 'www.pkslow.com']
restartPolicy: Never
schedule: "*/1 * * * *"
successfulJobsHistoryLimit: 10
failedJobsHistoryLimit: 5
schedule
是Cron 表达式
;
successfulJobsHistoryLimit
和failedJobsHistoryLimit
设置记录成功或失败任务的个数。
这个会每分钟执行一次,如下:
更多请参考官方文档:https://kubernetes.io/zh/docs/concepts/workloads/controllers/cron-jobs/
# 4 总结
本文主要是简单介绍,提供个yaml
模板。
参考资料: