Kubernetes的Job資源對象怎么用?相信大部分人都還不知道Job資源對象的使用方法,為了讓大家學會,給大家總結了以下內容,話不多說,一起往下看吧。
在有些場景下,是想要運行一些容器執行某種特定的任務,任務一旦執行完成,容器也就沒有存在的必要了。在這種場景下,創建pod就顯得不那么合適。于是就是了Job,Job指的就是那些一次性任務。通過Job運行一個容器,當其任務執行完以后,就自動退出,集群也不再重新將其喚醒。
從程序的運行形態上來區分,可以將Pod分為兩類:長時運行服務(jboss、mysql等)和一次性任務(數據計算、測試)。RC創建的Pod都是長時運行的服務,Job多用于執行一次性任務、批處理工作等,執行完成后便會停止(status.phase變為Succeeded)。
主機 | IP地址 | 服務 |
---|---|---|
master | 192.168.1.21 | k8s |
node01 | 192.168.1.22 | k8s |
node02 | 192.168.1.23 | k8s |
基于[ https://blog.51cto.com/14320361/2464655]() 的實驗繼續進行
- 非并行job:通常創建一個pod直至其成功結束。
- 固定結束次數的job:設置spec.completions,創建多個pod,直到.spec.completions個pod成功結束。
- 帶有工作隊列的并行job:設置.spec.Parallelism但不設置.spec.completions,當所有pod結束并且至少一個成功時,job就認為是成功。
Job Controller負責根據Job Spec創建pod,并持續監控pod的狀態,直至其成功結束,如果失敗,則根據restartPolicy(只支持OnFailure和Never,不支持Always)決定是否創建新的pod再次重試任務。
[root@master yaml]# vim jop.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 yaml]# kubectl apply -f jop.yaml
[root@master yaml]# kubectl get pod
[root@master yaml]# kubectl logs test-job-gs45w
我們可以看到job與其他資源對象不同,僅執行一次性任務,默認pod借宿運行后job即結束,狀態為Completed。
[root@master yaml]# vim jop.yaml
kind: Job
apiVersion: batch/v1
metadata:
name: test-job
spec:
template:
metadata:
name: test-job
spec:
containers:
- name: hello
image: busybox
command: ["asdasxsddwefew","hello k8s job!"] #修改
restartPolicy: Never
[root@master yaml]# kubectl delete jobs.batch test-job
[root@master yaml]# kubectl apply -f jop.yaml
[root@master yaml]# kubectl get pod -w
它會一直創建pod直到完成命令。
[root@master yaml]# vim jop.yaml
kind: Job
apiVersion: batch/v1
metadata:
name: test-job
spec:
template:
metadata:
name: test-job
spec:
containers:
- name: hello
image: busybox
command: ["asdasxsddwefew","hello k8s job!"]
restartPolicy: OnFailure
[root@master yaml]# kubectl delete jobs.batch test-job
[root@master yaml]# kubectl apply -f jop.yaml
[root@master yaml]# kubectl get pod -w
它會一直重啟pod完成命令,直到重啟到一定次數就會刪除job。
[root@master yaml]# vim jop.yaml
kind: Job
apiVersion: batch/v1
metadata:
name: test-job
spec:
parallelism: 2 #同時啟用幾個pod
template:
metadata:
name: test-job
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job!"]
restartPolicy: OnFailure
[root@master yaml]# kubectl apply -f jop.yaml
[root@master yaml]# kubectl get pod
[root@master yaml]# vim jop.yaml
kind: Job
apiVersion: batch/v1
metadata:
name: test-job
spec:
complations: 8 #運行pod的總數量8個
parallelism: 2 #同時運行2個pod
template:
metadata:
name: test-job
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job!"]
restartPolicy: OnFailure
job 字段解釋:
completions:標志Job結束需要成功運行的Pod個數,默認為1
parallelism:標志并行運行的Pod的個數,默認為1
activeDeadlineSeconds:標志失敗Pod的重試最大時間,超過這個時間不會繼續重試.
[root@master yaml]# kubectl delete jobs.batch test-job
[root@master yaml]# kubectl apply -f jop.yaml
[root@master yaml]# kubectl get pod
可以看到pod是兩個兩個的啟動的。
[root@master yaml]# vim cronjop.yaml
kind: CronJob
apiVersion: batch/v1beta1
metadata:
name: hello
spec:
schedule: "*/1 * * * *" #限定時間
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello","cronjob"]
restartPolicy: OnFailure
[root@master yaml]# kubectl delete jobs.batch test-job
[root@master yaml]# kubectl apply -f jop.yaml
[root@master yaml]# kubectl get pod
[root@master yaml]# kubectl get cronjobs.batch
此時查看Pod的狀態,會發現,每分鐘都會運行一個新的Pod來執行命令規定的任
務。
[root@master yaml]# vim cronjop.yaml
kind: CronJob
apiVersion: batch/v1beta1
metadata:
name: hello
spec:
schedule: "5 10 15 1 *" #限定時間
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello","cronjob"]
restartPolicy: OnFailure
[root@master yaml]# kubectl delete cronjobs.batch hello
[root@master yaml]# kubectl apply -f jop.yaml
[root@master yaml]# kubectl get pod
這時會發現,如果規定具體時間,可能并不會執行任務。
[root@master yaml]# vim /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
containers:
- command:
- kube-apiserver
- --runtime-config=batch/v2alpha1=true #添加
[root@master yaml]# systemctl restart kubelet.service
[root@master yaml]# kubectl api-versions
[root@master yaml]# vim cronjop.yaml
kind: CronJob
apiVersion: batch/v1beta1
metadata:
name: hello
spec:
schedule: "47 10 15 1 *" #限定時間
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello","cronjob"]
restartPolicy: OnFailure
[root@master yaml]# kubectl apply -f jop.yaml
[root@master yaml]# kubectl get pod -w
注意:此時仍然不能正常運行指定時間的Job,這是因為K8s官方在cronjob這個資源對象的支持中還沒有完善此功能,還待開發。
跟Job資源一樣在cronjob.spec.jobTemplate.spec 下同樣支持并發Job參數:
parallelism,也支持完成Pod的總數參數: completionsr
以上就是Kubernetes的Job資源對象的使用方法,看完之后是否有所收獲呢?如果想了解更多相關內容,歡迎關注億速云行業資訊!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。