Kubernetes Job和CronJob
首先介绍一下job和cronjob
在Kubernetes集群提供了Job和CronJob两种资源对象
Job负责处理任务,即仅执行一次的任务,它保障批处理任务的一个或多个Pod成功结束
CronJob则就是在Job上加上了时间调度
Job 演示
这里使用job资源对象创建一个任务,用于倒计时
cat >>Job.yaml<<EOF---apiVersion: batch/v1kind: Jobmetadata:name: job-demospec:template:metadata:name: job-demospec:restartPolicy: Nevercontainers:- name: counterimage: busyboxcommand:- "bin/sh"- "-c"- "for i in 9 8 7 6 5 4 3 2 1;do echo $i;done"EOF
执行并检查job
[]job.batch/job-demo created[]NAME COMPLETIONS DURATION AGEjob-demo 0/1 2s 4s
可以在查看一下pod状态
[]NAME READY STATUS RESTARTS AGEjob-demo-7xb9r 0/1 Completed 0 2m11s
还可以使用describe查看job的详细信息 
还可以通过pod日志,查看pod运行状态

只有job执行完毕后,STATUS状态才为Completed,没有执行完毕的状态为Running
Job Pod类型中的RestartPolicy (pod重启策略)仅支持Never和OnFailure两种,不支持Always,Job就相当于来执行一批处理任务,执行完就结束,如果支持Always(一直重启,直到pod健康)就会陷入死循环
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* * * * *分时日月周
接下来创建一个每隔30分钟打印数字的定时任务
---apiVersion: batch/v1beta1kind: CronJobmetadata:name: cronjob-demospec:schedule: "*/30 * * * *" #这里需要添加一个时间调度的周期,和crontab调度是一样的,这也是主要和job任务的区别,同时这里也不需要添加执行的命令jobTemplate: #cronjob实际上下面就是用的job配置,这里可以直接将上面job的配置复制过来即可spec:template:metadata:name: cronjob-demo #pod名称spec:restartPolicy: Nevercontainers:- name: counterimage: busyboxcommand:- "bin/sh"- "-c"- "for i in 9 8 7 6 5 4 3 2 1 ;do echo $i;done"
创建完毕后可以通过下面的方式进行查看
[root@abcdocker ~]# kubectl get cronjobNAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGEcronjob-demo */30 * * * * False 0 15m 20h[root@abcdocker ~]# kubectl get podNAME READY STATUS RESTARTS AGEcronjob-demo-1574141400-xfk86 0/1 Completed 0 75mcronjob-demo-1574143200-gzf47 0/1 Completed 0 45mcronjob-demo-1574145000-dhz7m 0/1 Completed 0 15m[root@abcdocker ~]# kubectl get jobsNAME COMPLETIONS DURATION AGEcronjob-demo-1574141400 1/1 11s 75mcronjob-demo-1574143200 1/1 9s 45mcronjob-demo-1574145000 1/1 8s 15mjob-demo 1/1 32s 20h#每30分钟执行一次job,执行完毕job后状态会进行保留。通过get jobs和get pod都可以看到

我们需要给cronjob设置一个历史记录限制,否则jobs会一直增加
在spec下面添加如下2条内容,自定义历史记录限制successfulJobsHistoryLimit: 5 #成功保留次数failedJobsHistoryLimit: 10 #失败保留次数


