k8s控制器之CronJob--第二弹使用CronJob执行自动任务

CronJob可以用来执行基于时间计划的定时任务,类似于Linux/Unix系统中的 crontable

CronJob 执行周期性的重复任务时非常有用,例如备份数据、发送邮件等。CronJob 也可以用来指定将来某个时间点执行单个任务,例如将某项任务定时到系统负载比较低的时候执行。

CronJob 也存在某些限制,例如,在某些情况下,一个 CronJob 可能会创建多个 Job。因此,Job 必须是 幂等

创建CronJob

下面例子中的 CronJob 每分钟,打印一次当前时间并输出 hello world 信息。

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure
 
  • 执行命令以创建 CronJob:

    kubectl create -f .job/cronjob.yaml
      
    

    输出结果如下所示:

    cronjob.batch/hello created    
    

    或者,您也可以直接使用 kubectl run 命令创建 CronJob:

    kubectl run hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster"
    
  • 执行命令以查看已创建 CronJob 的状态

    kubectl get cronjob hello    
    

    输出结果如下所示:

    NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    hello   */1 * * * *   False     0        <none>          10s 
    

    从输出结果可以看到,该 CronJob 还未运行任何 Job。执行一下命令,并等候一分钟左右时间

    kubectl get jobs --watch
    

    输出结果如下所示:

    NAME               COMPLETIONS   DURATION   AGE
    hello-4111706356   0/1                      0s
    hello-4111706356   0/1   0s    0s
    hello-4111706356   1/1   5s    5s  
    

    此时,可以看到该 CronJob 创建了一个 “hello-4111706356” Job,并执行结束。这时ctrl + c 停止 watch,并重新查看 Cronjob 的状态:

    kubectl get cronjob hello
    
    

    输出信息如下所示:

    NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    hello   */1 * * * *   False     0        50s             75s 
    

    输出结果显示,该 CronJob 在 LAST SCHEDULE 这个时间点成功创建了一个 Job。当前 ACTIVE Job 数为 0,意味着,该 Job 已经成功结束,或者已经失败。

  • 查看 Pod 的输出信息

    执行命令获取 Pod 的名称

    # 将 "hello-4111706356" 替换成您系统中的 Job name
    pods=$(kubectl get pods --selector=job-name=hello-4111706356 --output=jsonpath={.items[*].metadata.name})
    
    

    查看 Pod 的日志:

    kubectl logs $pods
    
    

    输出结果如下所示:

    Fri Feb 22 11:02:09 UTC 2019
    Hello from the Kubernetes cluster
    
    

删除CronJob

当您不再需要某个 CronJob 时,可以使用命令将其删除 kubectl delete cronjob <cronjob name>,在本例中,可以执行命令:

kubectl delete cronjob hello
    

或者

kubectl delete -f https://kuboard.cn/statics/learning/job/cronjob.yaml

删除 CronJob 时,将移除该 CronJob 创建的所有 Job 和 Pod,并且 CronJob 控制器将不会为其在创建任何新的 Job

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linus.lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值