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更加方便和简单。

  • 相关阅读:
    变量的创建和初始化
    HDU 1114 Piggy-Bank (dp)
    HDU 1421 搬寝室 (dp)
    HDU 2059 龟兔赛跑 (dp)
    HDU 2571 命运 (dp)
    HDU 1574 RP问题 (dp)
    HDU 2577 How to Type (字符串处理)
    HDU 1422 重温世界杯 (dp)
    HDU 2191 珍惜现在,感恩生活 (dp)
    HH实习 acm算法部 1689
  • 原文地址:https://www.cnblogs.com/tcy1/p/13832496.html
Copyright © 2011-2022 走看看