概述
官方文档:CronJob | Kubernetes
CronJob控制器以 Job控制器资源为其管控对象,并借助它管理pod资源对象,Job控制器定义的作业任务在其控制器资源创建之后便会立即执行,但CronJob可以以类似于Linux操作系统的周期性任务作业计划的方式控制其运行时间点及重复运行的方式。也就是说,CronJob可以在特定的时间点(反复的)去运行job任务。
学习Job可以阅读这篇文章:K8s新手系列之Job资源 - huangSir-devops - 博客园

CronJob作用
- 按照指定时间周期(如每小时、每天、每周)创建 Job 对象。
- Job 负责运行 Pod 执行具体任务,任务完成后 Pod 自动终止。
CronJob资源清单文件
apiVersion: batch/v1 | |
kind: CronJob | |
metadata: | |
name: backup-job | |
spec: | |
schedule: "0 2 * * *" # 每天凌晨2点执行 | |
concurrencyPolicy: Forbid # 禁止并发执行 | |
startingDeadlineSeconds: 300 # 任务启动超时时间 | |
successfulJobsHistoryLimit: 3 # 保留成功的Job数量 | |
failedJobsHistoryLimit: 1 # 保留失败的Job数量 | |
jobTemplate: # Job模板 | |
spec: | |
template: | |
spec: | |
containers: | |
- name: backup | |
image: my-backup-image | |
command: ["/bin/sh", "-c", "backup-script.sh"] | |
restartPolicy: OnFailure # 失败时重启 |
字段说明
schedule:Cron 表达式,格式为 分钟 小时 日期 月份 星期
- 示例:
- 0 2 * * *:每天凌晨 2 点。
- */15 * * * *:每 15 分钟。
- 0 0 * * 0:每周日午夜。
concurrencyPolicy:控制并发执行策略
- Allow(默认):允许并发运行多个 Job。
- Forbid:禁止并发,若前一个未完成则跳过本次调度。
- Replace:替换未完成的 Job,启动新 Job。
startingDeadlineSeconds
任务启动超时时间,若超过此时间仍未启动,则标记为失败。
jobTemplate
Job 的模板定义,包含 Pod 规范,与独立 Job 资源的 spec 字段相同。
实战案例
[root@master ~/cronjob]# cat cronjob.yaml | |
apiVersion: batch/v1 | |
kind: CronJob | |
metadata: | |
name: hello-cron | |
spec: | |
# 每分钟执行一次 | |
schedule: "* * * * *" | |
# 禁止并发执行 | |
concurrencyPolicy: Forbid | |
# 任务启动超时时间 | |
startingDeadlineSeconds: 300 | |
# 保留成功的Job数量 | |
successfulJobsHistoryLimit: 10 | |
# 保留失败的Job数量 | |
failedJobsHistoryLimit: 3 | |
jobTemplate: | |
spec: | |
template: | |
spec: | |
containers: | |
- name: cj-busybox | |
image: busybox | |
args: | |
- /bin/sh | |
- -c | |
- echo "Hello, CronJob!" | |
restartPolicy: Never | |
# 创建cronjob | |
[root@master ~/cronjob]# kubectl apply -f cronjob.yaml | |
cronjob.batch/hello-cron created |
查看资源
# 查看cronjob | |
# SUSPEND表示是否暂停调度(False表示正常运行) | |
# ACTIVE:当前活跃的 Job 数量(0表示没有正在运行的 Job) | |
# LAST SCHEDULE:上一次调度 Job 的时间(57s前) | |
[root@master ~/cronjob]# kubectl get cj | |
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE | |
hello-cron * * * * * False 0 57s 18m | |
# 查看job | |
[root@master ~/cronjob]# kubectl get job | |
NAME COMPLETIONS DURATION AGE | |
hello-cron-29156032 1/1 6s 9m8s | |
hello-cron-29156033 1/1 6s 8m8s | |
hello-cron-29156034 1/1 5s 7m8s | |
hello-cron-29156035 1/1 6s 6m8s | |
hello-cron-29156036 1/1 6s 5m8s | |
hello-cron-29156037 1/1 5s 4m8s | |
hello-cron-29156038 1/1 6s 3m8s | |
hello-cron-29156039 1/1 5s 2m8s | |
hello-cron-29156040 1/1 5s 68s | |
hello-cron-29156041 1/1 5s 8s | |
# 查看Pod | |
[root@master ~/cronjob]# kubectl get po | |
NAME READY STATUS RESTARTS AGE | |
hello-cron-29156031-jnck2 0/1 Completed 0 10m | |
hello-cron-29156032-cxbsk 0/1 Completed 0 9m4s | |
hello-cron-29156033-bw6kf 0/1 Completed 0 8m4s | |
hello-cron-29156034-kkwc2 0/1 Completed 0 7m4s | |
hello-cron-29156035-bhzkv 0/1 Completed 0 6m4s | |
hello-cron-29156036-vlxrz 0/1 Completed 0 5m4s | |
hello-cron-29156037-v968r 0/1 Completed 0 4m4s | |
hello-cron-29156038-gj9c5 0/1 Completed 0 3m4s | |
hello-cron-29156039-7lnb4 0/1 Completed 0 2m4s | |
hello-cron-29156040-lqtfv 0/1 Completed 0 64s | |
hello-cron-29156041-bndq5 0/1 Completed 0 4s |
1673

被折叠的 条评论
为什么被折叠?



