【问题标题】:Why does a kubernetes cronjob pauses为什么 Kubernetes cronjob 会暂停
【发布时间】:2020-12-01 05:04:42
【问题描述】:

我有这个清单定义的 cronjob:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: trigger
spec:
  concurrencyPolicy: Forbid
  startingDeadlineSeconds: 5
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      activeDeadlineSeconds: 50
      backoffLimit: 1
      parallelism: 1
      template:
        spec:
          containers:
          - env:
            - name: ApiKey
              valueFrom:
                secretKeyRef:
                  key: apiKey
                  name: something
            name: trigger
            image: curlimages/curl:7.71.1
            args:         
            - -H 
            - "Content-Type: application/json"
            - -H
            - "Authorization: $(ApiKey)"
            - -d 
            - '{}'
            - http://url
          restartPolicy: Never

它有点工作,但不是 100%。由于某种原因,它运行 10 个作业,然后暂停 5-10 分钟左右,然后运行 ​​10 个新作业。没有报告错误,但我们不明白为什么它会暂停。

关于什么可能导致 kubernetes 中的 cronjob 暂停的任何想法?

【问题讨论】:

  • 您是否尝试过描述CronJob 并查看相关的Jobs 和Events?
  • @BogdanL,当然。找不到任何奇怪的东西,太奇怪了。
  • 嗨,我也在我的集群上测试过它,我得到了和你一样的结果。我在kube-controller-manager 的 pod-logs 中看到了一些关于 Job 的错误,你能检查一下你那里是否也有一些错误吗? Set or decrease .spec.startingDeadlineSeconds or check clock skew

标签: kubernetes kubernetes-cronjob


【解决方案1】:

在 k8s 上运行 CronJobs 最常见的问题是 产生许多消耗所有集群资源的 pod。 设置适当的 CronJob 限制非常重要。所以尝试为 pod 设置内存限制。

还谈到concurrencyPolicy,您将concurrencyPolicy 参数设置为Forbid,这意味着cron 作业不允许并发运行;如果是运行新作业的时间,而之前的作业运行尚未完成,则 cron 作业会跳过新作业的运行。

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

  • Allow(默认):cron 作业允许同时运行作业
  • Forbid:上面解释过
  • Replace:如果到了新作业运行的时间,而之前的作业运行尚未完成,则 cron 作业将当前正在运行的作业运行替换为新的作业运行

尝试根据您的需要将策略更改为allowreplace

谈到非并行工作,您可以不设置.spec.parallelism。未设置时,默认为1

看一看:cron-jobs-running-for-one-cron-execution-point-in-kubernetescron-job-limitationscron-jobs

【讨论】:

  • pod 的生成不是问题,我添加了更多的 cronjobs 试图以可靠的方式重现它。相反,它一切都开始按预期工作。当实际的 cronjob 在几秒钟内完成时,不确定为什么将 concurrencyPolicy 设置为其他值会产生影响。
  • 所以现在一切正常,但不知道为什么。我确实增加了successfulJobsHistoryLimitstartingDeadlineSecondsactiveDeadlineSeconds,但我看不出这些属性中的任何一个会如何导致作业定期暂停。
  • 谈到 concurrencyPolicy 你说过你的 cronjob 运行 10 个作业,然后它暂停 5-10 分钟然后运行 ​​10 个新作业,这个标志可能会影响它,你也检查了集群资源消费?
猜你喜欢
  • 2023-03-10
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2018-04-13
  • 1970-01-01
  • 2019-09-13
相关资源
最近更新 更多