【发布时间】:2020-07-18 03:00:41
【问题描述】:
我有一个 yaml。我想参数化那个 kubernetes cronjob 的时间表。在环境文件中,我声明了 JobFrequencyInMinutes: "10"
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: scheduled-mongo-cronjob
spec:
schedule: "*/$(JobFrequencyInMinutes) * * * *"
concurrencyPolicy: "Forbid"
jobTemplate:
spec:
template:
spec:
containers:
- name: scheduled-mongo-cronjob
image: xxxx
env:
- name: JobFrequencyInMinutes
valueFrom:
configMapKeyRef:
key: JobFrequencyInMinutes
name: env-conf
当我应用上述 yaml 时出现错误。 CronJob“scheduled-mongo-cronjob”无效:spec.schedule:无效值:“*/$(JobFrequencyInMinutes)* * * *”:无法从$(JobFrequencyInMinutes)解析int:strconv.Atoi:解析“$( JobFrequencyInMinutes)": 无效语法
如果有其他方法可以实现这一点,请指导我。
【问题讨论】:
-
我相信您的问题与括号有关。您能否尝试将日程表从
$(JobFrequencyInMinutes)更改为$JobFrequencyInMinutes并告诉我是否可行? -
我得到了突出显示的错误。看起来问题在于将字符串转换为整数。但是 yaml 上的环境值强制声明为字符串。 CronJob“scheduled-mongo-cronjob”无效:spec.schedule:无效值:“*/$JobFrequencyInMinutes * * * *”:无法从 $Schedule 解析 int:strconv.Atoi:解析“$JobFrequencyInMinutes” : 无效语法
-
看来是环境变量没有被使用,这是导致错误的原因,因为
$JobFrequencyInMinutes不是一个INT...实际上似乎该值甚至没有被转换,否则你会得到“10”不是一个INT。您能否尝试运行以下命令来验证是否可以在那里使用环境变量?kubectl run hello --schedule="*/$JobFrequencyInMinutes * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster"。如果它运行,你能得到结果:kubectl get cronjob hello来验证计划吗? -
我现在收到了这个错误。 CronJob“hello”无效:spec.schedule:无效值:“*/ * * * *”:无法解析 int from :strconv.Atoi:解析“”:无效语法
-
有道理,env 变量将仅在创建 CronJob 并在作业本身内部可用,但无法创建,因为变量
$JobFrequencyInMinutes不存在于节点级别。我想说,为了实现你想要做的事情,你需要在集群 lvl 有一个环境变量,并在你想更新计划时更新它和作业。这对你有意义吗?
标签: kubernetes cron jobs schedule