0
点赞
收藏
分享

微信扫一扫

k8s教程(20)-pod之定时任务


文章目录

  • ​​01 引言​​
  • ​​02 基本语法​​
  • ​​03 案例​​
  • ​​04 文末​​

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​​查看任务状态,发现的确每分钟调度了一次:

k8s教程(20)-pod之定时任务_kubernetes


还可以通过查找Cron Job对应的容器,验证每隔1min产生一个容器的事实:

k8s教程(20)-pod之定时任务_基本语法_02


查看任意一个容器的日志,结果如下:

k8s教程(20)-pod之定时任务_云原生_03


运行下面的命令,可以更直观地了解Cron Job定期触发任务执行的历史和现状:

k8s教程(20)-pod之定时任务_容器化技术_04

在​​Kubernetes1.9​​​版本后,​​kubectl​​​命令增加了别名​​cj​​​来表示​​cronjob​​​,同时 ​​kubectl set image/env​​​命令也可以作用在​​CronJob​​对象上。

04 文末

本文主要讲解pod的定时任务调度,希望能帮助到大家,谢谢大家的阅读,本文完!


举报

相关推荐

0 条评论