zoukankan      html  css  js  c++  java
  • Crontab定时任务篇

    CronJob

    CronJob用于以时间为基准周期性地执行任务,这些自动化任务和运行在Linux或UNIX系统上的CronJob一样。CronJob对于创建定期和重复任务非常有用,例如执行备份任务、周期性调度程序接口、发送电子邮件等。

    对于Kubernetes 1.8以前的版本,需要添加--runtime-config=batch/v2alpha1=true参数至APIServer中,然后重启APIServer和Controller Manager用于启用API,对于1.8以后的版本无须修改任何参数,可以直接使用,本节的示例基于1.8以上的版本。

    创建CronJob

    创建CronJob有两种方式,一种是直接使用kubectl创建,一种是使用yaml文件创建。

    [root@instance-gvpb80ao yaml]# cat cronjob.yaml
    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; sleep 10
              restartPolicy: OnFailure
    [root@instance-gvpb80ao yaml]# kubectl apply -f cronjob.yaml
    cronjob.batch/hello created
    [root@instance-gvpb80ao yaml]# kubectl get cronjobs.batch
    NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    hello   */1 * * * *   False     0        <none>          4sCopy to clipboardErrorCopied
    

    CronJob每次调用任务的时候会创建一个Pod执行命令,执行完任务后,Pod状态就会变成Completed。

    [root@instance-gvpb80ao yaml]# kubectl get pod --show-labels | grep controller-uid
    hello-1600448400-lr5v9                0/1     Completed          0          36s     controller-uid=d0d61ba8-f6c7-4d4f-8013-3c38c8a30ff8,job-name=hello-1600448400
    [root@instance-gvpb80ao yaml]# kubectl logs -f hello-1600448400-lr5v9
    Fri Sep 18 17:00:13 UTC 2020
    Hello from the Kubernetes clusterCopy to clipboardErrorCopied
    

    删除CronJob

    [root@instance-gvpb80ao yaml]# kubectl delete -f cronjob.yaml
    cronjob.batch "hello" deletedCopy to clipboardErrorCopied
    

    参数示意

    apiVersion: v1
    items:
    - apiVersion: batch/v1beta1
      kind: CronJob
      metadata:
        labels:
          run: hello
        name: hello
        namespace: default
      spec:
        concurrencyPolicy: Allow
        failedJobsHistoryLimit: 1
        jobTemplate:
          metadata:
            creationTimestamp: null
          spec:
            template:
              metadata:
                creationTimestamp: null
                labels:
                  run: hello
              spec:
                containers:
                - args:
                  - /bin/sh
                  - -c
                  - date; echo Hello from the Kubernetes cluster
                  image: busybox
                  imagePullPolicy: Always
                  name: hello
                  resources: {}
                  terminationMessagePath: /dev/termination-log
                  terminationMessagePolicy: File
                dnsPolicy: ClusterFirst
                restartPolicy: OnFailure
                schedulerName: default-scheduler
                securityContext: {}
                terminationGracePeriodSeconds: 30
        schedule: '*/1 * * * *'
        successfulJobsHistoryLimit: 3
        suspend: falseCopy to clipboardErrorCopied
    

    其中各参数的说明如下,可以按需修改:

    • schedule:调度周期,和Linux一致,分别是分时日月周。
    • imagePullPolicy: 拉取镜像的策略
      • Always:总是拉取镜像。
      • IfNotPresent:本地有则使用本地镜像,不拉取。
      • Never:只使用本地镜像,从不拉取,即使本地没有。
    • restartPolicy:重启策略,和Pod一致。
      • Always:当容器失效时,由kubelet自动重启该容器。
      • OnFailure:当容器终止运行且退出码不为0时,由kubelet自动重启该容器。
      • Never:不论容器运行状态如何,kubelet都不会重启该容器。
    • concurrencyPolicy:并发调度策略。可选参数如下:
      • Allow:允许同时运行多个任务。
      • Forbid:不允许并发运行,如果之前的任务尚未完成,新的任务不会被创建。
      • Replace:如果之前的任务尚未完成,新的任务会替换的之前的任务。
    • suspend:如果设置为true,则暂停后续的任务,默认为false。
    • successfulJobsHistoryLimit:保留多少已完成的任务,按需配置。
    • failedJobsHistoryLimit:保留多少失败的任务。

    相对于Linux上的计划任务,Kubernetes的CronJob更具有可配置性,并且对于执行计划任务的环境只需启动相对应的镜像即可。比如,如果需要Go或者PHP环境执行任务,就只需要更改任务的镜像为Go或者PHP即可,而对于Linux上的计划任务,则需要安装相对应的执行环境。此外,Kubernetes的CronJob是创建Pod来执行,更加清晰明了,查看日志也比较方便。可见,Kubernetes的CronJob更加方便和简单。

  • 相关阅读:
    [BAT] 以当前时间为名创建文件夹,将本地文件夹里的文件拷贝到远程共享目录,而且保证本地和Jenkins上运行都成功
    [Jenkins] 执行SoapUI的task,设置邮件内容为HTML+CSS
    bzoj 2435 dfs处理
    Gym 100989E 字符串
    Codeforces Beta Round #95 (Div. 2) C 组合数学
    Gym 100989F 水&愚&vector
    Gym 100971C 水&愚&三角形
    Gym 100971B 水&愚
    HDU 5696 RMQ+滑窗
    UVA 1619/POJ2796 滑窗算法/维护一个单调栈
  • 原文地址:https://www.cnblogs.com/tcy1/p/13832496.html
Copyright © 2011-2022 走看看