Kubernetes Job / CornJob

本文将介绍 Kubernetes 中的 Job / CornJob。

一、什么是 Job / CornJob?

Job 对应现实中的任务,其特点有:

  • 只运行一段时间,运行后退出
  • 关注的重点在于是否顺利运行,即任务是否执行完成

CornJob 对应现实中的定时任务,其特点是在任务的基础上增加了定时概念,要求任务按既定的执行计划执行。

二、Kubernetes 对 Job / CornJob 的设计

Kubernetes 对资源对象的设计遵循了 “单一职责” 原则,每个资源对象都只专注于一件事情,每一件事情也有且只有一个资源对象负责。另外,Kubernetes 对资源对象的设计遵循了 “组合优于继承” 原则,资源对象通过组合的方式完成协作。

因此,

  • 针对任务,Kubernetes 并没有将对任务的支持集成到 Pod 中,而是额外设计了 Job。Job 对象将负责运行超时检查、失败重试等工作,控制 Pod 以执行工作
  • 针对定时任务,Kubernetes 并没有将对定时的支持集成到 Job 中,而是额外设计了 CornJob。CornJob 将负责定时工作,控制 Job 以执行任务

三、Job 的配置文件

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
27
28
29
30
31
# Kubernetes的KPI版本号
apiVersion: batch/v1
# 资源对象的类型 【Pod、Node、Job、Service等】
kind: Job
# 元信息,用于标记资源对象
metadata:
# 名称
name: test-job
# 标签,方便归类与识别
labels:
···
# 说明,描述资源对象的目标状态
spec:
# Pod运行的超时时间
activeDeadlineSeconds: 15
# Pod的失败重试次数
backoffLimit: 2
# 总共需要运行的Pod数
completions: 4
# 允许并发运行的Pod数
parallelism: 2
# Pod模版,将根据该模版创建Pod以执行工作
template:
spec:
restartPolicy: OnFailure
containers:
- image: busybox
name: echo-job
imagePullPolicy: IfNotPresent
command: ["/bin/echo"]
args: ["hello", "world"]

四、CornJob 的配置文件

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
27
28
29
30
31
# Kubernetes的KPI版本号
apiVersion: batch/v1
# 资源对象的类型 【Pod、Node、Job、Service等】
kind: CronJob
# 元信息,用于标记资源对象
metadata:
# 名称
name: test-cornJob
# 标签,方便归类与识别
labels:
···
# 说明,描述资源对象的目标状态
spec:
# 执行计划,通过Corn语法定义
schedule: '*/1 * * * *'
# Job模版,将根据该模版创建Job以执行任务
jobTemplate:
spec:
activeDeadlineSeconds: 15
backoffLimit: 2
completions: 4
parallelism: 2
template:
spec:
restartPolicy: OnFailure
containers:
- image: busybox
name: echo-cj
imagePullPolicy: IfNotPresent
command: ["/bin/echo"]
args: ["hello", "world"]

参考

  • Kubernetes
  • Kubernetes 入门实战课
  • 深入剖析 Kubernetes