前言
本文為「Kubernetes 實作手冊:基礎入門篇」課程的學習筆記。
簡介
Job 會創建一個或多個 Pod,並將持續重試 Pod 的執行,直到指定數量的 Pod 成功終止。隨著 Pod 成功結束,Job 跟蹤記錄成功完成的 Pod 數量。當數量達到指定的成功個數時,任務即結束。刪除 Job 的操作會清除所創建的全部 Pod。掛起 Job 的操作會刪除 Job 的所有活躍 Pod,直到 Job 被再次恢復執行。
Job 有完成模式和並行模式:如果 completions
大於 1,parallelism
是 1,則代表一個一個執行 Job;如果 completions
是 N,parallelism
也是 N,則代表要一次執行所有 Job。
實作
以下使用 kind 的環境。
1 | cd vagrant/kind |
首先,查看範例資料夾中的 Job 配置檔。
1 | cat introduction/job/basic.yaml |
以下是一個描述 Job 的 YAML 範例檔。由於 completions
設定為 5,parallelism
預設為 1,因此最終需要跑完 5 個成功的 Pod,一次一個。而 backoffLimit
設定為 4,代表如果出現 4 個失敗的 Pod,就要結束 Job。
1 | apiVersion: batch/v1 |
使用配置檔創建 Job 資源。
1 | kubectl apply -f introduction/job/basic.yaml |
查看此 Job 與其他資源的關係。一開始只會有一個 Pod。
1 | kubectl tree job pi |
列出所有的 Job,顯示皆已完成。
1 | kubectl get jobs |
刪除 Job 資源。
1 | kubectl delete -f introduction/job/basic.yaml |
在描述 Job 的 YAML 範例檔,將 parallelism
修改為 3,表示使用並行模式,一次運行 3 個 Pod。
1 | parallelism: 3 |
再創建一次 Job 資源。
1 | kubectl apply -f introduction/job/basic.yaml |
查看此 Job 與其他資源的關係。一開始就會有三個 Pod。
1 | NAMESPACE NAME READY REASON AGE |
刪除 Job 資源。
1 | kubectl delete -f introduction/job/basic.yaml |
在描述 Job 的 YAML 範例檔,將 activeDeadlineSeconds
修改為 3,表示一個 Job 如果運行超過 5 秒,就視為失敗。
1 | activeDeadlineSeconds: 5 |
再創建一次 Job 資源。
1 | kubectl apply -f introduction/job/basic.yaml |
列出所有的 Job,顯示皆未完成。
1 | kubectl get jobs |
觀察一下 Job 詳細資訊。
1 | kubectl describe job |
結果如下,可以看到失敗的原因為 DeadlineExceeded
。
1 | Events: |
刪除 Job 資源。
1 | kubectl delete -f introduction/job/basic.yaml |
順帶一提,由於 activeDeadlineSeconds
的權重比 backoffLimit
高,因此 Job 一旦到達所設時限,就不會再部署額外的 Pod。