系列目录html
相似于Linux的Cron模块,CronJob用来运行定时性任务,或者周期性、重复性任务。注意CronJob启动的是kubernetes中的Job,不是ReplicaSet、DaemonSet等其它控制器类型。算法
如下CronJob每分钟运行一次,打印出当前时间与hello消息。json
apiVersion: batch/v1beta1 kind: CronJob metadata: name: hello spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: busybox args: - /bin/sh - -c - date; echo Hello from the Kubernetes cluster restartPolicy: OnFailure
以上内容,schedule: "/1 * * *"与Linux Cron意义相同,表示每分钟启动一次。api
$ kubectl create -f ./cronjob.yaml cronjob "hello" created
或者经过祈使命令行方式:并发
$ kubectl run hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster" cronjob "hello" created
查看CronJob状态:jsonp
$ kubectl get cronjob hello NAME SCHEDULE SUSPEND ACTIVE LAST-SCHEDULE hello */1 * * * * False 0 <none>
NAME:CronJob名称。命令行
SCHEDULE:基于时间的调度规则。rest
SUSPEND:若是其值为True表示此CronJob暂时失效,不变成False以前再也不建立新任务。对于已经建立的任务没有影响。code
ACTIVE:表示当前活动的任务数,0表示当前没有活动任务。1表示有一个活动任务。此值可能大于1,缘由以下:htm
1) 任务容许重复启动,如前一次启动后尚未退出,下一次已经启动。
2) 容许延后启动,当CronJob Controller发现由于某种缘由错误启动,而且任务容许延后启动,则会启动任务。
从CronJob状态能够看出,其输出中并无相关字段指示其所建立的JOB是否运行成功,运行如上命令查看JOB的详细信息:
查看CronJob建立的Job:
$ kubectl get jobs --watch NAME DESIRED SUCCESSFUL AGE hello-4111706356 1 1 2s
NAME:表示CronJob建立的Job名称,后边的数字由系统自动生成,保证不重复。
DESIRED:表示CronJob只建立的是最简单的一次Job,只建立一个pod。
SUCCESSFUL:表示pod成功个数。
AGE:表示上JOB生存时间。
再次查看CronJob:
$ kubectl get cronjob hello NAME SCHEDULE SUSPEND ACTIVE LAST-SCHEDULE hello */1 * * * * False 0 Mon, 29 Aug 2016 14:34:00 -0700
LAST-SCHEDULE表示最近一次调度时间,ACTIVE为0表示实例已经运行结束。
CronJob建立Job,Job建立pod,已经获知CronJob建立的Job名称:hello-4111706356,查看pod方法以下:
# Replace "hello-4111706356" with the job name in your system $ pods=$(kubectl get pods --show-all --selector=job-name=hello-4111706356 --output=jsonpath={.items..metadata.name}) $ echo $pods hello-4111706356-o9qcm $ kubectl logs $pods Mon Aug 29 21:34:09 UTC 2016 Hello from the Kubernetes cluster
删除CronJob:
$ kubectl delete cronjob hello cronjob "hello" deleted
删除CronJob会致使其建立的Job、pod一块儿被删除。
简单起见,以上示例控制CronJob行为的字段没有设置或者也能够说是采用了默认值,下面解释CronJob中的重要字段。
.spec.startingDeadlineSeconds:单位是秒,表示若是Job由于某种缘由没法按调度准时启动,在spec.startingDeadlineSeconds时间段以内,CronJob仍然试图从新启动Job,若是在.spec.startingDeadlineSeconds时间以内没有启动成功,则再也不试图从新启动。若是spec.startingDeadlineSeconds的值没有设置,则没有按时启动的任务不会被尝试从新启动。spec.startingDeadlineSeconds同时也影响到CronJob计算任务损失率。若是指定,那么CronJob计算有多少Job没有按时启动时是从当前时间向后推spec.startingDeadlineSeconds秒数,若是没有指定,那么是从当前时间向后推到最后一次成功调度的时间。不管那种算法,若是损失的按时任务超过必定个数,那么CronJob会报错并中止运行。
.spec.concurrencyPolicy:是否容许Job并发,可能的聚会有3个。
Allow:上一次Job没有完成,本次Job能够启动。
Forbid:上一次Job没有完成,本次Job不能够启动。
Replace:上一次Job没有完成,本次Job取而代之,将上一次Job杀死。
.spec.suspend:true或者false,表示是否临时阻塞CronJob。
.spec.successfulJobsHistoryLimit:保存成功历史Job的数量,默认3,若是为0则CronJob在Job成功后当即删除。
.spec.failedJobsHistoryLimit:保存失败历史Job的数量,默认1,若是为0则CronJob在Job失败后当即删除。