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

发布时间:2024年01月07日

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

文章来源:https://blog.csdn.net/Tiger_lin1/article/details/131799594
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。