这里将介绍Kubernetes工作负载资源中的Job、CronJob
Job
对于RC、RS、DS等类型的资源,其会持续运行Pod永远不会达到完成状态,其Pod会在进程退出后重新启动。为此K8s提供一种Job类型的工作负载资源,以实现完成任务后就终止。具体地,Job会创建一个或多个Pod。Job跟踪记录成功完成的Pod个数,当数量达到指定的成功个数阈值时,Job即会结束。当Pod执行失败或所在节点发生故障时,Job会创建、启动新的Pod继续执行任务。此外Job还支持以并行的方式运行多个Pod
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
| apiVersion: batch/v1
kind: Job metadata: name: my-convert-data-job-1 spec: completions: 5 parallelism: 2 template: metadata: labels: app: convert-data spec: restartPolicy: OnFailure containers: - name: my-convert-data-1 image: luksa/batch-job
|
效果如下所示
CronJob
Job资源在被创建后会立即创建Pod来运行任务。而很多时候一些任务需要在特定时间内执行或按一定频率重复执行。例如备份、生成报告等。为此K8s中提供了CronJob资源来执行对周期性任务的执行。具体地,我们通过Cron表达式设置任务的执行周期。然后CronJob根据其计划编排,在每次该执行任务的时候会先创建Job资源。然后Job资源再根据Pod模板创建相应的Pod来执行任务
1 2 3 4 5 6 7 8 9
| ┌───────────── 分钟 (0 - 59) │ ┌───────────── 小时 (0 - 23) │ │ ┌───────────── 月的某天 (1 - 31) │ │ │ ┌───────────── 月份 (1 - 12) │ │ │ │ ┌───────────── 周的某天 (0 - 6)(周日到周一;在某些系统上,7 也是星期日) │ │ │ │ │ 或者是 sun,mon,tue,web,thu,fri,sat │ │ │ │ │ │ │ │ │ │ * * * * *
|
配置文件如下所示
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 26
| apiVersion: batch/v1
kind: CronJob metadata: name: my-convert-data-job-2 spec: schedule: "0,15,30,45 * * * *" jobTemplate: spec: template: metadata: labels: app: convert-data-2 spec: restartPolicy: OnFailure containers: - name: my-convert-data-2 image: luksa/batch-job
|
效果如下所示
参考文献
- Kubernetes in Action中文版 Marko Luksa著
- 深入剖析Kubernetes 张磊著