新聞中心
本文以Kubernetes中的Job和CronJob資源對象為例,為大家分析Kubernetes中的Job和CronJob資源對象的使用方法,閱讀完整文相信大家對Job和CronJob資源對象有了一定的認(rèn)識。
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比薩迦網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式薩迦網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋薩迦地區(qū)。費(fèi)用合理售后完善,十余年實體公司更值得信賴。
一、Job
(1)Job概述
Job負(fù)責(zé)處理短暫的一次性任務(wù),即僅執(zhí)行一次的任務(wù),它保證批處理任務(wù)的一個或多個pod成功結(jié)束。
Kubernetes支持以下幾種Job:
- 非并行Job:通常創(chuàng)建一個Pod直到其成功結(jié)束;
- 固定結(jié)束次數(shù)的Job:在spec字段下添加completions字段。創(chuàng)建多個Pod,直到滿足completions規(guī)定的數(shù)值。如果不添加的話,默認(rèn)情況下是1個;
- 帶有工作隊列的并行Job:在spec字段下添加Parallelism字段。表示幾個job同時并行工作。如果不添加的話,默認(rèn)情況下是1個;
根據(jù)可以設(shè)置completions字段、Parallelism字段,可以將Job分為以下幾種:
(2)Job Controller
Job Controller負(fù)責(zé)根據(jù)Job yaml文件中Spec字段定義的內(nèi)容創(chuàng)建Pod,并持續(xù)監(jiān)控Job的狀態(tài),直至其成功結(jié)束。如果失敗,則根據(jù)restartPolicy(只支持OnFailure和Never,不支持Always)決定是否創(chuàng)建新的pod再次重試任務(wù)。
如圖:
(3)應(yīng)用示例
一個簡單的小示例:
[root@master job]# cat job.yaml
kind: Job
apiVersion: batch/v1
metadata:
name: test-job
spec:
template:
metadata:
name: test-job
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job"]
restartPolicy: Never
[root@master job]# kubectl apply -f job.yaml //生成Job資源
[root@master job]# kubectl get job //查看Job
NAME COMPLETIONS DURATION AGE
test-job 1/1 2s 5s
[root@master job]# kubectl get pod -o wide //查看Job運(yùn)行的詳細(xì)信息
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-job-rq9ws 0/1 Completed 0 25s 10.244.1.15 node01
[root@master job]# kubectl logs test-job-rq9ws //查看通過Job生成的Pod的日志信息
hello k8s job
[root@master job]# kubectl delete jobs test-job
//刪除Job,那么對應(yīng)的pod也會被刪除!
(4)提高Job的執(zhí)行效率
一個簡單的小示例:
[root@master job]# cat job.yaml
kind: Job
apiVersion: batch/v1
metadata:
name: test-job
spec:
parallelism: 2
completions: 10
template:
metadata:
name: test-job
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job"]
restartPolicy: Never
[root@master job]# kubectl apply -f job.yaml
[root@master job]# kubectl get job
NAME COMPLETIONS DURATION AGE
test-job 10/10 7s 15s
//可以看出是運(yùn)行了10個任務(wù)
查看Job運(yùn)行的詳細(xì)信息,如圖:
由這個示例可以查看:
- parallelism:表示同時運(yùn)行多少個Pod執(zhí)行任務(wù);
- completions:表示總共需要完成的pod的數(shù)量;
一個簡單的小示例:
[root@master job]# cat job.yaml
kind: Job
apiVersion: batch/v1
metadata:
name: test-job
spec:
backoffLimit: 5
activeDeadlineSeconds: 100
template:
metadata:
name: test-job
spec:
containers:
- name: hello
image: busybox
command: ["echddddddo","hello k8s job"]
restartPolicy: Never
[root@master job]# kubectl apply -f job.yaml
[root@master job]# kubectl get job
NAME COMPLETIONS DURATION AGE
test-job 0/1 2m28s 2m28s
[root@master job]# kubectl get pod
NAME READY STATUS RESTARTS AGE
test-job-4lzsc 0/1 ContainerCannotRun 0 111s
test-job-8q659 0/1 ContainerCannotRun 0 2m42s
test-job-hjjbx 0/1 ContainerCannotRun 0 2m41s
test-job-qcf4z 0/1 ContainerCannotRun 0 2m31s
由這個示例可以看出:
- backoffLimit:表示出現(xiàn)錯誤重試次數(shù);
- activeDeadlineSeconds:表示Job在集群中存活的時間;
關(guān)于Job就簡單介紹這么多了!
二、CronJob
CronJob即定時任務(wù),類似于Linux系統(tǒng)中的crontab,在指定的時間周期運(yùn)行指定的任務(wù)。
CronJob yaml文件中的spec字段下的schedule是用來定義的時間間隔的,其用法與crontab一樣(分、時、日、月、周);jobTemplate字段指定需要運(yùn)行的任務(wù);
在kubernetes 1.15中,使用CronJob需要使用API的batch/v2alpha1這個版本,但是,kubernetes本身并沒有這個版本,如下:
[root@master job]# kubectl api-versions | grep batch/v2alpha1
需要進(jìn)行以下操作使Kubernetes群集支持這個batch/v2alpha1版本,操作如下:
[root@master ~]# vim /etc/kubernetes/manifests/kube-apiserver.yaml
在spec字段的command字段下添加以下內(nèi)容:
- --runtime-config=batch/v2alpha1=true
[root@master ~]# systemctl restart kubelet.service
//重啟kubelet服務(wù)
[root@master ~]# kubectl api-versions | grep batch/v2alpha1
batch/v2alpha1
為了防止內(nèi)容添加發(fā)生錯誤,附上圖片一張:
(1)應(yīng)用示例
[root@master job]# cat cronjob.yaml
kind: CronJob
apiVersion: batch/v2alpha1
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello cronjob"]
restartPolicy: Never
[root@master job]# kubectl apply -f cronjob.yaml
查看效果:
這樣測試是沒有問題的,但是如果指定計劃任務(wù)時,就會發(fā)現(xiàn)它不會像預(yù)期的效果一樣!
如下:
[root@master job]# cat cronjob.yaml
kind: CronJob
apiVersion: batch/v2alpha1
metadata:
name: hello
spec:
schedule: "18 16 15 1 3"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello cronjob"]
restartPolicy: Never
[root@master job]# date
2020年 01月 15日 星期三 16:18:48 CST
[root@master job]# kubectl get pod
No resources found.
關(guān)于Kubernetes中的Job和CronJob資源對象的使用方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
網(wǎng)站名稱:Kubernetes中的Job和CronJob資源對象怎么用
轉(zhuǎn)載注明:http://fisionsoft.com.cn/article/ghcgco.html