所屬技術領域:
kubernetes
|名詞定義|
CronJobs提供了在特定的時間或者間隔内處理業務邏輯的方法。一般建立一個Cronjob有兩種方式,第一種是定義Java類,由Hybris生成腳本并加入資料庫。第二種是直接編寫groovy腳本語言并插入資料庫,這種應該适合邏輯比較少的時候,比如隻有一兩句邏輯的時候,一般用得比較少。
|技術特點|
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