iT邦幫忙

2021 iThome 鐵人賽

DAY 17
1
DevOps

k8s 入門學習 30天系列 第 17

IT 鐵人賽 k8s 入門30天 -- day17 Run automated tasks with cron jobs

前言

今天要來實作 Run automated tasks with cron jobs 這個 Task

Prequest

已有 k8s 執行個體

在這個章節將會使用 minikube

佈署目標

佈署一個每分鐘送一個 Hello 訊息到 Console 的任務到 k8s cluster 上

建立 CronJob

設定 cronjob.yaml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

建立一個 CronJob

設定名稱為 hello

設定排程周期為 "*/1 * * * *" 每分鐘執行一次的意思, 語法如下

#      ┌────────────────── timezone (optional)
#      |      ┌───────────── minute (0 - 59)
#      |      │ ┌───────────── hour (0 - 23)
#      |      │ │ ┌───────────── day of the month (1 - 31)
#      |      │ │ │ ┌───────────── month (1 - 12)
#      |      │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
#      |      │ │ │ │ │                                   7 is also Sunday on some systems)
#      |      │ │ │ │ │
#      |      │ │ │ │ │
# CRON_TZ=UTC * * * * *

在 container 部份的設定是使用 busybox 的 image (有linux shell 的工具)

執行內容為使用 /bin/sh 印出現在日期以及 Hello from the Kubernetes cluster

特別的是 CronJob apiVersion 的值在 1.21.* 版之後就可以使用 batch/v1

因為我這邊使用的 minikube 是使用 1.20.0 版本所以只能用 batch/v1beta1

建立佈署指令

kubectl apply -f cronjob.yaml

查詢佈署指令

kubectl get cronjob hello

驗證

找出 job 名稱

kubectl get jobs --watch

每分鐘會產生一個 Job

透過 job name 找到 Pod 驗證內容

pods=$(kubectl get pods --selector=job-name=hello-1633100400 --output=jsonpath={.items[*].metadata.name})
kubectl logs $pods

刪除 CronJob

kubectl delete cronjob hello

後記

有幾個特別的可以設定在 Job tempate

startingDeadline(Optional)

這個欄位代表要啟動 CronJob 的最晚時間

假設超過這個時間 CronJob 沒有執行, 之後就不會執行

如果沒有設定代表 CronJob 沒有 Deadline

currencyPolicy(Optional)

這個欄位是用來指定是否能夠同時執行多個由 CronJob 產生的 Job

設定值如下:

Allow(預設值) 可以同時運行

Forbid 不允許多個 Job 同時運行

Replace 假設在新的 Job 要執行時, 舊的 Job 還沒執行結束, 則 CronJob 會用新的 Job 取代目前正在執行的 Job

successfulJobsHistoryLimit

這個欄位是用來指定多少最新完成的 Job 能夠被保留

預設值是 3, 代表預設只保留最新 3 個完成的

failedJobsHistoryLimit

這個欄位是用來指定多少最新失敗的 Job 能夠被保留

預設值是 1, 代表預設只保留最新 1 個失敗的


上一篇
IT 鐵人賽 k8s 入門30天 -- day16 k8s Task Deploy a single instance Mysql use StatefulSet
下一篇
IT 鐵人賽 k8s 入門30天 -- day18 Task Configure Default Memory Requests and Limits for a Namespace
系列文
k8s 入門學習 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言