当前位置: 首页 > 知识库问答 >
问题:

避免在 Kubernetes 中为一个 cron 执行点运行多个 cron 作业

包兴思
2023-03-14

编辑:问题解决了,这是我的错误,我只是使用了错误的cron设置。我假设“*2***”在2点时每天只运行一次,但实际上它在2点后每分钟运行一次。所以Kubernetes的行为是正确的。

我一直在一个 cron 执行点运行多个作业。但似乎只有当这些作业的运行时间非常短时。知道为什么会发生这种情况以及如何防止它吗?我使用并发策略:禁止,回退限制:0重新启动策略:从不

一个cron作业的示例,该作业应该每天运行一次,但在其预定运行时间之后运行多次:

job-1554346620                   1/1           11s        4h42m   
job-1554346680                   1/1           11s        4h41m                     
job-1554346740                   1/1           10s        4h40m 

相关配置:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: job
spec:
  schedule: "* 2 * * *"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: job
              image: job_image:latest
              command: ["rake", "run_job"]
          restartPolicy: Never
          imagePullSecrets:
            - name: regcred
      backoffLimit: 0

共有2个答案

缪远航
2023-03-14

嗨,不清楚您期望的是什么-仔细研究这个问题,但是如果我理解正确的话,您的意思是不要同时运行所有的cron jobs:< br > 1。第一种选择是改变他们的计划时间。第二个选项尝试在您的规格模板中使用其他选项,如-并行作业-描述:https://kubernetes . io/docs/concepts/workloads/controllers/Jobs-run-to-completion/

msgstr"对于工作队列作业,您必须离开。spec.completions未设置,并将spec.parallelism设置为非负整数"


  jobTemplate:
    spec:
      parallelism: 1
      template:

要重新创建此任务,请提供更多详细信息。< br >

此外,对于“工作历史”,默认成功的工作历史限制和失败的工作历史限制分别设置为3和1。
请在:https://kubernetes.io/docs/tasks/job/如果您有兴趣,您可以在“规格”部分设置限制:


successfulJobsHistoryLimit: 1

failedJobsHistoryLimit: 1

希望对此有所帮助。

杨星纬
2023-03-14

在k8s上运行CronJobs最常见的问题是:

生成许多pod,这些pod消耗所有集群资源

设置适当的 CronJob 限制非常重要

如果您不确定自己需要什么,只需将此示例作为模板:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: my-first-conjob
  namespace: devenv-admitriev
spec:
  schedule: "*/10 * * * *" # MM HH DD MM WKD -- Minutes, Hour, Day, Month, Weekday (eg. Sun, Mon)
  successfulJobsHistoryLimit: 3 # how many completed jobs should be kept
  failedJobsHistoryLimit: 1 # how many failed jobs should be kept
  suspend: false # Here you can suspend cronjob without deliting it
  concurrencyPolicy: Forbid # Choose Forbid if you don't want concurrent executions of your Job

  # The amount of time that Kubernetes can miss and still start a job.
  # If Kubernetes missed too many job starts (100)
  # then Kubernetes logs an error and doesn’t start any future jobs.
  startingDeadlineSeconds: 300 # if a job hasn't started in this many seconds, skip
  jobTemplate:
    spec:
      parallelism: 1 # How many pods will be instantiated at once.
      completions: 1 # How many containers of the job are instantiated one after the other (sequentially) inside the pod.
      backoffLimit: 3 # Maximum pod restarts in case of failure
      activeDeadlineSeconds: 1800 # Limit the time for which a Job can continue to run
      template:
        spec:
          restartPolicy: Never # If you want to restart - use OnFailure
          terminationGracePeriodSeconds: 30
          containers:
          - name: my-first-conjob
            image: busybox
            command:
              - /bin/sh
            args:
              - -c
              - date; echo sleeping....; sleep 90s; echo exiting...;
            resources:
              requests:
                memory: '128Mi'
              limits:
                memory: '1Gi'
 类似资料:
  • 我试图在节点JS中的另一个cron作业中运行一个cron作业。外部cron作业在第1天只执行一次:内部cron作业在第2天执行1次:内部cron作业在第3天执行2次:内部cron作业执行3次 为什么它要多次执行,尽管我在cron作业中调用它一次

  • 当前设置 null 问题 因为我们有3个pod,并且调度程序处于应用程序级别,所以我们对数据集进行3次调用,每个pod都得到响应,并且首先在缓存中处理的pod成为主服务器,其他2个pod复制来自该实例的数据。 我认为这是一个问题,因为我们将增加获取更多数据集的作业数量,因此这将成倍增加调用的数量。 null null null 2-我谷歌了,发现其他的选择是运行一个Cronjob,这将安排一个工作

  • 如果我创建 cronjob 以每 2:30 运行一次命令会运行吗?(这意味着,我的 cron 将在每小时 90 分钟后运行一次。 命令如:30*/2***/command/xxx= 请帮帮忙?

  • 问题内容: 我想以分离模式在docker容器中运行python cron作业。我的设置如下: 我的python脚本是test.py 我的cron文件是my-crontab 而我的Dockerfile是 这种方法潜在的问题是什么?还有其他方法,它们的优缺点是什么? 问题答案: 我在尝试使cron作业在docker容器中运行时遇到的几个问题是: Docker容器中的时间不是UTC的本地时间; dock

  • 这种方法的潜在问题是什么?是否还有其他方法,它们的利弊是什么?

  • 问题内容: 在我们的centos6服务器中。我想以apache用户的身份在cron作业中执行php脚本,但不幸的是它不起作用。 这是crontab的版本(crontab -uapache -e) 这是“ test.php”文件的源代码,可以与“ apache”用户作为所有者正常工作。 我尝试将php替换为php的完整路径(/ usr / local / php / bin / php),但它也不起