和 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