job
job用于执行一次性任务,如数据处理、分析、测试、运算等需求,运算完成后,也就结束了,不用一直计算下去。
创建一个job后,会创建一个pod,如果pod执行成功了,则此job结束,若此pod执行失败,则创建一个新的pod或者重启pod,再次执行该任务。
job的restart策略只有如下两种(没有pod的策略Always):
- Never:只要任务没有完成,则新创建pod运行,直到job完成,会产生多个pod。(默认)
- OnFailure:只要pod没有完成,就会重启pod,重新执行任务。
- 创建yaml文件,并修改镜像下载策略,任务为先执行’echo hello’,之后等待30s
kubectl create job job1 --image=busybox --dry-run=client -o yaml -- sh -c "echo hello && sleep 30" > job1.yaml
- 创建job,查看pod状态,查看job运行状态,此时pod创建成功,job还未完成
kubectl apply -f job1.yaml
kubectl get pod
kubectl get job
- 再次查看pod和job状态,pod已经正常运行完毕了,状态为Completed,job需要完成一次,顺利完成
kubectl get pod
kubectl get job
- 删除job
kubectl delete jobs.batch job1
job中指定参数
对于一些任务,测试一次成功了,不能算成功,需要多次测试,此时可以在yaml文件中使用下面的参数:
- parallelism: N,并行运行N个pod。
- completions: N,需要有M次成功才算成功。
- backoffLimit: N,如果job失败,则重启N次。
- activeDeadlineSeconds: N,job运行的最长时间,单位是秒,超过这个时间,不管job有没有完成都会被终止,没完成的pod也会被强制删除,也不会再生产新的pod。
例子:
spec
parallelism: 3
completions: 6
backoffLimit: 4
省略
job练习:计算圆周率小数点后1000位
- 创建job
kubectl create job job2 --image=perl -- perl -Mbignum=bpi -wle 'print bpi(1000)'
- 查看pod运行情况
kubectl get pod
- 查看job输出
kubectl logs job2--1-5kz6c
- 删除job
kubectl delete job job2
cronjob
cronjob是周期性的、循环性的(如每天清理临时文件),简写为cj。
- 创建yaml文件,并添加镜像下载策略,–schedule定义了什么时候开始执行指定命令,格式与Linux中crontab的格式一样。
kubectl create cj job2 --image=busybox --schedule="*/1 * * * *" --dry-run=client -o yaml -- /bin/sh -c "echo hello world" > job2.yaml
- 创建cj
kubectl apply -f job2.yaml
- 查看cj
kubectl get cj
- 查看pod,每隔1分钟运行一个pod
kubectl get pod
- 删除cj
kubectl delete -f job2.yaml
注意:在cronjob的yaml文件里,.spec.jobTemplate.spec字段里,可以写activeDeadlineSeconds参数,指定cronjob所生成的pod只能执行多久。