Job/CronJob

我們?nèi)粘9ぷ髦薪?jīng)常遇到一些需要進(jìn)行數(shù)據(jù)處理和分析的需求,當(dāng)然也會(huì)有按時(shí)間來進(jìn)行調(diào)度的工作,在我們的kubernetes集群中為我們提供了Job和CronJob兩種資源對象來應(yīng)對我們的這種需求崖堤。

Job負(fù)責(zé)處理任務(wù)漓拾,即僅執(zhí)行一次的任務(wù),他保證處理任務(wù)的一個(gè)或多個(gè)pod成功結(jié)束术浪。而cronJob則是在Job上加上了時(shí)間調(diào)度芝此。

Job

我們用Job這個(gè)資源對象來創(chuàng)建一個(gè)任務(wù)憋肖,我們定一個(gè)Job來執(zhí)行一個(gè)倒計(jì)時(shí)的任務(wù),定義YAML文件:

apiVersion: batch/v1
kind: Job
metadata:
  name: job-demo
spec:
  matchLabels:
    name: job
  template:
    labels:
      name: job
    spec:
       restartPolicy: Never
       containers:
        - name: counter
          image: busybox
          command:
          - "/bin/sh"
          -  "-c"
          - "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"

注意: Job的RestartPolicy僅支持Nerver和onFailure兩種婚苹,不支持Always岸更。我們知道Job就相當(dāng)于來執(zhí)行一個(gè)批處理任務(wù),執(zhí)行完就結(jié)束租副,如果支持Always的話就會(huì)進(jìn)入死循環(huán)坐慰。

然后來創(chuàng)建該Job,保存為job-demo.yaml:

$ kubectl create -f ./job.yaml
job "job-demo" created
然后我們可以查看當(dāng)前的Job資源對象:

$ kubectl get jobs
注意查看我們的Pod的狀態(tài)用僧,同樣我們可以通過kubectl logs來查看當(dāng)前任務(wù)的執(zhí)行結(jié)果结胀。

CronJob

CronJob其實(shí)就是在Job的基礎(chǔ)上加上了時(shí)間調(diào)度,我們可以:在給定的時(shí)間點(diǎn)運(yùn)行一個(gè)任務(wù)责循,也可以周期性的在給定時(shí)間點(diǎn)運(yùn)行糟港。這個(gè)實(shí)際上和我們linux的crontab就非常類似了。

一個(gè)CronJob對象其實(shí)就對應(yīng)cronJob文件的一行院仿,他根據(jù)配置時(shí)間格式周期性的運(yùn)行一個(gè)Job秸抚,格式和crontab也是一樣的。
crontab的格式如下:

分 時(shí) 日 月 星期 要運(yùn)行的命令
第1列分鐘0~59
第2列小時(shí)0~23)
第3列日1~31
第4列月1~12
第5列星期0~7(0和7表示星期天)
第6列要運(yùn)行的命令

現(xiàn)在歹垫,我們用CronJob來管理我們上面的Job任務(wù)剥汤,

apiVersion: batch/v2alpha1
kind: CronJob
metadata:
  name: cronjob-demo
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: onFailure
          containers:
          - name: hello
            image: busybox
            args:
            - "/bin/sh"
            - "-c"
            - " for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"

我們這里的kind是Cronjob了,要注意的是.spec.schedule字段必須填寫的排惨,用來指定任務(wù)運(yùn)行的周期吭敢,格式和crontab一樣,另一個(gè)字段是.spec.jobTemplate暮芭,用來指定需要運(yùn)行的任務(wù)鹿驼,格式當(dāng)然和Job是一致的。還有一些值得關(guān)注的字段辕宏,.spec.successfulJobsHistoryLimit和.spec.failedJobsHistoryLimit畜晰,表示歷史限制,是可選字段瑞筐。他們制定了可以保留多少完成和失敗的Job凄鼻,默認(rèn)沒有限制,所以成功和失敗的Job都會(huì)保留聚假。然而块蚌,當(dāng)運(yùn)行一個(gè)CronJob時(shí),Job很快就對極了很多魔策,所以一般推薦是指這兩個(gè)字段值匈子。如果設(shè)置限制值為0,那么相關(guān)類型的Job完成后將不會(huì)被保留闯袒。

接下來我們來創(chuàng)建這個(gè)cronjob
$ kubectl create -f cronjob-demo.yaml
cronjob "cronjob-demo" created

當(dāng)然虎敦,也可以用kubectl run來創(chuàng)建一個(gè)CronJob:
kubectl run hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster"
$ kubectl get cronjob
NAME      SCHEDULE      SUSPEND   ACTIVE    LAST-SCHEDULE
hello     */1 * * * *   False     0         <none>
$ kubectl get jobs
NAME               DESIRED   SUCCESSFUL   AGE
hello-1202039034   1         1            49s
$ pods=$(kubectl get pods --selector=job-name=hello-1202039034 --output=jsonpath={.items..metadata.name} -a)
$ kubectl logs $pods
Mon Aug 29 21:34:09 UTC 2016
Hello from the Kubernetes cluster
$ kubectl delete cronjob hello
cronjob "hello" deleted

一旦不再需要 Cron Job,簡單地可以使用 kubectl 命令刪除它:
$ kubectl delete cronjob hello
cronjob "hello" deleted

這將會(huì)終止正在創(chuàng)建的 Job政敢。然而其徙,運(yùn)行中的 Job 將不會(huì)被終止,不會(huì)刪除 Job 或 它們的 Pod喷户。為了清理那些 Job 和 Pod唾那,需要列出該 Cron Job 創(chuàng)建的全部 Job,然后刪除它們:
$ kubectl get jobs
NAME               DESIRED   SUCCESSFUL   AGE
hello-1201907962   1         1            11m
hello-1202039034   1         1            8m
...

$ kubectl delete jobs hello-1201907962 hello-1202039034 ...
job "hello-1201907962" deleted
job "hello-1202039034" deleted
...

一旦 Job 被刪除褪尝,由 Job 創(chuàng)建的 Pod 也會(huì)被刪除闹获。注意期犬,所有由名稱為 “hello” 的 Cron Job 創(chuàng)建的 Job 會(huì)以前綴字符串 “hello-” 進(jìn)行命名。如果想要?jiǎng)h除當(dāng)前 Namespace 中的所有 Job避诽,可以通過命令 kubectl delete jobs –all 立刻刪除它們龟虎。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市沙庐,隨后出現(xiàn)的幾起案子鲤妥,更是在濱河造成了極大的恐慌,老刑警劉巖拱雏,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棉安,死亡現(xiàn)場離奇詭異,居然都是意外死亡铸抑,警方通過查閱死者的電腦和手機(jī)贡耽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羡滑,“玉大人菇爪,你說我怎么就攤上這事∑饣瑁” “怎么了凳宙?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長职祷。 經(jīng)常有香客問我氏涩,道長,這世上最難降的妖魔是什么有梆? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任是尖,我火速辦了婚禮,結(jié)果婚禮上泥耀,老公的妹妹穿的比我還像新娘饺汹。我一直安慰自己,他們只是感情好痰催,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布兜辞。 她就那樣靜靜地躺著,像睡著了一般夸溶。 火紅的嫁衣襯著肌膚如雪逸吵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天缝裁,我揣著相機(jī)與錄音扫皱,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛韩脑,可吹牛的內(nèi)容都是我干的氢妈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼扰才,長吁一口氣:“原來是場噩夢啊……” “哼允懂!你這毒婦竟也來了厕怜?” 一聲冷哼從身側(cè)響起衩匣,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粥航,沒想到半個(gè)月后琅捏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡递雀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年柄延,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缀程。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搜吧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出杨凑,到底是詐尸還是另有隱情滤奈,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布撩满,位于F島的核電站蜒程,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏伺帘。R本人自食惡果不足惜昭躺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伪嫁。 院中可真熱鬧领炫,春花似錦、人聲如沸张咳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晶伦。三九已至碟狞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間婚陪,已是汗流浹背族沃。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脆淹。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓常空,卻偏偏與公主長得像,于是被迫代替她去往敵國和親盖溺。 傳聞我的和親對象是個(gè)殘疾皇子漓糙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容