K8S CronJob计划任务

介绍

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
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes中的CronJob是一种用于周期性执行任务的机制。它主要用于定期运行特定的作业,如数据备份、定时报告、定时任务等。 CronJob是基于Unix中的cron表达式的,该表达式由五个字段组成:分、时、日、月、周几。通过这些字段的组合,可以实现对任务在不同时间间隔进行精确调度。在Kubernetes中,CronJob将每个字段的定义封装为一个对象,并使用Cron表达式将这些对象组合起来。 CronJob是由Kubernetes的控制平面负责执行的。当到达指定的时间时,控制平面将自动创建一个Job对象,并将其分发到合适的Worker节点上运行。Job对象的创建和管理完全由Kubernetes控制平面处理,对用户而言是透明的。 CronJob对象的定义包括了作业的调度规则和执行的任务。可以指定作业的运行时间、重试策略、并行性等属性。执行的任务可以是容器或命令行,可以是存储在镜像中的应用程序或是运行在Pod中的脚本。用户可以根据实际需求定义不同的任务。 除了基本的调度功能外,CronJob还提供了监控和日志功能,可以通过指定调度失败阈值和记录日志的级别来跟踪作业的状态和执行情况。这些信息对于定位问题、排查故障非常有帮助。 总之,KubernetesCronJob是一种非常强大和灵活的调度机制,可以满足周期性任务的需求。通过使用CronJob,用户可以方便地配置和管理定时任务,提高任务的可靠性和稳定性。同时,CronJob还提供了丰富的监控和日志功能,帮助用户更好地了解和管理任务的执行情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值