3.5 控制器之CronJob


上一篇文章演示了Job的用法,Job建立后会立即运行,批处理了任务或定时任务需要在指定的时间运行或指定的间隔时间运行。k8s提供的CronJob就支持批处理场景,就像Linux中的CronTab命令,可以指定时间运行任务。
CronJob运行时,通过创建Job资源的任务,然后通过Job创建并管理pod处理定时任务。

1、CronJob实例

下面以每1分钟运行一次任务为例。yaml文件如下

apiVersion: batch/v1beta1
kind: CronJob  					#控制器类型
metadata:  						#CronJob元数据
  name: mycronjob 				#CronJob的名字
spec:  							#CronJob的描述
  suspend: false  				#打开定时任务
  schedule: "*/1 * * * *" 		#执行计划
  jobTemplate:   				#CronJob创建的Job模板
    spec:  						#Job的描述
      template:  				#Job创建Pod的模板
        metadata: 				#Pod元数据
          labels:  				#Pod的标签
            app: mypod  		
        spec:  					#Pod的描述
          restartPolicy: OnFailure #Pod的重启策略
          containers:  			#Pod中容器定义
          - name: busybox  		#容器的名字
            image: busybox  	#容器中的镜像
            imagePullPolicy: IfNotPresent 	#镜像策略
            command: ["/bin/sh", "-c", "sleep 30"] 	#容器中执行的命令

创建并查看CronJob

#创建CronJob
[root@k8s-master01 cron_work]# kubectl apply -f cronjob.yaml 
cronjob.batch/mycronjob created

#查询CronJob
[root@k8s-master01 cron_work]# kubectl get cronjob
NAME        SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
mycronjob   */1 * * * *   False     0        <none>          9s

#查询Job,时间未到,没有创建Job
[root@k8s-master01 cron_work]# kubectl get job
No resources found.

#时间到后,查询CronJob创建的Job, COMPLETIONS显示1个Pod未执行完毕
[root@k8s-master01 cron_work]# kubectl get job
NAME                   COMPLETIONS   DURATION   AGE
mycronjob-1593966600   0/1           3s         3s

#查询Pod,显示一个Pod正在运行
[root@k8s-master01 cron_work]# kubectl get pod
NAME                         READY   STATUS    RESTARTS   AGE
mycronjob-1593966600-tvp5m   1/1     Running   0          12s

#pod中任务运行完毕后,显示完成状态,不会再重启
[root@k8s-master01 cron_work]# kubectl get pod
NAME                         READY   STATUS      RESTARTS   AGE
mycronjob-1593966600-tvp5m   0/1     Completed   0          38s
#等上面Job结束后,1分钟后又会创建下一个Job继续,Job创建Pod继续执行任务,一直循环下去,最后会有很多完成状态的Job和Pod

2、CronJob属性参数

以下面yaml为例

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: mycronjob
spec:
  startingDeadlineSeconds: 60  		#执行job的期限,指定时间内没完成的Job会置失败状态
  concurrencyPolicy: Allow  		#设定Job可以并发
  failedJobsHistoryLimit: 3
  successfulJobsHistoryLimit: 3
  suspend: false
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: myjob
        spec:
          restartPolicy: OnFailure
          containers:
          - name: busybox
            image: busybox
            imagePullPolicy: IfNotPresent
            command: ["/bin/sh", "-c", "sleep 30"]

以下参数都是可选参数:

  • startingDeadlineSeconds : 启动job的时间限制,如果超过这个时间,job还没有启动,则直接标志失败;
  • concurrencyPolicy :Job被CronJob调度时如何执行
    Allow(默认) :允许并发运行Job,比如一个Job还没执行完,CronJob又启动了Job,则多个Job并行运行;
    Forbid :禁止Job并发运行,如果前一个还没完成,则直接跳过下一个;
    Replace :取消当前正在运行的Job,启动新的Job来代替;
  • suspend :如果为true,后续所有的Job执行都会被挂起,对已经开始执行的Job不起作用;
  • successfulJobsHistoryLimitfailedJobsHistoryLimit:指定可以保留多少完成和失败的Job,默认情况下分别设置为3和1。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值