Contents

k8s doc reading: Concepts - Workload Management - Jobs

/posts/20250625_k8s-doc-reading-workload-management-jobs/images/banner.png

doc link

job 提供一次行的工作
同時也確保 pod 必須成功結束(successfully complete)
否則 k8s 就會一直重複執行

直接來看 sample

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl:5.34.0
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

backoffLimit 指的是當 pod 失敗次數到達時
因為該 job fail
k8s 會進入 back-off delay (以 10s, 20s, 40s …遞增,上限 6 分鐘)
也就是說當 pod 失敗 4 次, 就 deplay 10s 再次執行該 pod

該 sample 會執行一個 job 進行 pi 的計算
pod 執行結束後會進入 Completed 狀態
與 deployment 不同, deployment 會一直 pod 執行 哪怕是 success complete

Parallel execution for Jobs

job 能夠設定為並行處理
預設情況下 job 只會執行一個 pod 並執行一次 可以設定以下兩個參數來達成 Parallel

.spec.completions: 該 job 需要執行幾次 .spec.parallelism: 該 job 允許幾個 pod 平行處理
修改後的 manifest 如下

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl:5.34.0
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4
  completions: 10
  parallelism: 3

此即告訴 k8s 平行執行三個 pod, 最終要執行 10 個 pod

Pod failure policy

因為預設情況 pod 如果失敗 job 只會一直重新執行 pod
pod fail policy 控制出現特定情況時 就直接當作 job 失敗 不再執行 pod

detail 可見 pod-failure-policy

Success policy

在部份情況 job 的平行處理可能僅為嘗試找出正確結果
因此可以設定成功條件來提早完成 job

detail 可見 Success policy

cleanup

job default 必須手動刪除
可以加上 .spec.ttlSecondsAfterFinished 來自動刪除