1. 程式人生 > 其它 >k8s初級實戰06--Job & CronJob

k8s初級實戰06--Job & CronJob

技術標籤:K8S & Dockerk8s Jobk8s CronJobkubernetes

k8s初級實戰06--Job & CronJob

1 基礎概念

  1. Job
    Job負責批量處理短暫的一次性任務 (short lived one-off tasks),即僅執行一次的任務,它保證批處理任務的一個或多個Pod成功結束。
    當第一個 Pod 失敗或者被刪除(比如因為節點硬體失效或者重啟)時,Job 物件會啟動一個新的 Pod。刪除 Job 的操作會清除所建立的全部 Pods。
    Kubernetes支援以下幾種Job:
    1. 非並行Job:通常建立一個Pod直至其成功結束
    2. 固定結束次數的Job:設定.spec.completions,建立多個Pod,直到.spec.completions個Pod成功結束
    3. 帶有工作佇列的並行Job:設定.spec.Parallelism但不設定.spec.completions,當所有Pod結束並且至少一個成功時,Job就認為是成功
  2. CronJob
    CronJob 即定時任務,就類似於 Linux 系統的 crontab,在指定的時間週期執行指定的任務。
    CronJobs 對於建立週期性的、反覆重複的任務很有用,例如執行資料備份或者傳送郵件。 CronJobs 也可以用來計劃在指定時間來執行的獨立任務,例如計劃當叢集看起來很空閒時 執行某個 Job。
    crontab 時間表7語法:
    # ┌───────────── 分鐘 (0 - 59)
    # │ ┌───────────── 小時 (0 - 23)
    # │ │ ┌───────────── 月的某天 (1 - 31)
    # │ │ │ ┌───────────── 月份 (1 - 12)
    # │ │ │ │ ┌───────────── 周的某天 (0 - 6) (週日到週一;在某些系統上,7 也是星期日)
    # │ │ │ │ │ 
    # │ │ │ │ │
    # │ │ │ │ │
    # * * * * *
    

2 常見用法

2.1 Job

  1. 建立Job 計算pi小數點後100位
    $ kubectl create job cal-
    pi --image=perl:5.32 -- perl -Mbignum=bpi -wle 'print bpi(100)' job.batch/cal-pi created 檢視輸出日誌: $ kubectl logs cal-pi-dh766 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068 或者yaml vim job-cal-pi.yaml kind: Job apiVersion: batch/v1 metadata: name: cal-pi spec: template: spec: containers: - name: cal-pi image: perl:5.32 command: - perl - '-Mbignum=bpi' - '-wle' - 'print bpi(100)' imagePullPolicy: IfNotPresent restartPolicy: Never backoffLimit: 4 $ kubectl apply -f job-cal-pi.yaml
  2. 檢視job
    $ kubectl get jobs[.batch]
    NAME     COMPLETIONS   DURATION   AGE
    cal-pi   1/1           4s         22s
    
  3. 刪除job
    $ kubectl delete -f job-cal-pi.yaml 
    job.batch "cal-pi" deleted
    
  4. 建立job 執行10次任務
    vim job-cal-pi-10.yaml 
    kind: Job
    apiVersion: batch/v1
    metadata:
      name: cal-pi-10
    spec:
      completions: 10
      template:
        spec:
          containers:
          - name: cal-pi
            image: perl:5.32
            command:
            - perl
            - '-Mbignum=bpi'
            - '-wle'
            - 'print bpi(100)'
            imagePullPolicy: IfNotPresent
          restartPolicy: Never
      backoffLimit: 4
    $ kubectl apply -f job-cal-pi-10.yaml 
    
    過一會可以在lens前端上發現該任務執行完成: 在這裡插入圖片描述

2.2 CronJob

  1. 建立cronjob
    $ kubectl create cronjob cal-pi-cj --schedule="*/1 * * * *" --image=perl:5.32 -- perl -Mbignum=bpi -wle 'print bpi(100)'
    cronjob.batch/cal-pi-cj created
    
    或者yaml建立
    vim cronjob-cal-pi.yaml 
    kind: CronJob
    apiVersion: batch/v1beta1
    metadata:
      name: cal-pi-cj
    spec:
      schedule: '*/1 * * * *'
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: cal-pi-cj
                image: perl:5.32
                command:
                - perl
                - '-Mbignum=bpi'
                - '-wle'
                - 'print bpi(100)'
                imagePullPolicy: IfNotPresent
              restartPolicy: OnFailure
    $ kubectl apply -f cronjob-cal-pi.yaml 
    
    lens 中執行任務的狀態如下: 在這裡插入圖片描述
  2. 檢視cronjob
    $ kubectl get cronjobs.batch 
    NAME        SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    cal-pi-cj   */1 * * * *   False     0        <none>          31s
    
  3. 刪除cronjob
    kubectl delete cronjobs[.batch] cal-pi-cj 
    cronjob.batch "cal-pi-cj" deleted
    

3 注意事項

  1. job執行完成後,對應的pod不會自動刪除(),刪除job後才會刪除對應的pod。

4 說明

概念->工作負載->工作負載資源->Jobs
Kubernetes指南->Job