• Kubernetes Job and CronJob


    一、简介

    我们在日常工作中经常会遇到一些需要进行批处理和分析的需求,当然也会有按时间进行调度的工作,在 Kubernetes 集群中,提供了 JobCronJob 两种资源对象来应对我们这种需求。

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

    二、Job

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

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: job-demo
    spec:
      template:
        metadata:
          name: job-demo
        spec:
          restartPolicy: Never
          containers:
          - name: counter
            image: registry.cn-hangzhou.aliyuncs.com/google_containers/busybox
            command:
            - 'sh'
            - '-c'
            - 'for i in `seq 10 -1 1`;do echo $i;done'
    # kubectl create -f job-demo.yaml
    ​
    # kubectl get job
    NAME       COMPLETIONS   DURATION   AGE
    job-demo   1/1           2s         3m7s
    ​
    # kubectl logs job-demo-q4bb4
    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    ​
    ​
    # kubectl get pods
    NAME                         READY   STATUS      RESTARTS   AGE
    job-demo-q4bb4               0/1     Completed   0          13s

    注意JobRestartPolicy仅支持NeverOnFailure两种,不支持Always,我们知道Job就相当于来执行一个批处理任务,执行完就结束了

     

    三、CronJob

    CronJob其实就是在Job的基础上加上了时间调度,我们可以:在给定的时间点运行一个任务,也可以周期性地在给定时间点运行。这个实际上和我们Linux中的crontab就非常类似了。

    一个CronJob对象其实就对应中crontab文件中的一行,它根据配置的时间格式周期性地运行一个Job,格式和crontab也是一样的。

    CronJob 格式如下:

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

    定义一个cronjob-demo.yaml文件

    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
      name: cronjob-demo
    spec:
      schedule: "*/1 * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              restartPolicy: OnFailure
              containers:
              - name: hello
                image: registry.cn-hangzhou.aliyuncs.com/google_containers/busybox
                args:
                - 'sh'
                - '-c'
                - 'date; echo Hello from Kubernetes Cluster'
    # kubectl apply -f cronjob-demo.yaml 
    cronjob.batch/cronjob-demo created
    ​
    # kubectl get cronjob
    NAME           SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    cronjob-demo   */1 * * * *   False     0        <none>          10s
    ​
    # kubectl logs cronjob-demo-1593575520-p9979
    Wed Jul  1 03:52:15 UTC 2020
    Hello from Kubernetes Cluster
    ​
    ​
    # kubectl get pods
    NAME                            READY   STATUS      RESTARTS   AGE
    cronjob-demo-1593575520-p9979   0/1     Completed   0          103s
    cronjob-demo-1593575580-vkv8q   0/1     Completed   0          51s

    我们这里的KindCronJob了,要注意的是.spec.schedule字段是必须填写的,用来指定任务运行的周期,格式就和crontab一样,另外一个字段是.spec.jobTemplate, 用来指定需要运行的任务,格式当然和Job是一致的。

    # 删除 jobs
    ​
    # kubectl get job
    NAME                      COMPLETIONS   DURATION   AGE
    cronjob-demo-1593575520   1/1           8s         3m2s
    cronjob-demo-1593575580   1/1           2s         2m10s
    cronjob-demo-1593575640   1/1           3s         70s
    cronjob-demo-1593575700   1/1           3s         10s
    # kubectl delete jobs --all
    job.batch "cronjob-demo-1593575580" deleted
    job.batch "cronjob-demo-1593575640" deleted
    job.batch "cronjob-demo-1593575700" deleted
     
  • 相关阅读:
    codeforces 632F. Magic Matrix
    codeforces 632D. Longest Subsequence 筛法
    移动端项目开发需要注意的问题
    input框、按钮组间的去除空格的解决方案
    radio 和checkbox与文字对齐问题
    怎样设置webstorm localhost为本地ip
    The number of steps(概率dp)
    C++ 面试常见问题
    禅者初心
    Hope
  • 原文地址:https://www.cnblogs.com/bigberg/p/13563069.html
Copyright © 2020-2023  润新知