所属技术领域:
kubernetes
|名词定义|
CronJobs提供了在特定的时间或者间隔内处理业务逻辑的方法。一般创建一个Cronjob有两种方式,第一种是定义Java类,由Hybris生成脚本并加入数据库。第二种是直接编写groovy脚本语言并插入数据库,这种应该适合逻辑比较少的时候,比如只有一两句逻辑的时候,一般用得比较少。
|技术特点|
Cronjob 语法
CronJob可以叫定时运行 Job。CronJob 其实和 Job 大体是相似的,唯一的不同点就是它可以设计一个时间。
定时任务和 Job 相比会多几个不同的字段:
schedule:schedule 这个字段主要是设置时间格式,它的时间格式和 Linux 的 crontime 是一样的,所以直接根据 Linux 的 crontime 书写格式来书写就可以了。举个例子: */1 指每分钟去执行一下 Job,这个 Job 需要做的事情就是打印出大约时间,然后打印出“Hello from the kubernetes cluster” 这一句话;
startingDeadlineSeconds:即:每次运行 Job 的时候,它最长可以等多长时间,有时这个 Job 可能运行很长时间也不会启动。所以这时,如果超过较长时间的话,CronJob 就会停止这个 Job;
concurrencyPolicy:就是说是否允许并行运行。所谓的并行运行就是,比如说我每分钟执行一次,但是这个 Job 可能运行的时间特别长,假如两分钟才能运行成功,也就是第二个 Job 要到时间需要去运行的时候,上一个 Job 还没完成。如果这个 policy 设置为 true 的话,那么不管你前面的 Job 是否运行完成,每分钟都会去执行;如果是 false,它就会等上一个 Job 运行完成之后才会运行下一个;
JobsHistoryLimit:这个就是每一次 CronJob 运行完之后,它都会遗留上一个 Job 的运行历史、查看时间。当然这个额不能是无限的,所以需要设置一下历史存留数,一般可以设置默认 10 个或 100 个都可以,这主要取决于每个人集群不同,然后根据每个人的集群数来确定这个时间。
CronJob的启动条件:
在k8s 1.8以及更高的版本中的环境中,API server要求的版本为apiVersion: batch/v1beta1,但是这个一般是默认的。当然了,对于之前的版本也可以利用--runtime-config=batch/v2alpha1=true来修改,然后重启API server服务。
运行过程:
我们利用官方的demo,其中下面是cronjob.yaml:
主要功能是:每分钟创建一个job,这个job的功能就是输出Hello World
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: test
spec:
schedule: "/1 *"
jobTemplate:
spec:
template:
spec:
containers:
- name: test
image: docker.hobot.cc/library/centos:7.4
args:
- /bin/sh
- -c
- echo Hello World
restartPolicy: OnFailure
创建cronJob:kubectl create -f cronjob.yaml
查看test pods的创建状态:kubectl get jobs --watch
删除CronJob:kubectl delete cronjob test
Crontab的基本格式
<分钟><小时><日><月份><星期><命令>
分钟值从 0 到 59.
小时值从 0 到 23.
日值从 1 到 31.
月值从 1 到 12.
星期值从 0 到 6, 0 代表星期日
多个时间可以用逗号隔开,范围可以用连字符给出,*可以作为通配符。空格用来分开字段。
|资料来源|
名词定义:https://yq.aliyun.com/articles/616477?spm=a2c4e.11155472.0.0.3ac77816oPD7aV
技术特点:https://blog.csdn.net/hanlaipeng11/article/details/79623636