k8s学习(12):Job、CronJob控制器

Job负责批处理任务,即仅执行一次的任务,他保证批处理任务的一个或多个Pod成功结束

特殊说明

  • spec.templage格式同Pod
  • RestartPolicy仅支持Never或OnFailure
  • 单个Pod时,默认Pod成功运行后Job即结束
  • .spec.completions标志Job结束需要成功运行的Pod个数,默认为1
  • .spec.parallelism标志并行运行的Pod的个数,默认为1
  • .spec.activeDeadlineSeconds标志失败Pod的重试最大时间,超过这个时间不会继续重试

举个栗子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
metadata:
name: pi
spec:
containers:
- name: pi
image: perl
imagePullPolicy: IfNotPresent
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
1
2
3
4
5
6
# 查看job
kubectl get job
# 查看pod
kubectl get pod
# 查看pod log
kubectl log pi-xxx

CronJob

cronJob管理基于时间的Job,即:

  • 在给定时间点只运行一次
  • 周期性地在给定时间点运行

使用条件:k8s集群版本>=1.8

典型用法:

  • 在给定的时间点调度Job运行
  • 创建周期性运行的Job,例如:数据库备份、发送邮件

CronJob Spec

spec.template格式同Pod

RestartPolicy仅支持Never或OnFailure

单个Pod时,默认Pod成功后Job即结束

.spec.completions标志Job结束需要成功运行的Pod个数,默认为1

.spec.parallelism标志并行运行的Pod的个数,默认为1

.spec.activeDeadlineSeconds标志失败Pod的重试最大时间,超过这个时间不会继续重试

CronJob Spec

  • **.spec.schedule:调度,必须字段,指定任务运行周期,格式同Cron**
  • .spec.jobTemplate:Job模板,必须字段,指定需要运行的任务,格式同Job
  • .spec.startingDeadlineSeconds:启动Job的期限(秒级别),该字段可选。如果因为任何原因而错过了呗调度的时间,name错过执行时间的Job将被认为是失败的。如果没有指定,则没有期限
  • .spec.concurrencyPolicy:并发策略,该字段可选。它指定了如何处理CronJob创建的Job的并发执行方式。只允许指定下面策略中的一种

Allow(默认):允许并发运行Job

Forbid:禁止并发运行,如果前一个还没有完成,则直接跳过下一个

*Replace:取消当前正在运行的Job,用一个新的来替换**

.spec.suspend:挂起,该字段可选。如果设置为true,后续所有执行都会被挂起。它对已经开始执行的Job不起作用。默认值为false

.spec.successfulJobsHistoryLimit.spec.failedJobsHistoryLimit:历史限制。可选字段。他们制定了可以保存多少完成和失败的Job。默认情况下,它们分别设置为31。设置为0时,相关类型的job完成后将不会被保留。

举个栗子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cronjob
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: cronjob-container
image: busybox
imagePullPolicy: IfNotPresent
args:
- /bin/sh
- -c
- date; echo Hello from k8s cluster
restartPolicy: OnFailure

CronJob本身的一些限制

创建Job操作应该是幂等的

CronJob不会判断job是否成功,只会定期的去创建job

其他

提高Job执行效率

1 设置restartPolicy=OnFailure

2 completionsparallelism,默认值均为 1,每次运行parallelism个pod,直到总共有completions个Pod完成