Job負責批量處理 短暫的一次性任務 (short lived one-off tasks) ,即僅執行一次的任務,它保證批處理任務的一個或多個Pod成功結束。 Kubernetes支援以下幾種Job:
- 非并行Job:通常建立一個Pod直至其成功結束
- 固定結束次數的Job:設定. spec.completions ,建立多個Pod,直到. spec.completions 個Pod成功結束
- 帶有工作隊列的并行Job:設定.spec.Parallelism但不設定. spec.completions ,當所有Pod結束并且至少一個成功時,Job就認為是成功
根據. spec.completions 和.spec.Parallelism的設定,可以将Job劃分為以下幾種pattern:
Job類型 | 使用示例 | 行為 | completions | Parallelism |
一次性Job | 資料庫遷移 | 建立一個Pod直至其成功結束 | 1 | 1 |
固定 結束次數 的Job | 處理工作隊列的Pod | 依次建立一個Pod運作直至completions個成功結束 | 2+ | 1 |
固定結束次數的并行Job | 多個Pod同時處理工作隊列 | 依次建立多個Pod運作直至completions個成功結束 | 2+ | 2+ |
并行Job | 多個Pod同時處理工作隊列 | 建立一個或多個Pod直至有一個成功結束 | 1 | 2+ |
Job Controller
Job Controller負責根據Job Spec建立Pod,并持續監控Pod的狀态,直至其成功結束。如果失敗,則根據restartPolicy(隻支援OnFailure和Never,不支援Always)決定是否建立新的Pod再次重試任務。

Job Spec格式
- spec.template格式同 Pod
- RestartPolicy僅支援Never或OnFailure
- 單個Pod時,預設Pod成功運作後Job即結束
- . spec.completions 标志Job結束需要成功運作的Pod個數,預設為1
- .spec.parallelism标志并行運作的Pod的個數,預設為1
- spec.activeDeadlineSeconds标志失敗Pod的重試最大時間,超過這個時間不會繼續重試
一個簡單的例子: 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 $ kubectl create - f ./ job . yaml job "pi" created $ pods = $ ( kubectl get pods -- selector = job - name = pi -- output = jsonpath ={. items .. metadata . name }) $ kubectl logs $pods 3.141592653589793238462643383279502 ... 固定結束次數的Job示例 apiVersion : batch / v1 kind : Job metadata : name : busybox spec : completions : 3 template : metadata : name : busybox spec : containers : - name : busybox image : busybox command : [ "echo" , "hello" ] restartPolicy : Never
Bare Pods
所謂Bare Pods是指直接用 PodSpec來建立的Pod ( 即不在ReplicaSets或者ReplicationCtroller的管理之下的Pods )。這些Pod在Node重新開機後不會自動重新開機,但Job則會建立新的Pod繼續任務。是以,推薦使用Job來替代Bare Pods,即便是應用隻需要一個Pod。
參考文檔
- Jobs – Run to Completion
- https://feisky.gitbooks.io/kubernetes/concepts/job.html