一、cronjob控制器简介 CronJob管理基于时间的Job,即: * 在给定时间点只运行一次 * 周期性地在给定时间点运行 使用条件:当前使用的Kubernetes集群,版本>=1.8(对CronJob) 典型的用法如下所示: * 在给定的时间点调度Job运行 * 创建周期性运行的Job,例如:数据库备份、发送邮件 * 创建周期性运行的任务,例如:定期清理临时文件 #----------------------------------------------------------------------------------------------- CronJob 控制器用于在 Kubernetes 集群中定期运行任务。它类似于传统的 cron 作业, 但具有更强大的功能和灵活性。CronJob 控制器允许用户定义定时任务的调度时间、任务执行的命令或脚本, 以及任务的并发策略等。 CronJob 控制器通过创建和管理 Job 资源来实现定期任务的执行。每当达到预定的时间点时, CronJob 控制器会创建一个新的 Job 资源, Job 资源负责实际执行任务。用户可以通过配置 CronJob 的 spec 字段来定义任务的调度规则和执行细节。 CronJob 控制器支持多种调度方式, 包括基于时间间隔的调度和基于特定时间点的调度。用户可以使用类似于 cron 表达式的语法来定义调度规则, 例如 "0 0 * * *" 表示每天午夜执行一次任务。 除了基本的调度功能外, CronJob 控制器还提供了一些高级功能, 例如并发策略、失败重试机制和历史记录保留等。用户可以根据需要配置这些选项, 以满足不同的任务执行需求。 总之, CronJob 控制器是 Kubernetes 中用于管理定期任务的重要组件, 它简化了任务调度和执行的过程, 提高了系统的自动化水平和可靠性。 #----------------------------------------------------------------------------------------------- 二、CronJob 常用命令 # 创建 CronJob kubectl apply -f cronjob.yaml # 查看 CronJob 列表 kubectl get cronjob # 查看特定 CronJob 的详细信息 kubectl describe cronjob # 删除 CronJob kubectl delete cronjob # 查看由 CronJob 创建的 Job 列表 kubectl get jobs # 查看由 Job 创建的 Pod 列表 kubectl get pods --selector=job-name= # 查看特定 Pod 的日志 kubectl logs # 手动触发 CronJob 创建一个 Job kubectl create job --from=cronjob/ #----------------------------------------------------------------------------------------------- 三、CronJob 控制器资源清单 资源清单字段: .spec.schedule: 调度, 必需字段, 指定任务运行周期, 格式同Cron .spec.jobTemplate: Job模板, 必需字段, 指定需要运行的任务, 格式同Job .spec.startingDeadlineSeconds: 启动Job的期限(秒级别), 该字段是可选的 如果因为任何原因而错过了被调度的时间,那么错过执行时间的Job将被认为是失败的 如果没有指定,则没有期限 .spec.concurrencyPolicy: 并发策略 该字段也是可选的。它指定了如何处理被CronJob创建的 Job的并发执行, 只允许指定下面策略中的一种: Allow(默认): 允许并发运行Job Forbid: 禁止并发运行, 如果前一个还没有完成, 则直接跳过下一一个 Replace: 取消当前正在运行的Job, 用一个新的来替换 注意, 当前策略只能应用于同一个CronJob创建的Job, 如果果存在多个CronJob, 它们创建的Job之间总是允许并发运行。 .spec.suspend: 挂起, 该字段也是可选的。 如果设置为'true',后续所有执行都会被挂起。它对已经开始执行的Job不起作用。默认值为'false' .spec.successfulJobsHistoryLimit 和 .spec.failedJobsHistoryLimit: 历史限制, 是可选的字段。 它们指定了可以保留多少完成和失败的Job。默认情况下,它们分别设置为'3'和'1'。设置限制的值为'0',相关类型的Job完成后将不会被保留