Kubernetes工作负载资源之Job、CronJob

这里将介绍Kubernetes工作负载资源中的Job、CronJob

abstract.png

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
# API组、版本
apiVersion: batch/v1
# 资源类型
kind: Job
metadata:
# Job名称
name: my-convert-data-job-1
spec:
# 该Job需要执行5次, 每次执行该Job都需要创建一个Pod
completions: 5
# 该Job并行执行的最大Pod数
parallelism: 2
# Pod 模板
template:
metadata:
# 标签信息
labels:
app: convert-data
spec:
# 重启策略: 失败时
restartPolicy: OnFailure
# 容器信息
containers:
- name: my-convert-data-1
image: luksa/batch-job

效果如下所示

figure 1.jpeg

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
# API组、版本
apiVersion: batch/v1
# 资源类型
kind: CronJob
metadata:
# Job名称
name: my-convert-data-job-2
spec:
# Cron 表达式: 每天每小时的0、15、30、45分钟调度执行
schedule: "0,15,30,45 * * * *"
# Job 模板
jobTemplate:
spec:
# Pod 模板
template:
metadata:
# 标签信息
labels:
app: convert-data-2
spec:
# 重启策略: 失败时
restartPolicy: OnFailure
# 容器信息
containers:
- name: my-convert-data-2
image: luksa/batch-job

效果如下所示

figure 2.jpeg

参考文献

  1. Kubernetes in Action中文版 Marko Luksa著
  2. 深入剖析Kubernetes 张磊著
0%