Kubernetes——CronJob控制器
CronJob控制器
CronJob 控制器用于管理 Job 控制器资源的运行时间。Job 控制器定义的作业任务在其控制器资源创建之后立即执行,但 CronJob 可以以类似于 Linux 操作系统的周期性任务作业计划(contab)的方式控制其运行的时间点及重复运行的方式,具体如下:
- 在未来某时间点运行作业一次。
- 在指定的时间点重复运行作业。
CronJob 对象支持使用的时间格式类似于 Crontab,略有不同的是,CronJob 控制器在指定的时间点时,"?" 和 "*" 的意义相同,都表示任何可用的有效值。
一、创建 CronJob 对象
CronJob 控制器的相关配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | [root@mh-k8s-master-prd-243-24 ~] # kubectl explain cronjob KIND: CronJob VERSION: batch /v1beta1 DESCRIPTION: CronJob represents the configuration of a single cron job. FIELDS: apiVersion <string> APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https: //git .k8s.io /community/contributors/devel/sig-architecture/api-conventions .md #resources kind <string> Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https: //git .k8s.io /community/contributors/devel/sig-architecture/api-conventions .md #types-kinds metadata <Object> Standard object's metadata. More info: https: //git .k8s.io /community/contributors/devel/sig-architecture/api-conventions .md #metadata spec <Object> Specification of the desired behavior of a cron job, including the schedule. More info: https: //git .k8s.io /community/contributors/devel/sig-architecture/api-conventions .md #spec-and-status status <Object> Current status of a cron job. More info: https: //git .k8s.io /community/contributors/devel/sig-architecture/api-conventions .md #spec-and-status [root@mh-k8s-master-prd-243-24 ~] # |
spec 字段常用嵌套如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | [root@mh-k8s-master-prd-243-24 ~] # kubectl explain cronjob.spec KIND: CronJob VERSION: batch /v1beta1 RESOURCE: spec <Object> DESCRIPTION: Specification of the desired behavior of a cron job, including the schedule. More info: https: //git .k8s.io /community/contributors/devel/sig-architecture/api-conventions .md #spec-and-status CronJobSpec describes how the job execution will look like and when it will actually run. FIELDS: concurrencyPolicy <string> Specifies how to treat concurrent executions of a Job. Valid values are: - "Allow" (default): allows CronJobs to run concurrently; - "Forbid" : forbids concurrent runs, skipping next run if previous run hasn't finished yet; - "Replace" : cancels currently running job and replaces it with a new one 并发执行策略,可用值有 "Allow" (允许)、 "Forbid" (禁止)和 "Replace" (替换), 用于定义前一次作业运行尚未完成时是否以及如何运行后一次作业。 failedJobsHistoryLimit <integer> The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1. 为失败的任务执行保留的历史记录数,默认为 1. jobTemplate <Object> -required- Specifies the job that will be created when executing a CronJob. Job 控制器模版,用于为 CronJob 控制器生成 Job 对象;必选字段。 schedule <string> -required- The schedule in Cron format , see https: //en .wikipedia.org /wiki/Cron . Cron 格式的作业调度运行时间点;必选字段。 startingDeadlineSeconds <integer> Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones. 因各种原因缺乏执行作业的时间点所导致的启动作业错误的超时时长,会被记入错误记录。 successfulJobsHistoryLimit <integer> The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 3. 为成功的任务执行保留的历史记录数,默认为 3. suspend <boolean> This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false . 是否挂起后续的任务执行,默认为 false ,对运行中的作业不会产生影响。 [root@mh-k8s-master-prd-243-24 ~] # |
下面是一个定义在资源清单文件(jaeger-es-index-cleaner.yaml)中的 CronJob 资源对象示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | kind: CronJob apiVersion: batch /v1beta1 metadata: name: jaeger-es-index-cleaner namespace: istio-system labels: app: jaeger app.kubernetes.io /component : cronjob-es-index-cleaner app.kubernetes.io /instance : jaeger app.kubernetes.io /managed-by : jaeger-operator app.kubernetes.io /name : jaeger-es-index-cleaner app.kubernetes.io /part-of : jaeger annotations: linkerd.io /inject : disabled prometheus.io /scrape : 'false' sidecar.istio.io /inject : 'false' spec: schedule: 55 23 * * * concurrencyPolicy: Allow suspend: false jobTemplate: metadata: creationTimestamp: null spec: parallelism: 1 template: metadata: creationTimestamp: null labels: app: jaeger app.kubernetes.io /component : cronjob-es-index-cleaner app.kubernetes.io /instance : jaeger app.kubernetes.io /managed-by : jaeger-operator app.kubernetes.io /name : jaeger-es-index-cleaner app.kubernetes.io /part-of : jaeger annotations: linkerd.io /inject : disabled prometheus.io /scrape : 'false' sidecar.istio.io /inject : 'false' spec: containers: - name: jaeger-es-index-cleaner image: >- registry.cn-beijing.aliyuncs.com /kubesphereio/jaeger-es-index-cleaner :1.17 args: - '7' - >- http: //elasticsearch-logging-data .kubesphere-logging-system.svc:9200 envFrom: - secretRef: name: jaeger-secret env : - name: INDEX_PREFIX value: logstash resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File imagePullPolicy: IfNotPresent restartPolicy: Never terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirst serviceAccountName: jaeger serviceAccount: jaeger securityContext: {} schedulerName: default-scheduler successfulJobsHistoryLimit: 3 failedJobsHistoryLimit: 1 |
二、CronJob 的控制机制
CronJob 控制器是一个更高级别的资源,它以 Job 控制器资源为其管控对象,并借助它管理 Pod 资源的对象。
如果作业重复执行时指定的时间点较近,而作业执行时长跨过了其两次执行的时间长度,则会出现两个 Job 对象同时存在的情形。
有些 Job 对象可能会存在无法或不能同时运行情形,这个时候就要通过 cronjob.spec.concruuencyPolicy 属性控制作业并存的机制,其默认值为
"Allow",即允许前后 Job,甚至属于同一个 CronJob 的更多 Job 同时运行。其他两个可用值中,
"Forbid" 用于禁止前后两个 Job 同时运行,如果前一个尚未结束,后一个则不予启动(跳过)。
"Replcae" 用于让后一个 Job 取代前一个,即终止前一个并启动后一个。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具