Skip to main content

Job and CronJob

Types of Workloads

  • Web
  • Send Email
  • Math
  • ...
apiVersion: v1
kind: Pod
metadata:
name: math-pod
spec:
containres:
- name: math-add
image: ubuntu
command: ["expr", "3", "+", "2"]
restartPolicy: Always

kubectl create -f pod-definition.yaml 像在這種單次執行完就會結束的功能,k8s 會持續重新跑這個 pod,直到設定的閥值。 這是因為 K8s 希望你的應用程式一直存在,會根據 Pod 的 restartPolicy 來看如何執行。(默認是 Always)

可以將 restartPolicy 改成 Never,這樣 K8s 就不會重新執行

Replica Set vs Jobs

Replica Set 是確保指定數量的 Pod 始終保持運行狀態。Job 是運行一組單元來完成指定任務。

apiVersion: batch/v1
kind: Job
metadata:
name: math-add-job
spec:
completions: 3
template:
spec:
containres:
- name: math-add
image: ubuntu
command: ["expr", "3", "+", "2"]
restartPolicy: Never

kubectl create -f job-definition.yaml

kubectl get jobs

kubectl get pods

Output the job: kubectl logs <job_name>

kubectl delete job math-add-job

completions -> job 成功次數 一般來說會是第一個 job 跑完,才創建第二個 假設 Job 中間失敗 Completed -> Error -> Completed -> Error -> Error -> Completed 根據上面的例子,總共跑 6 個 pod 才會完成任務

Parallelism

並行處理

apiVersion: batch/v1
kind: Job
metadata:
name: math-add-job
spec:
completions: 3
parallelism: 3
template:
spec:
containres:
- name: math-add
image: ubuntu
command: ["expr", "3", "+", "2"]
restartPolicy: Never

首先會先創立 3 個 pod,在根據成功的次數來判斷是否需要新的 Pod,並一次一個來創立 Pod

CronJobs

apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: mreporting-cron-job
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
completions: 3
parallelism: 3
template:
spec:
containers:
- name: reporting-tool
image: reporting-tool
restartPolicy: Never

kubectl create -f cron-job-definition.yaml