和 Linux 中的 Cron Job 一樣,K8s 在 1.5 版本之後開始支援定時啟動的任務 CronJob ,只要掌握 Cron Job 的定時運算式,就可以學會使用 CronJob 了!
[分] [時] [日] [月] [星期]
, , - , * , /,需使用 0-59 的整數, , - , * , /,需使用 0-23 的整數, , - , * , /, ?,需使用 1-31 的整數, , - , * , /,需使用 1-12 的整數或 JAN ~ DEC
, , - , * , /, ?,需使用 0-6 的整數(從週日開始)或 SUN~SAT
*:表示符合該域的任意值,每當時間更新一次就會判斷,例如如果在分鐘的部分使用 *,則會在每分鐘都觸發一次/:格式是 <T1>/<T2> 表示從 T1 時間開始觸發,然後每隔 T2 時間再次觸發,例如分鐘欄位是*/5,便代表每隔五分鐘執行,10/5則是從第十分鐘起每五分鐘執行?:用在可以用文字表示的部分,如月或星期,符合指定的字便會執行 (a wildcard value that matches a single character)更多資訊可以查看 Cron - 维基百科,自由的百科全书 (wikipedia.org)
spec.jobTemplate在此區塊定義CronJob的執行項目,包括執行的 container image、commands等等,內容和job的部分相同
startingDeadlineSeconds我們可以利用 startingDeadlineSeconds 這個參數來定義 job 在啟動多少秒後為timeout failure
spec.concurrencyPolicy利用這個參數可以設置該不該允許job並行處理,預設為 allow,另有 Forbid 和 Replace,作用和字面上的意思類似:
Allow:允許job並行Forbid:不允許job並行,且後一個job必須等前一個執行完畢才可接著執行(前一個沒完後一個會被忽略)Replace:和 Forbid 一樣,但若前一個 job 未完成但到了新的job的觸發時間時,新的 job 會取代舊的 job 執行註:以上設置僅對同一個 Cronjob 創建的 job 有效,若有多個 CronJob 則仍可並行
spec.successfulJobsHistoryLimit:紀錄成功運行的 job,預設為3spec.failedJobsHistoryLimit:記錄失敗運行的 job,預設為1執行 kubectl create -f <YAML>就可以啟動Cronjob了
執行 kubectl delete cronjob <CronJob名稱>
CronJobs | Google Kubernetes Engine (GKE) | Google Cloud
Running Automated Tasks with a CronJob | Kubernetes.
使用 CronJob 运行自动化任务 | Kubernetes