持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,点击查看活动详情
k8s中的cronjob
前文
本文内容为对于k8s中cronjob相关内容的总结与整理。内容中包含个人理解的部分,因此可能存在不准确以及不完整之处。
什么是cronjob
说起cronjob,很容易让我们联想到linux中的定时任务系统,crontab。而实际上,crontab可以理解为k8s中的定时工作任务。类似于crontab的定时配置方式,cronjob同样采用相同的时间调度表示方法。通过cron语法的配置,我们可以配置任务的执行时间,采用分钟、小时、天、月份、星期进行实际时间的表示,也就指定了我们的定时任务的实际执行时间点。job是一种一次性执行的任务,与此相对比,crontab就是一种周期性执行的任务。每隔一定的周期,cronjob会发布job进行实际的执行。
cronjob的应用
apiVersion: batch/v1
kind: CronJob
metadata:
name: cj
spec:
schedule: "* * * * *"
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: a
image: test
command: echo "hello"
如上述代码所示,这是一个cronjob的示例。每分钟我们都会创建一个新的job,用于进行实际数据的打印。而创建的job就是常规的job类型的组件,执行后会进行退出的操作但不会删除继续保留日志。每分钟重复的进行全新的job创建,每个job之间互相独立,以此来实现定时周期性的任务处理。
由于定时任务的特殊性,可能存在在某个任务尚未执行完毕时,已经到达新的任务周期中。针对于这种情况,可以通过配置文件进行具体的策略指定。利用concurrencyPolicy属性,我们可以针对具体的情况选择定时任务的不同策略。不同策略包含两个任务同时存在、新的任务直接替换旧的任务或跳过新的任务周期等待旧的任务执行完毕等。
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。