k8s初級實戰06--Job & CronJob
阿新 • • 發佈:2020-12-28
技術標籤:K8S & Dockerk8s Jobk8s CronJobkubernetes
k8s初級實戰06--Job & CronJob
1 基礎概念
- Job
Job負責批量處理短暫的一次性任務 (short lived one-off tasks),即僅執行一次的任務,它保證批處理任務的一個或多個Pod成功結束。
當第一個 Pod 失敗或者被刪除(比如因為節點硬體失效或者重啟)時,Job 物件會啟動一個新的 Pod。刪除 Job 的操作會清除所建立的全部 Pods。
Kubernetes支援以下幾種Job:- 非並行Job:通常建立一個Pod直至其成功結束
- 固定結束次數的Job:設定.spec.completions,建立多個Pod,直到.spec.completions個Pod成功結束
- 帶有工作佇列的並行Job:設定.spec.Parallelism但不設定.spec.completions,當所有Pod結束並且至少一個成功時,Job就認為是成功
- CronJob
CronJob 即定時任務,就類似於 Linux 系統的 crontab,在指定的時間週期執行指定的任務。
CronJobs 對於建立週期性的、反覆重複的任務很有用,例如執行資料備份或者傳送郵件。 CronJobs 也可以用來計劃在指定時間來執行的獨立任務,例如計劃當叢集看起來很空閒時 執行某個 Job。# ┌───────────── 分鐘 (0 - 59) # │ ┌───────────── 小時 (0 - 23) # │ │ ┌───────────── 月的某天 (1 - 31) # │ │ │ ┌───────────── 月份 (1 - 12) # │ │ │ │ ┌───────────── 周的某天 (0 - 6) (週日到週一;在某些系統上,7 也是星期日) # │ │ │ │ │ # │ │ │ │ │ # │ │ │ │ │ # * * * * *
2 常見用法
2.1 Job
- 建立Job 計算pi小數點後100位
$ kubectl create job cal-
- 檢視job
$ kubectl get jobs[.batch] NAME COMPLETIONS DURATION AGE cal-pi 1/1 4s 22s
- 刪除job
$ kubectl delete -f job-cal-pi.yaml job.batch "cal-pi" deleted
- 建立job 執行10次任務
過一會可以在lens前端上發現該任務執行完成: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
2.2 CronJob
- 建立cronjob
lens 中執行任務的狀態如下:$ 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
- 檢視cronjob
$ kubectl get cronjobs.batch NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE cal-pi-cj */1 * * * * False 0 <none> 31s
- 刪除cronjob
kubectl delete cronjobs[.batch] cal-pi-cj cronjob.batch "cal-pi-cj" deleted
3 注意事項
- job執行完成後,對應的pod不會自動刪除(),刪除job後才會刪除對應的pod。