介绍
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