找回密码
 立即注册
首页 业界区 业界 K8s新手系列之CronJob

K8s新手系列之CronJob

呶募妙 2025-6-9 12:12:25
概述

官方文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/cron-jobs/
CronJob控制器以 Job控制器资源为其管控对象,并借助它管理pod资源对象,Job控制器定义的作业任务在其控制器资源创建之后便会立即执行,但CronJob可以以类似于Linux操作系统的周期性任务作业计划的方式控制其运行时间点及重复运行的方式。也就是说,CronJob可以在特定的时间点(反复的)去运行job任务。
学习Job可以阅读这篇文章:https://www.cnblogs.com/huangSir-devops/p/18904493
1.png

CronJob作用


  • 按照指定时间周期(如每小时、每天、每周)创建 Job 对象。
  • Job 负责运行 Pod 执行具体任务,任务完成后 Pod 自动终止。
CronJob资源清单文件
  1. apiVersion: batch/v1
  2. kind: CronJob
  3. metadata:
  4.   name: backup-job
  5. spec:
  6.   schedule: "0 2 * * *"  # 每天凌晨2点执行
  7.   concurrencyPolicy: Forbid  # 禁止并发执行
  8.   startingDeadlineSeconds: 300  # 任务启动超时时间
  9.   successfulJobsHistoryLimit: 3  # 保留成功的Job数量
  10.   failedJobsHistoryLimit: 1  # 保留失败的Job数量
  11.   jobTemplate:  # Job模板
  12.     spec:
  13.       template:
  14.         spec:
  15.           containers:
  16.           - name: backup
  17.             image: my-backup-image
  18.             command: ["/bin/sh", "-c", "backup-script.sh"]
  19.           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 字段相同。
实战案例
  1. [root@master ~/cronjob]# cat cronjob.yaml
  2. apiVersion: batch/v1
  3. kind: CronJob
  4. metadata:
  5.   name: hello-cron
  6. spec:
  7.   # 每分钟执行一次
  8.   schedule: "* * * * *"
  9.   # 禁止并发执行
  10.   concurrencyPolicy: Forbid
  11.   # 任务启动超时时间
  12.   startingDeadlineSeconds: 300
  13.   # 保留成功的Job数量
  14.   successfulJobsHistoryLimit: 10
  15.   # 保留失败的Job数量
  16.   failedJobsHistoryLimit: 3
  17.   jobTemplate:
  18.     spec:
  19.       template:
  20.         spec:
  21.           containers:
  22.           - name: cj-busybox
  23.             image: busybox
  24.             args:
  25.             - /bin/sh
  26.             - -c
  27.             - echo "Hello, CronJob!"
  28.           restartPolicy: Never
  29. # 创建cronjob
  30. [root@master ~/cronjob]# kubectl apply -f cronjob.yaml
  31. cronjob.batch/hello-cron created
复制代码
查看资源
  1. # 查看cronjob
  2. # SUSPEND表示是否暂停调度(False表示正常运行)
  3. # ACTIVE:当前活跃的 Job 数量(0表示没有正在运行的 Job)
  4. # LAST SCHEDULE:上一次调度 Job 的时间(57s前)
  5. [root@master ~/cronjob]# kubectl get cj
  6. NAME         SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
  7. hello-cron   * * * * *   False     0        57s             18m
  8. # 查看job
  9. [root@master ~/cronjob]# kubectl get job
  10. NAME                  COMPLETIONS   DURATION   AGE
  11. hello-cron-29156032   1/1           6s         9m8s
  12. hello-cron-29156033   1/1           6s         8m8s
  13. hello-cron-29156034   1/1           5s         7m8s
  14. hello-cron-29156035   1/1           6s         6m8s
  15. hello-cron-29156036   1/1           6s         5m8s
  16. hello-cron-29156037   1/1           5s         4m8s
  17. hello-cron-29156038   1/1           6s         3m8s
  18. hello-cron-29156039   1/1           5s         2m8s
  19. hello-cron-29156040   1/1           5s         68s
  20. hello-cron-29156041   1/1           5s         8s
  21. # 查看Pod
  22. [root@master ~/cronjob]# kubectl get po
  23. NAME                                                     READY   STATUS      RESTARTS   AGE
  24. hello-cron-29156031-jnck2                                0/1     Completed   0          10m
  25. hello-cron-29156032-cxbsk                                0/1     Completed   0          9m4s
  26. hello-cron-29156033-bw6kf                                0/1     Completed   0          8m4s
  27. hello-cron-29156034-kkwc2                                0/1     Completed   0          7m4s
  28. hello-cron-29156035-bhzkv                                0/1     Completed   0          6m4s
  29. hello-cron-29156036-vlxrz                                0/1     Completed   0          5m4s
  30. hello-cron-29156037-v968r                                0/1     Completed   0          4m4s
  31. hello-cron-29156038-gj9c5                                0/1     Completed   0          3m4s
  32. hello-cron-29156039-7lnb4                                0/1     Completed   0          2m4s
  33. hello-cron-29156040-lqtfv                                0/1     Completed   0          64s
  34. hello-cron-29156041-bndq5                                0/1     Completed   0          4s
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册