Job与Cronjob
在日常开发中通常会遇到一下任务,或者按时间来进行调度的工作,
Kubernetes
提供了Job
和CronJob
两种资源对西那个来完成我们这种需求,Job
负责处理任务,仅执行一次的任务
, 而Cronjob
则就是在Job
上加上时间调度
Job
利用
Job
资源对象来创建一个任务,定义一个YAML
文件如下,执行一个倒计时的任务
1 |
|
Job
的RestartPolicy
仅支持Never
和OnFailure
不支持Always
,Job
就相当于来执行一个批处理任务,执行完就结束了,如果支持Always
就表示陷入死循环了。
创建Job
1 | kubectl apply -f job-demo.yaml |
查看Job状态
1 | kubectl get jobs |
查看 Job 的描述信息
1 | kubectl describe job job-demo |
查看Job的日志
1 | kubectl logs job-demo-52q2d |
可以看到上面已经输出了任务的执行结果,这样一个 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 管理 Job
1 | apiVersion: batch/v1beta1 |
kind
为CronJob
, 而且.spec.schedule
字段是必须填写的,用来指定任务的周期,格式和crontab
格式一样.spec.jobTemplate
用来指定需要运行的的任务,格式和Job
一样,除此之外,.spec.successfulJobsHistoryLimit
和.spec.failedJobsHistoryLimit
表示历史限制,他们指定可以保留多少个完成和失败的Job
, 默认没有限制,成功和失败的都会被保留下来,运行一个CronJob
时,Job
可以很快的就堆积起来,所以推荐设置这两个字段的值。
创建 CornJob
1 | kubectl apply -f cronjob-dmeo.yaml |
查看CronJob
1 | kubectl get cronjob |
查看 Job
1 | kubectl get jobs |
可以看到
Job
是不断增加的,每一分钟执行一次
根据YAML文件删除CronJob
1 | kubectl delete -f cronjob-demo.yaml |
根据CronJob资源对象删除
1 | kubectl delete cronjob cronjob-demo |