Contents

Kubernetes 的 Job

直接進入重點

Job

會結束的程式。不會結束的會稱為Daemon。

執行方式

Completions/Parallelism

Completions: 啟動任務要執行幾次
Parallelism: 同時間執行幾個程式

Job Completions: 2 , Parallelism: 1

graph A[Job Completions: 2 , Parallelism: 1] -->|Step.1| B[建立 Pod] B --> |Step.2| C[Pod執行中] C --> |Step.3| D[Pod 執行完成] D -->|Step.4 Observe| A A --> |Step.5| B1[建立 Pod] B1 --> |Step.6|C1[Pod執行中] C1 --> |Step.7|D1[Pod 執行完成] D1 -->|Step.8 Observe| A

Job Completions: 2 , Parallelism: 2

用程式觀點,簡單說就是2個執行緒執行`,同時間執行兩個工作。

graph A[Job Completions: 2 , Parallelism: 2] -->|Step1.1| B[建立 Pod] B --> |Step-1.2| C[Pod執行中] C --> |Step-2.3| D[Pod 執行完成] D -->|Step-1.4 Observe| A A --> |Step-2.1| B1[建立 Pod] B1 --> |Step-2.2|C1[Pod執行中] C1 --> |Step-2.3|D1[Pod 執行完成] D1 -->|Step-2.4 Observe| A

上面圖片Step1,Step2 是一起做的。我多加一個Thread 來表示可能會比較清楚。

graph ST[StartJob] --> |Step-1 and 2|B & B1 subgraph thread1 B[建立 Pod] --> |Step-1.2| C[Pod執行中] C --> |Step-1.3| D[Pod 執行完成] end subgraph thread2 B1[建立 Pod] --> |Step-2.2|C1[Pod執行中] C1 --> |Step-2.3|D1[Pod 執行完成] end D & D1 --> END[EndJob]

backofflimit

跑失敗幾次就不跑

activeDeadLineSeconds

執行超過多久會自動關閉,Pod狀態會變成failed。

Tree

Job->Pod*

官方實例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4
1
kubectl apply -f https://kubernetes.io/examples/controllers/job.yaml

自動清理

完成 100 秒就會清除,我在 kind 沒有效果…

FEATURE STATE: Kubernetes v1.12 [alpha]

可能我的環境還不支援??

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
apiVersion: batch/v1
kind: Job
metadata:
  name: pi-with-ttl
spec:
  ttlSecondsAfterFinished: 100
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never

Crontab

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            imagePullPolicy: IfNotPresent
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

Queue Work

Tree

1
kubectl tree cronjob xxx

CronJob->Job->Pod