Kubernetes --(k8s)Job、CronJob

Job

https://www.kubernetes.org.cn/job
https://www.kubernetes.org.cn/cronjobnode

Job負責批量處理短暫的一次性任務 (short lived one-off tasks),即僅執行一次的任務,它保證批處理任務的一個或多個Pod成功結束.數據庫

Kubernetes支持如下幾種Job:api

  1. 非並行Job:一般建立一個Pod直至其成功結束
  2. 固定結束次數的Job:設置.spec.completions,建立多個Pod,直到.spec.completions個Pod成功結束
  3. 帶有工做隊列的並行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+

實驗1:一次性Job

第一步:編寫job的yml文件app

apiVersion: batch/v1
kind: Job
metadata:
   name: job
spec:
   template:
      spec:
         restartPolicy: Never
         containers:
         - name: job
           image: busybox
           command: ["echooo","Hello World"]

第二步:執行yml文件3d

╭─root@node1 ~  
╰─➤  kubectl apply -f job.yml      
job.batch/job created

第三步:查看podrest

╭─root@node1 ~  
╰─➤  kubectl get pod
NAME        READY   STATUS               RESTARTS   AGE
job-jhlsf   0/1     ContainerCannotRun   0          53s
job-ldxnr   0/1     ContainerCannotRun   0          23s
job-m6cpf   0/1     ContainerCreating    0          3s
job-m8skh   0/1     ContainerCannotRun   0          64s

問題發現:建立了不少pod,爲何?code

解答:Job Controller負責根據Job Spec建立Pod,並持續監控Pod的狀態,直至其成功結束。若是失敗,則根據restartPolicy(只支持OnFailure和Never,不支持Always)決定是否建立新的Pod再次重試任務。若是重啓策略爲OnFailure的話,pod會一直重啓!blog

實驗2:固定結束次數的並行Job

第一步:編寫yml文件隊列

apiVersion: batch/v1
kind: Job
metadata: 
   name: job
spec:
   completions: 2    # 完成數
   parallelism: 2    # 並行數
   template:
      spec:
         restartPolicy: OnFailure
         containers:
         - name: job
           image: busybox
           command: ["/bin/sh","-c","sleep 5;echo Hello World"]

第二步:運行crontab

╭─root@node1 ~  
╰─➤  kubectl apply -f job.yml 
job.batch/job created

第三步:查看

╭─root@node1 ~  
╰─➤  kubectl get pod
NAME        READY   STATUS      RESTARTS   AGE
job-x5tfw   1/1     Running     0          35s
job-zx8p2   0/1     Completed   0          35s

╭─root@node1 ~  
╰─➤  kubectl logs job-x5tfw 
Hello World
╭─root@node1 ~  
╰─➤  kubectl logs job-zx8p2 
Hello World

CronJob

CronJob即定時任務,就相似於Linux系統的crontab,在指定的時間週期運行指定的任務。

實驗:

第一步:編寫yml文件

apiVersion: batch/v1beta1
kind: CronJob
metadata:
   name: cronjob1
spec:
   schedule: "* * * * *"
   jobTemplate:
      metadata:
         name: job
      spec:
         template:
            metadata:
               name: pod
            spec:
               restartPolicy: OnFailure
               containers:
               - name: busybox
                 image: busybox
                 command: ["echo","hello"]
                 imagePullPolicy: IfNotPresent

第二步:運行

╭─root@node1 ~  
╰─➤  kubectl apply -f cronjob.yml 
cronjob.batch/cronjob1 created

第三步: 查看

╭─root@node1 ~  
╰─➤  kubectl get pod
NAME                        READY   STATUS      RESTARTS   AGE
cronjob1-1567149060-vjqtp   0/1     Completed   0          43s
╭─root@node1 ~  
╰─➤  kubectl logs cronjob1-1567149060-vjqtp
hello

相關文章
相關標籤/搜索