为什么kubernetes cronjob会暂停

问题描述

我有此清单定义的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暂停的任何想法?

解决方法

在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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...