08-job和cronjob的使用

Job 和 Cronjob 的使用

我们来介绍另外一类资源对象:Job,在日常的工作中经常都会遇到一些需要进行批量数据处理和分析的需求,当然也会有按时间来进行调度的工作,在我们的Kubernetes 集群中为我们提供了Job 和CronJob两种资源对象来应对我们的这种需求。

Job 负责处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod 成功结束。而CronJob则就是在Job 上加上了时间调度。

中文解释文档

一次性任务Job

我们用Job 这个资源对象来创建一个任务,定一个Job 来执行一个倒计时的任务

[root@k8s-master ~]# vim job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: job-demo
spec:				#此字段下可以添加下方详细控制内容
  completions: 6
  parallelism: 2
  #上面配置的含义是:每次运行两个Pod,直到总共有6个Pod成功完成
  template:
    metadata:
      name: job-demo
    spec:
      restartPolicy: Never	#重启策略;永不重启
      containers:
      - name: counter
        image: busybox
        command:
        - "bin/sh"
        - "-c"
        - "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"

注意Job 的RestartPolicy(重启策略) 仅支持Never(永不重启)OnFailure (失败退出后重启)两种,不支持Always(一直重启) ,我们知道Job 就相当于来执行一个批处理任务,执行完就结束了,如果支持Always 的话是不是就陷入了死循环了?

详细配置内容

spec:
  completions: 50            # 运行的次数,即Job结束需要成功运行的Pod个数
  parallelism: 5             # 并行运行Pod的数量,默认为1
  backoffLimit: 5            # 表示失败Pod的重试最大次数,超过这个次数不会继续重试。
  activeDeadlineSeconds: 10  # 表示Pod超期时间,一旦达到这个时间,Job及其所有的Pod都会停止。
  template:                  # Pod定义

根据completions和parallelism的设置,可以将Job划分为以下几种类型。
任务类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A5nygprN-1628235203436)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210302173213763.png)]

然后我们可以查看当前的Job 资源对象:

[root@k8s-master ~]# kubectl get jobs
NAME       COMPLETIONS   DURATION   AGE
job-demo   1/1           3s         23s
#COMPLETIONS:已完成
#DURATION:持续时间

注意查看我们的Pod 的状态,同样我们可以通过kubectl logs 来查看当前任务的执行结果

[root@k8s-master ~]# kubectl get po
NAME             READY   STATUS      RESTARTS   AGE
job-demo-s65mr   0/1     Completed   0          41s
# READY:就绪的
#STATUS:当前状态 Completed:已经完成
[root@k8s-master ~]# kubectl logs job-demo-s65mr
[root@k8s-master ~]# kubectl describe jobs.batch job-demo

周期性计划任务CronJob

CronJob其实就是在Job 的基础上加上了时间调度,我们可以:在给定的
时间点运行一个任务,也可以周期性地在给定时间点运行。这个实际上和
我们Linux中的crontab就非常类似了。
一个CronJob对象其实就对应中crontab文件中的一行,它根据配置的时间格式周期性地运行一个Job ,格式和crontab也是一样的。

crontab的格式如下:

格式为分 时 日 月 星期 要运行的命令
分钟第1列分钟0~59
小时第2列小时0~23)
第3列日1~31
第4列月1~12
第5列星期0~7(0和7表示星期天)
运行的命令第6列要运行的命令

现在,我们用CronJob来管理我们上面的Job 任务。

编写yaml文件

[root@k8s-master ~]# vim  cronjob-demo.yaml
[root@k8s-master ~]# cat cronjob-demo.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cronjob-demo
spec:
  schedule: "*/1 * * * *"
  #指定什么时候运行Job,其格式与Linux cron一致。这里*/1 * * * *的含义是每一分钟启动一次
  failedJobsHistoryLimit: 1   #保留失败的任务个数
  successfulJobsHistoryLimit: 2  #保留成功的任务个数
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
          - name: hello
            image: busybox
            securityContext:      #上下文
              privileged: true    #特权容器
            args:
            - "bin/sh"
            - "-c"
            - "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"

这里的Kind是CronJob了,要注意的是.spec.schedule字段是必须填写的,用来指定任务运行的周期,格式就和crontab一样,另外一个字段是.spec.jobTemplate , 用来指定需要运行的任务,格式当然和Job 是一致的。还有一些值得关注的字段.spec.successfulJobsHistoryLimit 和.spec.failedJobsHistoryLimit,表示历史限制,是可选的字段。它们指定了可以保留多少完成和失败的Job ,默认没有限制,所有成功和失败的Job 都会被保留。然而,当运行一个Cron Job时,Job 可以很快就堆积很多,所以一般推荐设置这两个字段的值。如果设置限制的值为 0,那么相关类型的Job 完成后将不会被保留。

创建这个cronjob

[root@k8s-master ~]# kubectl create -f cronjob-demo.yaml
cronjob.batch/cronjob-demo created

查看这个CronJob:

[root@k8s-master ~]# kubectl get cronjobs.batch -o wide
NAME           SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE   CONTAINERS   IMAGES    SELECTOR
cronjob-demo   */1 * * * *   False     0        <none>          39s   hello        busybox   <none>
命令结果的显示:
#SCHEDULE:是指其调度的时间点
#SUSPEND:表示后续任务是否处于挂起状态,即暂停任务的调度和运行
#ACTIVE:表示活动状态的Job对象的数量
#LAST SCHEDULE:表示上次调度运行至此刻的时长

可以通过命令进行查看

[root@k8s-master ~]# kubectl get jobs
#一旦不再需要 Cron Job,可以使用 kubectl 命令删除它
[root@k8s-master ~]# kubectl delete -f cronjob-demo.yaml
cronjob.batch "cronjob-demo" deleted
#相应的,生成的 job 也会被删除
[root@k8s-master ~]# kubectl get jobs
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值