kubernetes job控制器用于管理一次性任務(wù)。它確保pod中的容器執(zhí)行完任務(wù)后不會(huì)重新啟動(dòng),并將容器狀態(tài)設(shè)為“completed”。如果容器意外終止,job控制器會(huì)根據(jù)重啟策略重新啟動(dòng)pod。遇到node節(jié)點(diǎn)故障時(shí),job控制器會(huì)通過(guò)調(diào)度器將pod重新調(diào)度到其他節(jié)點(diǎn)。job控制器有兩種運(yùn)行模式:?jiǎn)喂ぷ麝?duì)列的串行方式和多工作隊(duì)列的并行方式。
視頻講解如下:
接下來(lái)通過(guò)一個(gè)具體示例展示如何使用Job控制器的多工作隊(duì)列并行方式。在創(chuàng)建多工作隊(duì)列的Job并行方式時(shí),需要指定兩個(gè)關(guān)鍵參數(shù):
- .spec.parallelism:并行執(zhí)行的Pod數(shù)量,即隊(duì)列數(shù)量。
- .spec.completions:需要完成的總?cè)蝿?wù)數(shù)量。
在下面的例子中,總?cè)蝿?wù)數(shù)量為5個(gè),創(chuàng)建了3個(gè)隊(duì)列,即并行度為3。整個(gè)任務(wù)執(zhí)行需要2分鐘。
(1)創(chuàng)建名為“job-demo2.yaml”的文件,并輸入以下內(nèi)容:
apiVersion: batch/v1 kind: Job metadata: name: job-demo2 spec: completions: 5 parallelism: 3 template: spec: containers: - name: job-demo2 image: nginx imagePullPolicy: IfNotPresent # 模擬任務(wù)執(zhí)行60秒 command: ["/bin/bash","-c","sleep 60"] # 重啟策略,不進(jìn)行重啟 restartPolicy: Never
(2)執(zhí)行以下命令創(chuàng)建Job:
kubectl apply -f job-demo2.yaml
(3)查看Job和Pod信息,如下圖所示:
kubectl get job,pod # 注意:由于總?cè)蝿?wù)數(shù)量為5個(gè),但并行執(zhí)行的隊(duì)列數(shù)量為3,因此這里只看到Job控制器啟動(dòng)了3個(gè)Pod。
(4)等待60秒后,再次查看Job和Pod信息,如下圖所示:
kubectl get job,pod # 注意:60秒后,第一批3個(gè)任務(wù)已完成,Job控制器又啟動(dòng)了2個(gè)隊(duì)列來(lái)執(zhí)行剩余的兩個(gè)任務(wù)。
(5)再等待60秒后,再次查看Job和Pod信息,如下圖所示:
kubectl get job,pod # 注意:經(jīng)過(guò)120秒后,5個(gè)任務(wù)全部成功執(zhí)行完成。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載。
THE END