一、Job
1、Job 背景問題
K8s 里,最小的調(diào)度單元是 Pod,如果直接通過 Pod 來運行任務進程,會產(chǎn)生以下幾種問題:
① 如何保證 Pod 內(nèi)進程正確的結(jié)束?
② 如何保證進程運行失敗后重試?
③ 如何管理多個任務,且任務之間有依賴關(guān)系?
④ 如何并行地運行任務,并管理任務的隊列大???
2、Job:管理任務的控制器
Kubernetes 的 Job 為我們提供了什么功能:
① 創(chuàng)建一個或多個Pod確保指定數(shù)量的Pod可以成功地運行終止;
② 跟蹤Pod狀態(tài),根據(jù)配置及時重試失敗的 Pod;
③ 確定依賴關(guān)系,保證上一個任務運行完畢后再運行下一個任務;
④ 控制任務并行度,并根據(jù)配置確保Pod 隊列大小。
3、Job 解讀:
(1) Job 語法:
① metadata 里面的 name 指定這個 Job 的名稱,spec.template 是 pod 的 spec。
② restartPolicy 重啟策略:
在 Job 里面可以設(shè)置 Never、OnFailure、Always 這三種重試策略。
Never 表示不會重啟 Pod,即使 Pod 失敗也不會重啟。
OnFailure 表示只有在 Pod 失敗時才會重啟。
Always 表示無論何時,都會嘗試重啟 Pod,即使它已經(jīng)成功運行。
③ backoffLimit 重試次數(shù)限制:
Job 在運行的時候不可能去無限的重試,需要一個參數(shù)來控制重試的次數(shù)。backoffLimit 就是來保證一個 Job 到底能重試多少次。
(2) 查看 Job 狀態(tài):
Job 創(chuàng)建完成之后,可以通過 kubectl get jobs 這個命令,查看當前 job 的運行狀態(tài)。
(3) 查看 Pod:
通過 Job 創(chuàng)建出來的 Pod 比普通的 Pod 多了一個 ownerReferences,用來聲明此 pod 是歸哪個上一層 controller 來管理??梢酝ㄟ^ pod 返查到它的控制器是誰,同時也能根據(jù) Job 來查一下它下屬有哪些 Pod。
(4) 并行 Job:
Job 控制器可以并行出 n 個 Pod 去快速地執(zhí)行,同時設(shè)置并行度。
主要看兩個參數(shù):一個是 completions,一個是 parallelism。
第一個參數(shù)是用來指定 Pod 隊列執(zhí)行次數(shù)??梢园阉J為是這個 Job 指定的可以運行的總次數(shù)。比如這里設(shè)置成 8,即這個任務一共會被執(zhí)行 8 次。
第二個參數(shù)代表這個并行執(zhí)行的個數(shù)。所謂并行執(zhí)行的次數(shù),就是一個管道或者緩沖器中緩沖隊列的大小,把它設(shè)置成 2,就是說這個 Job 要執(zhí)行 8 次,每次并行 2 個 Pod,這樣的話,一共會執(zhí)行 4 個批次。
(5) Cronjob:
CronJob,也叫定時運行 Job。它可以設(shè)計一個時間決定 Job 在幾點幾分執(zhí)行。
① schedule:這個字段主要設(shè)置時間格式。
② startingDeadlineSeconds:每次運行 Job 的時候,它最長可以等多長時間,如果超過時間,CronJob 就會停止這個 Job。
③ concurrencyPolicy:是否允許并行運行。如果這個 policy 設(shè)置為 true 的話,不管前面的 Job 是否運行完成,下一個 Job 都會去執(zhí)行;如果是 false,它就會等上一個 Job 運行完成之后才會運行下一個。
④ JobsHistoryLimit:每一次 CronJob 運行完之后,它都會遺留上一個 Job 的運行歷史、查看時間。可以根據(jù)需要設(shè)置歷史存留數(shù),一般可以設(shè)置默認 10 個或 100 個。
二、DaemonSet
1、DaemonSet 背景問題
如何保證每個節(jié)點都運行一個pod?
如果新節(jié)點加入集群,如何感知并部署對應的Pod?
如果有節(jié)點退出,如何刪除對應的Pod?
如果Pod狀態(tài)異常,如何監(jiān)控并恢復Pod的狀態(tài) ?
2、DaemonSet 功能:
保證集群內(nèi)每一個(或者一些)節(jié)點都運行一組相同的 Pod;
跟蹤集群節(jié)點狀態(tài),保證新加入的節(jié)點自動創(chuàng)建對應的 Pod;
跟蹤集群節(jié)點狀態(tài),保證移除的節(jié)點刪除對應的 Pod;
跟蹤 Pod 狀態(tài),保證每個節(jié)點 Pod 處于運行狀態(tài)。
3、DaemonSet 語法:
(1) 查看 DaemonSet 狀態(tài):
創(chuàng)建完 DaemonSet 之后,我們可以使用 kubectl get DaemonSet(DaemonSet 縮寫為 ds)
(2) 更新 DaemonSet:
DaemonSet 有兩種更新策略:一個是 RollingUpdate,另一個是 OnDelete。文章來源:http://www.zghlxwxcb.cn/news/detail-833258.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-833258.html
到了這里,關(guān)于Job 和 DaemonSet的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!