系列目錄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失敗後當即刪除。