Kubernetes组件-CronJob(定时任务)
⒈简介:
Kubernetes的Job资源在创建时会立即运行pod。但是许多批处理任务需要在特定的时间运行,或者在指定的时间间隔内重复运行。在Linux和类UNIX操作系统中,这些任务通常被称为cron任务。Kubernetes也支持这种任务。
Kubernetes中的cron任务通过创建 CronJob资源进行配置。运行任务的时间表以知名的cron格式指定,所以如果你熟悉常规cron任务,你将在几秒钟内了解Kubernetes的CronJob。
在配置的时间,Kubernetes将根据在CronJob对象中配置的Job模板创建Job资源。创建Job资源时,将根据任务的pod模板创建并启动一个或多个pod副本。
⒉定义(创建)CronJob
apiVersion: batch/v1beta1 #指定当前描述文件遵循batch/v1beta1版本的KubernetesAPI kind: CronJob #我们在描述一个CronJob metadata: name: batch-job-every-fifteen-minutes #指定CronJob的名称 spec: #当没有指定pod选择器时它将根据pod模板中的标签创建 schedule: "0,15,30,45 * * * *" #这项工作应该每天在每小时0、15、30和45分钟运行 jobTemplate: #创建新pod所使用的pod模板 spec: template: #此CronJob创建Job资源会用到的模板 metadata: labels: app: periodic-batch-job spec: restartPolicy: OnFailure #Job不能使用Always作为默认的重新启动策略 containers: - name: main image: fanqisoft/batch-job ports: - containerPort: 8080
时间表从左到右包含以下五个条目:
·分钟
·小时
·每月中的第几天
·月
·星期几
在该示例中,每15分钟运行一次任务因此schedule字段的值应该是“0,15,30,45****”这意味着每小时的0、15、30和45分钟(第一个星号),每月的每一天(第二个星号),每月(第三个星号)和每周的每一天(第四个星号)。
相反,如果你希望每隔30分钟运行一次,但仅在每月的第一天运行,则应将计划设置为“0,30*1**”,并且如果你希望它每个星期天的3AM运行,将它设置为“03**0”(最后一个零代表星期天)。
⒊计划任务的运行方式
在计划的时间内,CronJob资源会创建Job资源,然后Job创建pod。
可能发生Job或pod创建并运行得相对较晚的情况。你可能对这项工作有很高的要求,任务开始不能落后于预定的时间过多。在这种情况下,可以通过指定CronJob规范中的startingDeadlineseconds字段来指定截止日期。
apiVersion: batch/v1beta1 #指定当前描述文件遵循batch/v1beta1版本的KubernetesAPI kind: CronJob #我们在描述一个CronJob metadata: name: batch-job-every-fifteen-minutes #指定CronJob的名称 spec: #当没有指定pod选择器时它将根据pod模板中的标签创建 schedule: "0,15,30,45 * * * *" #这项工作应该每天在每小时0、15、30和45分钟运行 startingDeadlineSeconds: 15 #pod最迟必须在预定时间后15秒开始运行 jobTemplate: #创建新pod所使用的pod模板 spec: template: #此CronJob创建Job资源会用到的模板 metadata: labels: app: periodic-batch-job spec: restartPolicy: OnFailure #Job不能使用Always作为默认的重新启动策略 containers: - name: main image: fanqisoft/batch-job ports: - containerPort: 8080
在上面的例子中,工作运行的时间应该是10:30:00。如果因为任何原因10:30:15不启动,任务将不会运行,并将显示为Failed。
在正常情况下,CronJob总是为计划中配置的每个执行创建一个Job,但可能会同时创建两个Job,或者根本没有创建。为了解决第一个问题,你的任务应该是幂等的(多次而不是一次运行不会得到不希望的结果)。对于第二个问题,请确保下一个任务运行完成本应该由上一次的(错过的)运行完成的任何工作。
作者:奇
出处:https://www.cnblogs.com/fanqisoft/p/11425351.html
版权:本作品采用「本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!