Day23-Kubernetes 那些事 - CronJob

前言

今天要介绍的内容不一定适用於每位读者,不一定每位读者都会用到这个功能,但因为 K8s 也有提供这种功能所以就想说介绍给读者了,今天要介绍的是 K8s 的排程工具:CronJob

什麽是 CronJob?

看到 Cron 应该就知道这个跟时间任务管理有关,而 Job 是任务,所以 CronJob 就是在规定时间要执行的任务,也就是大家俗称的排程。

还记得笔者在介绍 K8s 的时候一直强调一句话:Pod 是 K8s 中用来执行的最小单位,CronJob 在 K8s 中也是要运行的,所以可想而知 CronJob 一定也会产生相对应的 Pod,所以一样也会吃到机器的资源,所以读者在设定 CronJob 的时候也要小心不要一次创立太多 Job 进而导致资源不足。

Cron 格式

在开始介绍 CronJob 的写法之前笔者想介绍一下 Cron 格式,K8s 的 CronJob 写法必须要遵从 Cron 格式,这样才能在正确的时间点执行任务,而 Cron 格式也很简单,整体写法长得像这样: * * * * *

这边笔者一一解释每个 * 代表的内容。

  • 第一个星号代表的是分钟(0 ~ 59)

  • 第二个星号代表的是小时(0 ~ 23)

  • 第三个星号代表的是日(1 ~ 31)

  • 第四个星号代表的是月(1 ~ 12)

  • 第五个星号代表的是星期(0 ~ 7),其中星期日可用 0 或 7 表示,毕竟有些人觉得星期日是一周的第一天但有些人觉得星期日是一周的最後一天XD

假如今天每 3 小时要做一次任务,一般来说写法会长这样: * 0, 3, 6, 9, 12, 15, 18, 21, 24 * * *,这样真的太累了,所以可以直接在小时的星号那边加个 /3 就代表每 3 小时要做一次任务,写法会像这样: * */3 * * *

CronJob 写法

接下来就用一个简单的例子示范 CronJob 的写法。

apiVersion: batch/v1beta1 
kind: CronJob 
metadata:   
  name: helloworld
spec:   
  schedule: "*/1 * * * *"   
  jobTemplate:     
    spec:       
      template:         
        spec:           
          containers:           
            - name: helloworld            
              image: debian             
              command: ["echo", "helloworld"]
          restartPolicy: OnFailure

一样先从 spec 开始看 CronJob 的内部详细任务。

  • schedule

    代表这个任务要在哪些时间点开始动作,这边要写上符合 Cron 格式的时间,以笔者的范例来解释就是每分钟都要执行一次。

  • jobTemplate

    代表要做的任务是什麽,里面的描述就会跟 Pod 的描述档一样,毕竟想在 K8s 中执行就必须要建立一个 Pod 出来。

    接下来就是描述 Pod 的运行内容了,相信从 Replication Controller 的文章看到现在的读者应该对底下的 template 都不陌生,这边的 template 就是为了描述 Pod,而笔者为了方便示范所以就让 Pod 内的 container 运行 Debian 这个作业系统,并在里面印出 helloworld。

CronJob 建立

建立方法一样用 apply 的参数建立。

建立完一样可以用 get 的参数查看建立好的 CronJob,还记得笔者上面说的吗?由於这些任务都要在 K8s 中运行,所以每个任务都会是一个 Pod,这边一样可以用 get 的参数查看 Pod 的建立状况。

想知道目前 CronJob 有多少个任务可以用 get jobs 的方式查看,笔者後面加个 --watch 是为了监测是否有在规定的时间点建立一个新的任务。

最後想知道这些任务到底做了什麽可以用 log 这个参数。

最後想一次删掉全部的任务就把 CronJob 删除即可。

小结

今天介绍了 CronJob,虽然市面上有非常多可以进行排程的套件,像 celery 等等,不过假如只是简单的排程应用的话,读者不妨可以考虑用看看 K8s 的 CronJob,也方便管理每个任务的状态。

花了这麽多天终於把 K8s 的基本观念都介绍完了,读者应该不难想像 K8s 的水有多深XD

就连笔者自己其实也都没有说完全摸透这个应用程序部属工具,但只要读者了解这几天介绍的内容就可以简单的架设一个网站了,从明天开始的文章要来介绍 Nginx,如果对於文章有任何问题都欢迎留言给我,那我们就下一篇文章见喽~


<<:  Shell

>>:  Day24 CSS Animation 动画

Day 12 Compose UI Dialog

今年的疫情蛮严重的,希望大家都过得安好,希望疫情快点过去,能回到一些线下技术聚会的时光~ 今天目标:...

D9. 学习基础C、C++语言

D9: while跟 do-while的差别 我原本一直以为do-while是要判断式成立时才会执行...

企业资料通讯Week4 (1) | Socket &TCP & UDP

Socket 是甚麽? 远在两边(在同一台机器也是可以)的两个程序(process)互相传递讯息就是...

使用 Effect Hook( Day17 )

上一篇介绍过 State Hook 用来储存状态,Effect Hook 则用来处理 functio...

CISSP统计 - 2021年01月

过去统计数 CISSP Member Counts as of July 1, 2020 ISC2...