CronJob用於管理job控制器資源的運行時間,job控制器定義的作業任務在其控制器資源創建之后便會立即執行,但cronjob可以以類似於linux操作系統的周期性任務作業計划的方式控制其運行時間點及重復運行的方式
cronjob對象支持使用的時間格式類似於crontab,略有不同的是,cronjob控制器在指定的時間點時,“?”和“*”的意義相同,都表示任何可用的有效值
一、創建cronjob對象
cronjob控制器的spec字段可嵌套使用以下字段:
jobTemplate:job控制器模板,用於為cronjob控制器生成job對象;必選字段
schedule:cron格式的作業調度運行時間點;必選字段
concurrencyPolicy:並發執行策略,可用值有Allow、Forbid和Replace,用於定義前一次作業運行尚未完成時是否以及如何運行后一次的作業
failedJobHistoryLimit:為失敗的任務執行保留的歷史記錄數,默認為1
successfulJobHistoryLimit:為成功的任務執行保留的歷史記錄數,默認為3
startingDeadlineSeconds:因各種原因缺失執行作業的時間點所導致的啟動作業錯誤的超時時長,會被計入錯誤歷史記錄
suspend:是否掛起后續的任務執行,默認為false,對運行中的作業不會產生影響
apiVersion: batch/v1beta1 kind: CronJob metadata: name: cronjob-example spec: schedule: "*/2 * * * *" jobTemplate: metadata: labels: app: mycronjob spec: containers: - name: myjob image: alpine command: - /bin/sh - -c - date; echo Hello from k8s cluster; sleep 10 restartPolicy: OnFailure
二、CronJob的控制機制
CronJob控制器以job控制器資源為其管控對象,並借助它管理pod資源對象。因此,要使用類似”kubectl get jobs -l app=*“的命令來查看cronjob控制器創建的job資源對象。不過,只有相關的job對象被調度執行時,此命令才能將其正常列出。可列出的job對象的數量取決於cronjob資源的spec.successfulJobsHistoryLimit的屬性值,默認為3。
如果作業重復執行時指定的時間點較近,而作業執行時長跨過了其兩次執行的時間長度,則會出現兩個job對象同時存在的情形。有些job對象可能會存在無法或不能同時運行的情況,這個時候就要通過spec.concurrencyPolicy屬性控制作業並存的機制,其默認值為Allow,即允許前后job,甚至屬於同一個cronjob的更多job同時運行。其他兩個可用值中,forbid用於禁止前后兩個job同時運行,如果前一個尚未結束,后一個則不予啟動(跳過),replace用於讓后一個job取代前一個,即終止前一個並啟動后一個。