kubernetes之CronJob介绍

在进行任务自动化的时候,Hadoop生态中有Oozie可以用来管理workflow,但是如果我们的任务是通过pod部署在了kubernetes上的话,我们就可以利用cronJob来进行job的定时与周期性的运行。

CronJob是用来管理基于时间的Job,即:

1     在给定的时间点运行一次Job

2     周期性的在给定的时间点运行

其中指定周期的字段为spec.schedule,指定Job的字段为spec.jobTemplate,这两个字段也是必选字段,可以在yaml文件中定义。

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:



查看test pods的创建状态:

kubernetes之CronJob介绍_第1张图片


在这里每一个任务都是输出一个hello world之后job就结束了,所以CronJob会自动清理结束的任务。

CronJob在每次调度运行的周期内会出现大概创建一个Job的情况,就是可能创建一个,也有可能创建多个,或者一个都不创建,就是一种大概的情况。K8S官方正在避免这种事情发生。

如果startingDeadlineSeconds(启动Job的期限:如果在这个期限中没有被调度起来,那么错过时间的Job就认为是失败的)设置的值较大,并且concurrencyPolicy(是否可以并行,就是当上一个job还没有启动成功的时候下一个是否可以并行启动,默认是可以的)设置可以并行,那么任务就每次至少启动一个。一般情况下需要将startingDeadlineSeconds设置较大或者默认,这样不会导致任务创建不出来。


删除CronJob:


删除的时候,会终止正在创建以及结束的Job,运行中的就不会被删除。

Crontab的基本格式

<分钟> <小时> <日> <月份> <星期> <命令>

  • 分钟 值从 0 到 59.
  • 小时 值从 0 到 23.
  •  值从 1 到 31.
  •  值从 1 到 12.
  • 星期 值从 0 到 6, 0 代表星期日

多个时间可以用逗号隔开,范围可以用连字符给出,*可以作为通配符。空格用来分开字段。


你可能感兴趣的:(Kubernetes)