Job
Job 負責批處理任務,即僅執行一次的任務,它保證批處理任務的一個或多個 Pod 成功結束
特殊說明
- spec.template格式同Pod
- RestartPolicy僅支持Never或OnFailure
- 單個Pod時,默認Pod成功運行後Job即結束
- .spec.completions標誌Job結束需要成功運行的Pod個數,默認爲1
- .spec.parallelism標誌並行運行的Pod的個數,默認爲1
- spec.activeDeadlineSeconds標誌失敗Pod的重試最大時間,超過這個時間不會繼續重試
Example
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
metadata:
name: pi
spec:
containers:
- name: pi
image: perl
command: ["perl","-Mbignum=bpi","-wle","print bpi(2000)"]
restartPolicy: Never
CronJob Spec
- spec.template格式同Pod
- RestartPolicy僅支持Never或OnFailure
- 單個Pod時,默認Pod成功運行後Job即結束
- .spec.completions標誌Job結束需要成功運行的Pod個數,默認爲1
- .spec.parallelism標誌並行運行的Pod的個數,默認爲1
- spec.activeDeadlineSeconds標誌失敗Pod的重試最大時間,超過這個時間不會繼續重試
CronJob
Cron Job管理基於時間的 Job,即:
使用條件:當前使用的 Kubernetes 集羣,版本 >= 1.8(對 CronJob)
典型的用法如下所示:
- 在給定的時間點調度 Job 運行
- 創建週期性運行的 Job,例如:數據庫備份、發送郵件
CronJob Spec
- .spec.schedule:調度,必需字段,指定任務運行週期,格式同 Cron
- .spec.jobTemplate:Job 模板,必需字段,指定需要運行的任務,格式同 Job
- .spec.startingDeadlineSeconds:啓動 Job 的期限(秒級別),該字段是可選的。如果因爲任何原因而錯過了被調度的時間,那麼錯過執行時間的 Job 將被認爲是失敗的。如果沒有指定,則沒有期限
- .spec.concurrencyPolicy:併發策略,該字段也是可選的。它指定了如何處理被 Cron Job 創建的 Job 的併發執行。只允許指定下面策略中的一種:
-
-
- JobForbid:禁止併發運行,如果前一個還沒有完成,則直接跳過下一個
-
- Replace:取消當前正在運行的 Job,用一個新的來替換
注意,當前策略只能應用於同一個 Cron Job 創建的 Job。如果存在多個 Cron Job,它們創建的 Job 之間總是允許併發運行。
- .spec.suspend:掛起,該字段也是可選的。如果設置爲true,後續所有執行都會被掛起。它對已經開始執行的 Job 不起作用。默認值爲false。
- .spec.successfulJobsHistoryLimit和.spec.failedJobsHistoryLimit:歷史限制,是可選的字段。它們指定了可以保留多少完成和失敗的 Job。默認情況下,它們分別設置爲3和1。設置限制的值爲0,相關類型的 Job 完成後將不會被保留。
Example
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
kubectl apply -f cronjob.yaml
kubectl get cronjob
#可列出的job對象的數量取決於cronjob資源的spec.successfulJobsHistoryLimit的屬性值,默認爲3。
kubectl get jobs
kubectl get pods
kubectl logs POD
# 注意,刪除 cronjob 的時候不會自動刪除 job,這些 job 可以用 kubectl delete job 來刪除
kubectl delete cronjob hello
cronjob "hello" deleted
CrondJob 本身的一些限制
創建 Job 操作應該是冪等的
可列出的job對象的數量取決於cronjob資源的spec.successfulJobsHistoryLimit的屬性值,默認爲3。