在k8s中每分钟运行一次cronjob不起作用

时间:2019-05-16 14:06:41

标签: amazon-web-services kubernetes cron


 SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   * * * * *   False     2        2m42s           5m6s
hello   * * * * *   False   3     6s    5m30s
hello   * * * * *   False   4     6s    6m30s
hello   * * * * *   False   3     46s   7m10s
hello   * * * * *   False   1     56s   7m20s
hello   * * * * *   False   2     6s    7m30s
hello   * * * * *   False   0     26s   7m50s
hello   * * * * *   False   1     7s    8m31s
hello   * * * * *   False   0     16s   8m40s
hello   * * * * *   False   1     7s    9m31s
hello   * * * * *   False   0     17s   9m41s
hello   * * * * *   False   1     7s    10m


Im runnig K8S cronjob和Im使用以下命令对其进行观看

kubectl get cronjobs --watch -n ns1

观看输出即时消息时,我注意到每分钟有两个工作

例如参见2m1s2m11s 等等...

为什么?我想每分钟精确运行一次,该怎么办?

hello   * * * * *   False     0        <none>          4s
hello   * * * * *   False   1     7s    61s
hello   * * * * *   False   0     17s   71s
hello   * * * * *   False   1     7s    2m1s
hello   * * * * *   False   0     17s   2m11s
hello   * * * * *   False   1     7s    3m1s
hello   * * * * *   False   0     17s   3m11s

这是docker文件

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
  namespace: monitoring
spec:
  schedule: "* * * * *" # run every minute
  startingDeadlineSeconds: 10 # if a job hasn't starting in this many seconds, skip
  concurrencyPolicy: Forbid # either allow|forbid|replace
  successfulJobsHistoryLimit: 3 # how many completed jobs should be
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: hello
              image: busybox
              args:
                - /bin/sh
                - -c
                - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

我也尝试更改时间表,例如"*/1 * * * *”,但无济于事。

更新

似乎每个cronjob都有这样的条目

NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello             */1 * * * *                 False               1              0s            7s

10秒后,我看到

hello              */1 * * * *                 False              0              1 0s           17s

依此类推... 一个处于活动状态,第二个不处于活动状态

1 个答案:

答案 0 :(得分:1)

我认为您在看错东西。

CronJob正在产生Job,因此您应该查看作业日志:

$ kubectl get jobs
NAME               DESIRED   SUCCESSFUL   AGE
hello-1558019160   1         1            2m
hello-1558019220   1         1            1m
hello-1558019280   1         1            14s

如您所见,每分钟仅产生一个concurrencyPolicy开始播放时,工作可能会花一分钟才能完成:

  

.spec.concurrencyPolicy字段也是可选的。它指定如何处理由该cron作业创建的作业的并发执行。该规范可能仅指定以下并发策略之一:

     
      
  • Allow(默认):cron作业允许同时运行的作业
  •   
  • Forbid:Cron作业不允许并发运行。如果是时候开始新的任务并且之前的任务还没有完成,则cron任务会跳过新的任务
  •   
  • Replace:如果是时候开始新的作业了,而以前的作业还没有完成,那么cron作业将用新的作业替换当前正在运行的作业。
  •   
     

请注意,并发策略仅适用于同一cron作业创建的作业。如果有多个cron作业,则始终允许其各自的作业同时运行。

您还可以执行kubectl describe jobs hello-1558019160来查看事件:

Events:
  Type    Reason            Age   From            Message
  ----    ------            ----  ----            -------
  Normal  SuccessfulCreate  2m    job-controller  Created pod: hello-1558019160-fld74

我正在运行您的.yaml,但没有发现Active的工作高于1

希望这会有所帮助。