码迷,mamicode.com
首页 > 其他好文 > 详细

Crontab定时任务篇

时间:2020-10-18 10:10:00      阅读:21      评论:0      收藏:0      [点我收藏+]

标签:grep   present   res   spec   tar   方式   label   替换   false   

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

Crontab定时任务篇

标签:grep   present   res   spec   tar   方式   label   替换   false   

原文地址:https://www.cnblogs.com/tcy1/p/13832496.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!