天天看點

Kubernetes必備知識: CronJob

所屬技術領域:

kubernetes

|名詞定義|

CronJobs提供了在特定的時間或者間隔内處理業務邏輯的方法。一般建立一個Cronjob有兩種方式,第一種是定義Java類,由Hybris生成腳本并加入資料庫。第二種是直接編寫groovy腳本語言并插入資料庫,這種應該适合邏輯比較少的時候,比如隻有一兩句邏輯的時候,一般用得比較少。

|技術特點|

 Cronjob 文法

Kubernetes必備知識: CronJob
Kubernetes必備知識: CronJob

CronJob可以叫定時運作 Job。CronJob 其實和 Job 大體是相似的,唯一的不同點就是它可以設計一個時間。

定時任務和 Job 相比會多幾個不同的字段:

schedule:schedule 這個字段主要是設定時間格式,它的時間格式和 Linux 的 crontime 是一樣的,是以直接根據 Linux 的 crontime 書寫格式來書寫就可以了。舉個例子: */1 指每分鐘去執行一下 Job,這個 Job 需要做的事情就是列印出大約時間,然後列印出“Hello from the kubernetes cluster” 這一句話;

startingDeadlineSeconds:即:每次運作 Job 的時候,它最長可以等多長時間,有時這個 Job 可能運作很長時間也不會啟動。是以這時,如果超過較長時間的話,CronJob 就會停止這個 Job;

concurrencyPolicy:就是說是否允許并行運作。所謂的并行運作就是,比如說我每分鐘執行一次,但是這個 Job 可能運作的時間特别長,假如兩分鐘才能運作成功,也就是第二個 Job 要到時間需要去運作的時候,上一個 Job 還沒完成。如果這個 policy 設定為 true 的話,那麼不管你前面的 Job 是否運作完成,每分鐘都會去執行;如果是 false,它就會等上一個 Job 運作完成之後才會運作下一個;

JobsHistoryLimit:這個就是每一次 CronJob 運作完之後,它都會遺留上一個 Job 的運作曆史、檢視時間。當然這個額不能是無限的,是以需要設定一下曆史存留數,一般可以設定預設 10 個或 100 個都可以,這主要取決于每個人叢集不同,然後根據每個人的叢集數來确定這個時間。

 CronJob的啟動條件:

在k8s 1.8以及更高的版本中的環境中,API server要求的版本為apiVersion: batch/v1beta1,但是這個一般是預設的。當然了,對于之前的版本也可以利用--runtime-config=batch/v2alpha1=true來修改,然後重新開機API server服務。

運作過程:

我們利用官方的demo,其中下面是cronjob.yaml:

主要功能是:每分鐘建立一個job,這個job的功能就是輸出Hello World

apiVersion: batch/v1beta1

kind: CronJob

metadata:

name: test

spec:

schedule: "/1 *"

jobTemplate:

spec:
  template:
    spec:
      containers:
      - name: test
        image: docker.hobot.cc/library/centos:7.4
        args:
        - /bin/sh
        - -c
        - echo Hello World
      restartPolicy: OnFailure
           

建立cronJob:kubectl create -f cronjob.yaml

檢視test pods的建立狀态:kubectl get jobs --watch

删除CronJob:kubectl delete cronjob test

 Crontab的基本格式

<分鐘><小時><日><月份><星期><指令>

分鐘值從 0 到 59.

小時值從 0 到 23.

日值從 1 到 31.

月值從 1 到 12.

星期值從 0 到 6, 0 代表星期日

多個時間可以用逗号隔開,範圍可以用連字元給出,*可以作為通配符。空格用來分開字段。

|資料來源|

名詞定義:

https://yq.aliyun.com/articles/616477?spm=a2c4e.11155472.0.0.3ac77816oPD7aV

技術特點:

https://blog.csdn.net/hanlaipeng11/article/details/79623636