K8s 內也可以跑 Jobs 和 CronJobs,這一篇筆記就是在記錄此事
什麼是 Jobs
- one time execution
- can run multiple Pods in parallel
- Successful completions are tracked
什麼是 CronJobs
- Cron Job creates Jobs on a time-based schedule
- scheduled using the Cron format
- names must be less than 52 characters
* * * * *
為標準 Cron format.- 第一個
*
: min (0~59) - 第二個
*
: hour (0~23) - 第三個
*
: day of month (1 - 31) - 第四個
*
: month (1 - 12) 或 jan, fan, mar,… - 第五個
*
: day of week (0 - 6, Sunday = 0 or 7) 或是 sun, mon, tue,…
- 第一個
- 範例:
- 每週一早上 3 點,
0 3 * * 1
- 每小時:
0 * * * *
,@hourly
- 每天:
0 0 * * *
,@daily
- 每週:
0 0 1 * *
,@monthly
- 每年:
0 0 1 1 *
,@yearly
- 每分鐘:
*/1 * * * *
- 每週一早上 3 點,
- cron format editor 網站
如何建立 Jobs 和 CronJobs
-
先定義 Jobs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19apiVersion: batch/v1
kind: job
metadata:
name: pie-counter
spec:
template:
metadata:
name: pie-counter
spec:
completions: 4
parallelism: 2
restartPolicy: Never
containers:
- name: pie-counter
image: xxx
command:
- "sh"
- "-c"
- "....."- apiVersion 和 kind 的設定方法如上
- completions: 需要成功執行 Job 的 Pods 數量
- parallelism: 平行執行 Job 的 Pods 數量
- restartPolicy 設定值有
- Never : Never try to restart
- OnFailure: restart when job fail
- command: 執行指令
-
Crobjob YAML 樣本如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21apiVersion: batch/v1
kind: CronJob
metadata:
name: pie-counter
spec:
concurrencyPolicy: Allow # Allow, Forbid, Replace
schedule: '*/5 * * * *'
jobTemplate:
metadata:
name: pie-counter
spec:
completions: 4
parallelism: 2
restartPolicy: Never
containers:
- name: pie-counter
image: xxx
command:
- "sh"
- "-c"
- "....."- concurrencyPolicy: 是否允許 cronjobs 重疊執行
- schedule: 設定執行時間表 (Cron format)
- 使用
jobTemplate
來描述job
的 template