Windows下能夠經過批處理腳本完成批處理任務,腳本運行完畢後任務便可終止,從而實現批處理任務運行工做,相似的任務如何在kubernetes中運行呢?答案是Jobs,Jobs是kubernetes中實現一次性計劃任務的Pod控制器—JobController,經過控制Pod來執行任務,其特色爲:node
Jobs任務運行方式有以下三種:shell
一、 定義一個jobs任務,經過在command中運行特定一個腳本,將當前的時間打印100次centos
apiVersion: batch/v1 kind: Job metadata: name: jobs-demo labels: controller: jobs spec: parallelism: 1 #併發數,默認爲1,即建立pod副本的數量 template: metadata: name: jobs-demo labels: controller: jobs spec: containers: - name: echo-time image: centos:latest imagePullPolicy: IfNotPresent command: - /bin/sh - -c - "for i in `seq 0 100`;do echo ${date} && sleep 1;done" restartPolicy: Never #設置爲Never,jobs任務運行完畢便可完成
二、 運行Jobs任務api
[root@node-1 happycloudlab]# kubectl apply -f job-demo.yaml job.batch/job-demo created [root@node-1 happylau]# kubectl get jobs job-demo NAME COMPLETIONS DURATION AGE job-demo 0/1 41s 41s
三、 此時jobs控制器建立了一個pod容器運行任務,此時處於Running狀態,任務處在運行過程當中,若是運行完畢則會變爲completed狀態併發
[root@node-1 happycloudlab]# kubectl get pods |grep job job-demo-***k7 1/1 Running 0 97s
四、查看jobs日誌日誌數據,能夠看到當前jobs建立的任務是持續在終端中打印數字,且每次打印暫停1s鍾app
五、再次查看jobs的任務,能夠看到任務已經completions,運行時長爲103s,對應的pod狀態處於completed狀態ide
[root@node-1 ~]# kubectl get jobs NAME COMPLETIONS DURATION AGE job-demo 1/1 103s 5m12s
Jobs控制器提供了兩個控制併發數的參數:completions和parallelism,completions表示須要運行任務數的總數,parallelism表示併發運行的個數,如設置爲1則會依次運行任務,前面任務運行再運行後面的任務,以下以建立5個任務數爲例演示Jobs控制器實現併發數的機制。rest
一、 定義計算圓周率的Jobs任務日誌
apiVersion: batch/v1 kind: Job metadata: name: pi spec: template: spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(100)"] restartPolicy: Never parallelism: 1 completions: 5
二、運行jobs任務,並用kubectl get jobs --watch查看jobs建立過程,能夠看到pod任務是依次運行,直至達到completions所定義的數量code
三、Jobs任務都已運行完畢,查看Jobs列表能夠看到任務都處於Completed狀態,查看pod日誌能夠看到Pi圓周率計算的結果
Jobs控制器支持運行併發任務,併發任務即Jobs控制器一次運行多個Pod執行任務處理,以下以一次性運行3個Pod併發數爲例演示經過Jobs控制器實現併發任務
一、定義Jobs任務,設置3個併發數任務
apiVersion: batch/v1 kind: Job metadata: name: jobs-demo labels: controller: jobs spec: parallelism: 3 #運行併發數爲3,一次性建立3個pod template: metadata: name: jobs-demo labels: controller: jobs spec: containers: - name: echo-time image: centos:latest imagePullPolicy: IfNotPresent command: - /bin/sh - -c - "for i in `seq 0 10`;do echo `date` && sleep 1;done" restartPolicy: Never
二、運行Jobs任務並查看,Jobs控制器同時建立了3個併發任務
三、經過上面的演示可知,經過parallelism指定併發數量,Jobs控制器會建立出多個Pod副本並運行直至任務completed,同時parallelism能夠配合completions一塊兒使用,經過併發建立特定數量的任務,以下以單次運行3個併發任務實現9個任務的Jobs任務
apiVersion: batch/v1 kind: Job metadata: name: jobs-demo labels: controller: jobs spec: parallelism: 3 #併發任務爲3 completions: 9 #任務數爲9 template: metadata: name: jobs-demo labels: controller: jobs spec: containers: - name: echo-time image: centos:latest imagePullPolicy: IfNotPresent command: - /bin/sh - -c - "for i in `seq 0 10`;do echo `date` && sleep 1;done" restartPolicy: Never
四、運行Jobs任務並觀察建立過程,在describe jobs的詳情events日誌中能夠看到一共建立了9個任務,每3個任務建立時間同樣,即併發建立的任務
總結:經過前面的例子解析可得知,Jobs能在kubernetes中實現相似Windows下批處理或Linux下shell任務的功能,經過運行特定任務數+併發數控制建立Pod任務。須要注意一點的是,Jobs控制器和Deployments副本控制器不同,其不支持修改Jobs的yaml文件,若是有須要修改則須要提早將Jobs任務刪除,而後再將修改後的yaml提交任務。
CronJobs用於實現相似Linux下的cronjob週期性計劃任務,CronJobs控制器經過時間線建立Jobs任務,從而完成任務的執行處理,其具備以下特色:
CronJobs可經過schedule指定任務運行的週期,其使用參數和cronjob相似,分別使用:分時日月星5個參數表示週期性,其中*表示任意時間點,/表示每隔多久,-表示範圍
舉例子說明:
一、 /1 * * * 表示每隔1分鐘運行任務
二、 1 0 * * 6-7 表示每週六日的0點01分運行任務
CronJobs任務是編寫和Deployments相似,需啊喲一個schedule按期任務調度週期,經過jobTemplate定義生成Jobs任務的模版,定義一個任務爲例:
一、 定義一個CronJobs任務,每隔5分鐘運行一個任務
apiVersion: batch/v1beta1 kind: CronJob metadata: name: cronjob-demo labels: jobgroup: cronjob-demo spec: schedule: "*/5 * * * *" #調度任務週期 jobTemplate: #建立Jobs任務模版 spec: template: spec: containers: - name: cronjob-demo image: busybox:latest imagePullPolicy: IfNotPresent command: - /bin/sh - -c - "for i in `seq 0 100`;do echo ${i} && sleep 1;done" restartPolicy: Never
二、 運行CronJobs並查看任務列表
三、校驗CronJobs任務運行的狀況,能夠看到CronJobs任務調用Jobs控制器建立Pod,Pod建立週期和schedule中定義的週期一致
固然,CronJobs中經過Jobs的模版也能夠定義運行任務的數量和併發數,實現計劃時間範圍內併發運行多個任務的需求。
文章總結了在kubernetes集羣中運行Jobs批處理任務和CronJobs兩種控制器的功能使用,適用於特定場景下任務,Jobs任務執行完畢即completed,CronJobs週期性調用Jobs控制器完成任務的建立執行。
不錯的博客:https://draveness.me/kubernetes-job-cronjob
運行Jobs任務:https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
計劃任務ConJobs:https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
自動運行任務:https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/
TKE建立Jobs任務:https://cloud.tencent.com/document/product/457/31708
TKE建立CronJobs:https://cloud.tencent.com/document/product/457/31709