iT邦幫忙

2021 iThome 鐵人賽

DAY 23
1

前言

今天要介紹的內容不一定適用於每位讀者,不一定每位讀者都會用到這個功能,但因為 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,如果對於文章有任何問題都歡迎留言給我,那我們就下一篇文章見嘍~


上一篇
Day22-Kubernetes 那些事 - Namespace
下一篇
Day24-Kubernetes 那些事 - 內部架構
系列文
前端工程師學習 DevOps 之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言