與所有的 Kubernetes 對(duì)象一樣,Job 對(duì)象的 YAML 文件中,都需要包括如下三個(gè)字段:
.apiVersion
.kind
.metadata
Job 對(duì)象的 YAML 文件,還需要一個(gè) .spec
字段。
Pod Template
.spec.template
是必填字段:
- 用于定義 pod template
- 與 Pod 有相同的字段內(nèi)容,但由于是內(nèi)嵌元素,pod template 不包括阿
apiVersion
字段和kind
字段 - 除了 Pod 所需的必填字段之外,Job 中的 pod template 必須指定
- 合適的標(biāo)簽
.spec.template.spec.labels
- 指定合適[重啟策略 restartPolicy
.spec.template.spec.restartPolicy
,此處只允許使用Never
和OnFailure
兩個(gè)取值
- 合適的標(biāo)簽
Pod Selector
.spec.selector
字段是可選的。絕大部分情況下,您不需要指定該字段。
Parallel Jobs
有三種主要的任務(wù)類型適合使用 Job 運(yùn)行:
- Non-parallel Jobs
- 通常,只啟動(dòng)一個(gè) Pod,除非該 Pod 執(zhí)行失敗
- Pod 執(zhí)行成功并結(jié)束以后,Job 也立刻進(jìn)入完成 completed 狀態(tài)
- Parallel Jobs with a fixed completion count
-
.spec.completions
為一個(gè)非零正整數(shù) - Job 將創(chuàng)建至少
.spec.completions
個(gè) Pod,編號(hào)為 1 -.spec.completions
- Job 記錄了任務(wù)的整體執(zhí)行情況,當(dāng) 1 -
.spec.completions
中每一個(gè)編號(hào)都有一個(gè)對(duì)應(yīng)的 Pod 執(zhí)行成功時(shí),Job 進(jìn)入完成狀態(tài)
-
- Parallel Jobs with a work queue
- 不指定
.spec.completions
,使用.spec.parallelism
- Pod 之間必須相互之間自行協(xié)調(diào)并發(fā),或者使用一個(gè)外部服務(wù)決定每個(gè) Pod 各自執(zhí)行哪些任務(wù)。例如,某個(gè)Pod可能從帶工作隊(duì)列(work queue)中取出最多N個(gè)條目的批次數(shù)據(jù)
- 每個(gè) Pod 都可以獨(dú)立判斷其他同僚(peers)是否完成,并確定整個(gè)Job是否完成
- 當(dāng) Job 中任何一個(gè) Pod 成功結(jié)束,將不再為其創(chuàng)建新的 Pod
- 當(dāng)所有的 Pod 都結(jié)束了,且至少有一個(gè) Pod 執(zhí)行成功后才結(jié)束,則 Job 判定為成功結(jié)束
- 一旦任何一個(gè) Pod 執(zhí)行成功并退出,Job 中的任何其他 Pod 都應(yīng)停止工作和輸出信息,并開始終止該 Pod 的進(jìn)程
- 不指定
completions 和 parallelism
- 對(duì)于 non-parallel Job,
.spec.completions
和.spec.parallelism
可以不填寫,默認(rèn)值都為 1 - 對(duì)于 fixed completion count Job,需要設(shè)置
.spec.completions
為您期望的個(gè)數(shù);同時(shí)不設(shè)置.spec.parallelism
字段(默認(rèn)值為 1) - 對(duì)于 work queue Job,不能設(shè)置
.spec.completions
字段,且必須設(shè)置.spec.parallelism
為0或任何正整數(shù)
Controlling Parallelism 并發(fā)控制
并發(fā)數(shù) .spec.parallelism
可以被設(shè)置為0或者任何正整數(shù),如果不設(shè)置,默認(rèn)為1,如果設(shè)置為 0,則 Job 被暫停,直到該數(shù)字被調(diào)整為一個(gè)正整數(shù)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-499938.html
實(shí)際的并發(fā)數(shù)(同一時(shí)刻正在運(yùn)行的 Pod 數(shù)量)可能比設(shè)定的并發(fā)數(shù) .spec.parallelism
要大一些或小一些,不一定嚴(yán)格相等,主要的原因有:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-499938.html
- 對(duì)于 fixed completion count Job,實(shí)際并發(fā)運(yùn)行的 Pod 數(shù)量不會(huì)超過(guò)剩余未完成的數(shù)量。如果
.spec.parallelism
比這個(gè)數(shù)字更大,將被忽略 - 對(duì)于 work queue Job,任何一個(gè) Pod 成功執(zhí)行后,將不再創(chuàng)建新的 Pod (剩余的 Pod 將繼續(xù)執(zhí)行)
- Job 控制器可能沒(méi)有足夠的時(shí)間處理并發(fā)控制
- 如果 Job 控制器創(chuàng)建 Pod 失?。ɡ?,ResourceQuota 不夠用,沒(méi)有足夠的權(quán)限等)
- 同一個(gè)Job中,在已創(chuàng)建的 Pod 出現(xiàn)大量失敗的情況下,Job 控制器可能限制 Pod 的創(chuàng)建
- 當(dāng) Pod 被優(yōu)雅地關(guān)閉時(shí)(gracefully shut down),需要等候一段時(shí)間才能結(jié)束
到了這里,關(guān)于k8s控制器之job--第二彈編寫Job的定義的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!