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 个失败的


<<:  Day16 - [丰收款] 取得PayToken的最後一哩路很慢长

>>:  xargs - Linux里好用的工具

Day 06: Creational patterns - Factory Method

目的 不再限制一个工厂(物件)建立许多产品(物件),而是转变成一个产品(物件)对应一个工厂(物件),...

Day7 甘特图的特性与关键路径

再来要讲到管理工具中耳熟能详的工具之一,甘特图。Gantt Chart在规划专案时,几乎就是所以人第...

企划实现(12)

FB登入 第10步:开启 /app/res/values/strings.xml 档案。 FB会自动...

口罩脸孔资料集的标注、资料前处理与资料扩增

我们已将资料集上传到 nilvana 的 Vision Studio 中, 也知道标注格式的种类与基...

[Day16] - 利用 direflow.io 将 React Component 转换成 Web Component

昨天解说 Vue 如何制作 Web-Component 今天来说明一下 , 那 React 如何制作...