k8s Job任务
# 一次性任务job
容器按照持续运行的时间可分为两类:服务类容器和工作类容器。
- 服务类容器通常持续提供服务,需要一直运行,比如 http server,daemon 等。
- 工作类容器则是一次性任务,比如批处理程序,完成后容器就退出。
Kubernetes 的 Deployment、ReplicaSet 和 DaemonSet 都用于管理服务类容器;
对于工作类容器,用 Job。
示例:
apiVersion: batch/v1
kind: Job
metadata:
name: myjob
spec:
template:
metadata:
name: myjob
spec:
containers
- name: hello
image: busybox
command: ["echo","hello k8s job!"]
restartPolicy: Never
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
restartPolicy 指定什么情况下需要重启容器。对于 Job,只能设置为 Never 或者 OnFailure。对于其他 controller(比如 Deployment)可以设置为 Always 。
kubectl get job //查看job状态
并行执行job任务
同时运行多个 Pod,提高 Job 的执行效率,通过两个参数配置:
- parallelism:设置同时运行几个pod
- completions:设置 Job 成功完成 Pod 的总数
如果不指定 completions 和 parallelism,默认值均为 1
示例:每次运行 2 个 Pod,直到总共有 6 个 Pod 成功完成。
apiVersion: batch/v1
kind: Job
metadata:
name: myjob
spec:
parallelism: 2
completions: 6
template:
metadata:
name: myjob
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job!"]
restartPolicy: Never
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
定时执行job
Kubernetes 的 CronJob 提供了定时执行任务的功能,可以定时执行 Job
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job!"]
restartPolicy: OnFailure
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
说明:
① batch/v1beta1 是当前 CronJob 的 apiVersion
② kind: CronJob 指明当前资源的类型为 CronJob
③ schedule 指定什么时候运行 Job,其格式与 Linux cron 一致。这里 */1 * * * * 的含义是每一分钟启动一次。
④ jobTemplate 定义 Job 的模板,格式与前面 Job 一致。
上次更新: 2022/10/05, 15:51:58