Cronjob是比job控制器更加高级的一种控制器类型。Cronjob基于job,并且增加了时间调度
(1)在未来的某个指定时间运行一次Job,比如执行某个临时的任务
(2)周期性的运行job,比如定期备份、清理系统文件
CronJob的模板
[root@master ~]# vi cronjobv1.yaml
apiVersion: batch/v1beta1 #此控制器目前只存在于beta1
kind: CronJob
metadata:
name: String
namespace: String
labels: #元数据的标签列表
key: #标签的键值对
annotations: #自定义注解列表
key: value #定义多个注解的键值对
spec:
schedule: #指定的任务运行周期,格式和Cron类似
jobTemplate: {JobTemplate} #job的模板
startingDeadSeconds: int #启动job的期限(秒为单位),若执行时间超出期限,Job则认定为失败,没有指定则>没有期限
concurrencyPolicy: Allow/Forbid/Replace #如果上一个周期的Job未执行完毕,而下一个周期已经开始,在这种
并发的场景下采用的策略。默认为Allow,允许并发运行Job;Forbid禁止并发运行,如果上一个周期的Job未执行完毕>,下一个Job直接忽略掉;Replace表示取消正在运行的Job,用一个新的来替换
suspend: boolean #如果设置未True,上一个Job的周期为执行完成,下一周期已经开始,则后续所有的执行都会被挂起
successfulJobsHistoryLimit: int #保留多少条执行成功的Job记录,默认为3
failedJobsHistoryLimit: int ##保留多少条执行失败的Job记录,默认为1
[root@master ~]# vi testcronjobv1.yaml
apiVersion: batch/v1beta1 #此控制器目前只存在于beta1
kind: CronJob
metadata:
name: testcronjob
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: testcronjob
image: busybox
imagePullPolicy: IfNotPresent
command: ['sh','-c']
args: ['echo "Start Job!";sleep 20; echo "Job Done!"']
[root@master ~]# kubectl apply -f testcronjobv1.yaml
Warning: batch/v1beta1 CronJob is deprecated in v1.21+, unavailable in v1.25+; use batch/v1 CronJob
cronjob.batch/testcronjob created
[root@master ~]# kubectl get CronJob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
testcronjob */1 * * * * False 1 3s 58s
[root@master ~]# kubectl get job
NAME COMPLETIONS DURATION AGE
testcronjob-28078629 1/1 23s 106s
testcronjob-28078630 1/1 21s 46s
其他控制器的使用(ReplicationController ReplicaSet)
两者之间并无差异,只是名字不同,Controller是最早的控制版本,后来被Set取代,到了Deployment控制器出现,两者很少单独使用。
[root@master ~]# cat testdeployment.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: testdeployment
spec:
replicas: 3
selector:
matchLabels:
example: deploymentnginx
template:
metadata:
labels:
example: deploymentnginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80