01 引言
声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记
Kubernetes从1.5版本开始增加了一种新类型的Job,即类似Linux Cron的定时任务Cron Job
,下面看看如何定义和使用这种类型的Job
。
02 基本语法
首先,确保
Kubernetes
的版本为1.8
及以上。
Cron Job的定时表达式基本上照搬了Linux Cron的表达式,格式如下:
Minutes Hours DayofMonth Month DayofWeek
其中每个域都可出现的字符如下。
域 | 描述 |
Minutes | 可出现“,” “-” “*” “/” 这4个字符,有效范围为0~59 的整数 |
Hours | 可出现“,” “-” “%” “/” 这4个字符,有效范围为0~23 的整数 |
DayofMonth | 可出现“,” “- “*” “/“ “?” “L” “W“ “C” 这8个字符,有效范围 为1~31 的整数 |
Month | 可出现“,” “-” “*” “/” 这4个字符,有效范围为1~12的整数或JAN~DEC |
DayofWeek | 可出现“,” “*” “/” “?” “L” “C” “#” 这8个字符,有效范围为1~7 的整数或SUN~SAT 。1 表示星期天,2 表示星期一,以此类推 |
表达式中的特殊字符“*”
与“/”
的含义如下:
*
:表示匹配该域的任意值,假如在Minutes
域使用“*”
,则表示每分钟都会触发事件;/
:表示从起始时间开始触发,然后每隔固定时间触发一次,例如在
Minutes域设置为5/20,则意味着第1次触发在第5min时,接下来每20min触发一 次,将在第25min、第45min等时刻分别触发。
03 案例
比如,我们要每隔1min
执行一次任务,则Cron表达式如下:
*/1 * * * *
编写一个Cron Job的配置文件(cron.yaml
):
apiversion: batch/vl beta kind: CronJob metadata: name: hello spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name:hello image:busybox args: - /bin/sh - -C - date;echo Hello from the Kubernetes cluster restartPolicy:OnFailure
该例子定义了一个名为hello
的Cron Job
,任务每隔1min执行一次,运行的镜像是busybox
,运行的命令是Shell
脚本,脚本运行时会在控制台输出当前时间和字符串"Hello from the Kubernetes cluster".
接下来运行kubectl create
命令完成创建:
$ kubectl create -f cron.yaml cronjob "hello"created
然后每隔1min
运行kubectl get cronjob hello
查看任务状态,发现的确每分钟调度了一次:
还可以通过查找Cron Job对应的容器,验证每隔1min产生一个容器的事实:
查看任意一个容器的日志,结果如下:
运行下面的命令,可以更直观地了解Cron Job定期触发任务执行的历史和现状:
在Kubernetes1.9
版本后,kubectl
命令增加了别名cj
来表示cronjob
,同时 kubectl set image/env
命令也可以作用在CronJob
对象上。
04 文末
本文主要讲解pod的定时任务调度,希望能帮助到大家,谢谢大家的阅读,本文完!