介绍

CronJob 允许你在 Kubernetes 集群中按照指定的时间表定期运行作业。你可以使用类似于标准 Unix cron 表达式的语法来定义 CronJob 的执行时间表,还可以帮助自动执行重复性的任务,如定期备份、日志清理等。

CronJob 示例

下面的 CronJob 示例清单会在每分钟打印出当前时间和问候消息:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
  namespace: default
spec:
  concurrencyPolicy: Allow
  failedJobsHistoryLimit: 1
  jobTemplate:
    metadata:
      creationTimestamp: null
    spec:
      template:
        metadata:
          creationTimestamp: null
        spec:
          containers:
          - command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            name: hello
            resources: {}
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: OnFailure
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
  schedule: '* * * * *'
  successfulJobsHistoryLimit: 3
  suspend: false

关键字段解释:

  • kind: CronJob: 表明这是一个 CronJob 对象。
  • concurrencyPolicy: Allow: 默认允许并发执行多个任务实例,还有 Forbid:CronJob 不允许并发执行和 Replace:如果新 Job 的执行时间到了而老 Job 没有执行完,CronJob 会用新 Job 替换当前正在运行的 Job。共三种
  • failedJobsHistoryLimit: 1: 保留最近一个执行失败的任务的记录。
  • jobTemplate: 定义了 CronJob 中的任务模板。
  • template: 定义了任务运行时的 Pod 模板。
  • containers: 定义了 Pod 中的容器。
  • command: 指定容器执行的命令,在这里是一个 shell 命令,打印当前时间和一条消息。
  • restartPolicy: OnFailure: 指定了 Pod 的重启策略,在任务失败时重启。
  • schedule: ‘* * * * *’: 定义了任务的调度时间表,这里使用了一个 Cron 表达式,表示每分钟执行一次。
  • successfulJobsHistoryLimit: 3: 保留最近三个执行成功的任务的记录。
  • suspend: false: 表明该 CronJob 没有被挂起,将会按照调度时间表定期执行任务。 suspend: false

注意:如果 startingDeadlineSeconds 的设置值低于 10 秒钟,CronJob 可能无法被调度。 这是因为 CronJob 控制器每 10 秒钟执行一次检查。

创建这个 计划任务

kubectl create -f cronjob.yaml
# cj 是计划任务简写
[root@master01 yaml]# kubectl get cj
NAME    SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   * * * * *   False     0        27s             6m27s
# 默认保留最近三个执行成功的任务的记录。
[root@master01 yaml]# kubectl get jobs.batch 
NAME             COMPLETIONS   DURATION   AGE
hello-28555302   1/1           5s         2m17s
hello-28555303   1/1           5s         77s
hello-28555304   1/1           5s         17s

查看输出日志

注意:查看自己的K8S容器的时间,如果没修改过的话可能是用的UTC时间。

[root@master01 yaml]# kubectl logs pods/hello-28555306-dk4s6 
Wed Apr 17 09:46:02 UTC 2024
Hello from the Kubernetes cluster
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐