问题描述
我有此清单定义的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作业将用新的作业替换当前正在运行的作业。
尝试根据需要将策略更改为allow
或replace
。
谈到非并行作业,您可以将.spec.parallelism
保持不变。取消设置后,默认设置为1
。
看看:cron-jobs-running-for-one-cron-execution-point-in-kubernetes,cron-job-limitations,cron-jobs。