Job負責處理短暫的一次性任務,即僅執行一次的任務,它保證批處理任務的一個或多個pod成功結束。node
Kubernetes支持如下幾種Job:vim
根據能夠設置completions字段、Parallelism字段,能夠將Job分爲如下幾種:
api
Job Controller負責根據Job yaml文件中Spec字段定義的內容建立Pod,並持續監控Job的狀態,直至其成功結束。若是失敗,則根據restartPolicy(只支持OnFailure和Never,不支持Always)決定是否建立新的pod再次重試任務。併發
如圖:
app
一個簡單的小示例:ide
[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運行的詳細信息 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-job-rq9ws 0/1 Completed 0 25s 10.244.1.15 node01 <none> <none> [root@master job]# kubectl logs test-job-rq9ws //查看經過Job生成的Pod的日誌信息 hello k8s job [root@master job]# kubectl delete jobs test-job //刪除Job,那麼對應的pod也會被刪除!
一個簡單的小示例:測試
[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 //能夠看出是運行了10個任務
查看Job運行的詳細信息,如圖:
由這個示例能夠查看:rest
一個簡單的小示例:日誌
[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
由這個示例能夠看出:code
關於Job就簡單介紹這麼多了!
CronJob即定時任務,相似於Linux系統中的crontab,在指定的時間週期運行指定的任務。
CronJob yaml文件中的spec字段下的schedule是用來定義的時間間隔的,其用法與crontab同樣(分、時、日、月、周);jobTemplate字段指定須要運行的任務;
在kubernetes 1.15中,使用CronJob須要使用API的batch/v2alpha1這個版本,可是,kubernetes自己並無這個版本,以下:
[root@master job]# kubectl api-versions | grep batch/v2alpha1
須要進行如下操做使Kubernetes羣集支持這個batch/v2alpha1版本,操做以下:
[root@master ~]# vim /etc/kubernetes/manifests/kube-apiserver.yaml 在spec字段的command字段下添加如下內容: - --runtime-config=batch/v2alpha1=true [root@master ~]# systemctl restart kubelet.service //重啓kubelet服務 [root@master ~]# kubectl api-versions | grep batch/v2alpha1 batch/v2alpha1
爲了防止內容添加發生錯誤,附上圖片一張:
[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
查看效果:
這樣測試是沒有問題的,可是若是指定計劃任務時,就會發現它不會像預期的效果同樣!
以下:
[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.
這個算是k8s的一個小問題吧,官方已經在緊急修復這個問題,相信在之後的新版本,這個問題是能夠解決的吧!
注意,此時仍然不能正常運行指定時間的job,這時由於k8s官方在cronjob這個資源對象的支持中尚未完善此功能。還待開發。
CronJob跟Job資源同樣,一樣支持併發Job參數:parallelism,也支持完成Pod的總數參數:completions!
關於CronJob就先簡單介紹這麼多!
——————————本文到此結束,感謝閱讀——————————