1、首先介绍一下job和cronjob

在Kubernetes集群提供了Job和CronJob两种资源对象

  • Job负责处理任务,即仅执行一次的任务,它保障批处理任务的一个或多个Pod成功结束
  • CronJob则就是在Job上加上了时间调度

1、Job演示

# 这里使用job资源对象创建一个任务,用于倒计时
apiVersion: batch/v1
kind: Job
metadata:
name: job-demo
spec:
template:
metadata:
name: job-demo
spec:
restartPolicy: Never
containers:
- name: counter
image: busybox
command:
- "bin/sh"
- "-c"
- "for i in 9 8 7 6 5 4 3 2 1;do echo $i;done"

执行并检查job

$ kubectl apply -f job.yaml

[root@k8s-master01 k8s]# kubectl get job
NAME COMPLETIONS DURATION AGE
job-demo 1/1 19s 53s
[root@k8s-master01 k8s]# kubectl get pod
NAME READY STATUS RESTARTS AGE
job-demo-n6vc5 0/1 Completed 0 67s


# 还可以使用describe查看job的详细信息


只有job执行完毕后,STATUS状态才为Completed,没有执行完毕的状态为Running

Job Pod类型中的RestartPolicy (pod重启策略)仅支持Never和OnFailure两种,不支持Always,Job就相当于来执行一批处理任务,执行完就结束,如果支持Always(一直重启,直到pod健康)就会陷入死循环


2、CronJob演示

Cronjob其实就是在Job的基础上加上了时间调度,我们可以在指定的时间点运行一个类似于任务,也可以周期性的在指定时间点运行。这个实际上和Linux中的crontab非常类似。一个CronJob对象其实就是对应crontab中的一行,根据时间配置格式周期运行一个Job,配置格式和crontab相同

crontab的格式如下

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

* * * * *
分时日月周

(1) 接下来创建一个每隔30分钟打印数字的定时任务

apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cronjob-demo
spec:
schedule: "*/30 * * * *"
jobTemplate:
spec:
template:
metadata:
name: cronjob-demo
spec:
restartPolicy: Never
containers:
- name: counter
image: busybox
command:
- "bin/sh"
- "-c"
- "for i in 9 8 6 5 4 3 2 1 ;do echo $i; done"

(2) 创建完毕后可以通过下面的方式进行查看

[root@k8s-master01 k8s]# kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob-demo */30 * * * * False 0 <none> 2m13s

#每30分钟执行一次job,执行完毕job后状态会进行保留。通过get jobs和get pod都可以看到

我们需要给cronjob设置一个历史记录限制,否则jobs会一直增加(1.14版本默认只保留3个)

在spec下面添加如下2条内容,自定义历史记录限制
successfulJobsHistoryLimit: 5 #成功保留次数
failedJobsHistoryLimit: 10 #失败保留次数
spec:
successfulJobsHistoryLimit: 5 #成功保留次数
failedJobsHistoryLimit: 10
schedule: "*/30 * * * *"
jobTemplate: