K8s系列之:Cronjob定时任务

K8s系列之:Cronjob定时任务

K8s新类型的Job,类似Linux Cron的定时任务Cron Job。

在API Server的启动进程上增加以下配置参数并重启:

--runtime-config=batch/v2alpha1=true

Cron Job的定时表达式,基本上照搬了Linux Cron的表达式,区别是第1位是分钟而不是秒,格式如下:

Minutes Hours DayofMonth Month DayofWeek Year

每一个域可出现的字符如下:

  • Minutes:可出现",-*/"这4个字符,有效范围为0-59的整数
  • Hours:可出现",-*/"这4个字符,有效范围0-23的整数
  • DayofMonth:可出现",-*/?LWC"这8个字符,有效范围为0-31的整数
  • Month:可出现",-*/"这4个字符,有效范围为1-12的整数或JAN-DEC。
  • DayofWeek:可出现",-*/?LC#"这8个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一,以此类推。

表达式的特殊字符"*“与”/"的含义如下:

  • *:表示匹配该域的任意值,假如在Minutes域使用*则表示每分钟都会触发事件。
  • /:表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域设置为5/20,则意味着第1次出发在第5min时接下来每20min触发一次,将在第25min、第45min等时刻分别触发。
  • 比如每隔1min执行一次任务,则Cron表达式如下:*/1 * * * *

编写一个Cron Job的配置文件
cron.yaml

apiVersion: batch/v2alpha1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    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查看任务状态,发现的确是每分钟调度了一次

kubectl get cronjob hello
NAME   SCHEDULE    SUSPEND    ACTIVE   LAST_SCHEDULE
hello  */1 * * * *  False      0 

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

docker ps -a | grep busybox

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

docker logs 83f7b86728ea

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

kubectl get jobs --watch
NAME       DESIRED       SUCCESSFUL      AGE
hello-14852  1              1             31m
hello-25930  1              1             30m

查看具体的Pod可以通过下面方式:

kubectl get pods --show-all | grep hello-14852

当不需要某个Cron Job时,可以通过下面的命令删除

kubectl delete cronjob hello
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Kubernetes中的CronJob是一种用于周期性执行任务的机制。它主要用于定期运行特定的作业,如数据备份、定时报告、定时任务等。 CronJob是基于Unix中的cron表达式的,该表达式由五个字段组成:分、时、日、月、周几。通过这些字段的组合,可以实现对任务在不同时间间隔进行精确调度。在Kubernetes中,CronJob将每个字段的定义封装为一个对象,并使用Cron表达式将这些对象组合起来。 CronJob是由Kubernetes的控制平面负责执行的。当到达指定的时间时,控制平面将自动创建一个Job对象,并将其分发到合适的Worker节点上运行。Job对象的创建和管理完全由Kubernetes控制平面处理,对用户而言是透明的。 CronJob对象的定义包括了作业的调度规则和执行的任务。可以指定作业的运行时间、重试策略、并行性等属性。执行的任务可以是容器或命令行,可以是存储在镜像中的应用程序或是运行在Pod中的脚本。用户可以根据实际需求定义不同的任务。 除了基本的调度功能外,CronJob还提供了监控和日志功能,可以通过指定调度失败阈值和记录日志的级别来跟踪作业的状态和执行情况。这些信息对于定位问题、排查故障非常有帮助。 总之,Kubernetes的CronJob是一种非常强大和灵活的调度机制,可以满足周期性任务的需求。通过使用CronJob,用户可以方便地配置和管理定时任务,提高任务的可靠性和稳定性。同时,CronJob还提供了丰富的监控和日志功能,帮助用户更好地了解和管理任务的执行情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最笨的羊羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值