Kubernetes 核心概念之2.4 Job CronJob 离线任务

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
# kubectl logs pi-q8rvl

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

Kubernetes 核心概念之2.4 Job CronJob 离线任务
https://flepeng.github.io/042-云原生-02-kubernetes-31-核心概念-Kubernetes-核心概念之2-4-Job-CronJob-离线任务/
作者
Lepeng
发布于
2023年3月1日
许可协议