k8s中job和pod的區別


Job負責批量處理短暫的一次性任務 (short lived one-off tasks),即僅執行一次的任務,它保證批處理任務的一個或多個Pod成功結束。job是一種特殊的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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM