天天看點

22 名詞解釋 Job

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再次重試任務。

22 名詞解釋 Job

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
k8s

繼續閱讀