CronJobs

Cron Jobs

CronJob 服务不过是 crontab 文件中的一行或表 cron 中的同一文件。它按照给定的时间表定期安排和执行任务。但我们可以使用 Cron Job 来做什么呢?Cron 对于创建经常性和重复性任务非常有用,例如执行备份或发送电子邮件。

$ vim primeiro-cron.yaml

apiVersion : batch/v1beta1
kind : CronJob
metadata :
   name : giropops-cron
spec :
   schedule : " * / 1 * * * * "
   jobTemplate :
     spec :
       template :
         spec :
           containers :
          - name : giropops-cron
            image : busybox
            args :
            - /bin/sh
            - -c
            - date; echo Welcome to Uncomplicating Kubernetes - LinuxTips VAIIII; sleep 30
          restartPolicy : OnFailure

我们前面的 CronJobs 例子每分钟打印当前时间和一条问候信息。让我们从清单中创建它的 CronJob。

$ kubectl create -f primeiro-cron.yaml

cronjob.batch/giropops-cron created

$ kubectl get cronjobs

NAME            SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
giropops-cron   */1 * * * *   False     1        13s             2m

$ kubectl describe cronjobs.batch giropops-cron

Name:                       giropops-cron
Namespace:                  default
Labels:                     <none>
Annotations:                <none>
Schedule:                   */1 * * * *
Concurrency Policy:         Allow
Suspend:                    False
Starting Deadline Seconds:  <unset>
Selector:                   <unset>
Parallelism:                <unset>
Completions:                <unset>
Pod Template:
  Labels:  <none>
  Containers:
   giropops-cron:
    Image:      busybox
    Port:       <none>
    Host Port:  <none>
    Args:
      /bin/sh
      -c
      date; echo LinuxTips VAIIII ;sleep 30
    Environment:     <none>
    Mounts:          <none>
  Volumes:           <none>
Last Schedule Time:  Wed, 22 Aug 2018 22:33:00 +0000
Active Jobs:         <none>
Events:
  Type    Reason            Age   From                Message
  ----    ------            ----  ----                -------
  Normal  SuccessfulCreate  1m    cronjob-controller  Created job giropops-cron-1534977120
  Normal  SawCompletedJob   1m    cronjob-controller  Saw completed job: giropops-cron-1534977120
  Normal  SuccessfulCreate  41s   cronjob-controller  Created job giropops-cron-1534977180
  Normal  SawCompletedJob   1s    cronjob-controller  Saw completed job: giropops-cron-1534977180
  Normal  SuccessfulDelete  1s    cronjob-controller  Deleted job giropops-cron-1534977000

看看多酷,如果你看集群事件,你是 cron 已经在调度和执行任务了。现在我们就来看看这个 cron 工作通过命令kubectl get旁边的参数 –watch 来查看任务的输出,注意,这个任务会在 CronJob 创建后的一分钟左右被创建。

$ kubectl get jobs --watch

NAME                       DESIRED  SUCCESSFUL   AGE
giropops-cron-1534979640   1         1            2m
giropops-cron-1534979700   1         1            1m

$ kubectl get cronjob giropops-cron

NAME           SCHEDULE      SUSPEND   ACTIVE    LAST SCHEDULE   AGE
giropops-cron  */1 * * * *   False     1         26s             48m

我们可以看到,我们的 cronis 工作正常。要查看任务执行的命令输出将使用 kubectl 的命令日志。为此,我们将列出正在运行的 pods,然后从中获取日志。

$ kubectl get pods

NAME                            READY     STATUS      RESTARTS   AGE
giropops-cron-1534979940-vcwdg  1/1       Running     0          25s

$ kubectl logs giropops-cron-1534979940-vcwdg

Wed Aug 22 23:19:06 UTC 2018
LinuxTips VAIIII

cron 正确地执行任务,打印日期和我们在清单中创建的短语。如果 kubectl 得到 pods 我们运行一个,我们可以看到创建的 Pods 和用于执行任务的每分钟。

$ kubectl get pods

NAME                             READY    STATUS      RESTARTS   AGE
giropops-cron-1534980360-cc9ng   0/1      Completed   0          2m
giropops-cron-1534980420-6czgg   0/1      Completed   0          1m
giropops-cron-1534980480-4bwcc   1/1      Running     0          4s

$ kubectl delete cronjob giropops-cron

cronjob.batch "giropops-cron" deleted