Job 和 CronJob
- job:一次性任务:一次性执行完就结束
- CronJob:定时任务:周期性执行
Job 是 K8S 中用来控制批处理型任务的 API 对象。批处理业务与长期伺服业务的主要区别就是批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。
Job 管理的 Pod 根据用户的设置把任务成功完成就自动退出了。成功完成的标志根据不同的 spec.completions 策略而不同:
- 单 Pod 型任务有一个 Pod 成功就标志完成;
- 定数成功行任务保证有 N 个任务全部成功;
- 工作队列性任务根据应用确定的全局成功而标志成功。
Job
- Job 有普通任务(Job)。一次性执行。
- 应用场景:离线数据处理,视频解码等业务
Job 示例
1、创建 yaml 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| # vim job.yaml
apiVersion: batch/v1 kind: Job # 类型 metadata: name: pi spec: template: spec: containers: - name: pi image: perl # 计算两千位的值 command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] # 重启策略 restartPolicy: Never # 限制重启的次数 backoffLimit: 4
|
2、创建容器
1
| kubectl create -f job.yaml
|
3、查看容器
1 2 3 4
| # kubectl get pods
NAME READY STATUS RESTARTS AGE pi-q8rvl 0/1 Completed 0 4m5s
|
4、查看job
1 2 3 4
| # kubectl get job
NAME COMPLETIONS DURATION AGE pi 1/1 91s 106s
|
5、查看日志
1 2 3
|
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513...............
|
6、删除方法
1
| kubectl delete -f job.yaml
|
CronJob
- 定时任务,像 Linux 的 Crontab 一样。
- 应用场景:通知,备份
CronJob 示例
1、创建一个 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
| # vim cronjob.yaml
apiVersion: batch/v1beta1 kind: CronJob metadata: name: hello spec: # 分时日月周,与crontab语法一样 schedule: "*/1 * * * *" # job模板 jobTemplate: spec: template: spec: # 容器配置 containers: - name: hello image: busybox # 到达时间段执行命令 args: - /bin/sh - -c - date; echo Hello from the Kubernetes cluster # 如果异常退出就重启 restartPolicy: OnFailure
|
2、创建容器
1
| kubectl create -f cronjob.yaml
|
3、查看容器
1 2 3 4
| # kubectl get pod
NAME READY STATUS RESTARTS AGE hello-1566882780-t88jl 0/1 Completed 0 71s
|
4、查看 cronjob
1 2 3
| # kubectl get cronjob NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE hello */1 * * * * False 0 <none> 21s
|
5、查看日志
1 2 3 4
| # kubectl logs hello-1566883020-7hw2s
Tue Aug 27 05:17:10 UTC 2019 Hello from the Kubernetes cluster
|
6、每次执行,就会多出一个 pod
7、删除
1
| kubectl delete -f cronjob.yaml
|