要参数化Kubernetes上的cronjob调度吗

要参数化Kubernetes上的cronjob调度吗,kubernetes,cron,jobs,schedule,Kubernetes,Cron,Jobs,Schedule,我有一个yaml。我想参数化kubernetes cronjob的时间表。在环境文件中,我声明JobFrequencyIn分钟:10 apiVersion: batch/v1beta1 kind: CronJob metadata: name: scheduled-mongo-cronjob spec: schedule: "*/$(JobFrequencyInMinutes) * * * *" concurrencyPolicy: "Forbid" jobTemplate: spec:

我有一个yaml。我想参数化kubernetes cronjob的时间表。在环境文件中,我声明JobFrequencyIn分钟: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调度的mongo CronJob无效:spec.schedule:无效值:*/$JobFrequencyInMinutes****:无法从$JobFrequencyInMinutes:strconv解析int。Atoi:解析$JobFrequencyInMinutes:无效语法


如果有其他方法可以实现这一点,请指导我。

这里的问题是,当创建CronJob时,环境变量将仅在作业本身内部可用,但它无法创建,因为变量$JobFrequencyInMinutes在节点级别不存在

我想说的是,为了实现您正在尝试做的事情,您需要在集群级别拥有一个环境变量。每当您想要更新日程安排时,您都需要为其设置一个新值,然后重新创建您的CronJob

虽然声明式方式似乎无法通过YAML工作,因此您需要使用命令式方式创建:


kubectl run scheduled mongo cronjob-schedule=*/$JobFrequencyInMinutes****-restart=OnFailure-image=xxxx

我认为您的问题在于括号。能否尝试将日程安排从$JobFrequencyIn分钟更改为$JobFrequencyIn分钟,并告诉我它是否有效?我发现了突出显示的错误。看起来问题在于字符串到整数的转换。但yaml上的Environment值强制声明为string。CronJob scheduled mongo CronJob无效:spec.schedule:无效值:*/$JobFrequencyInMinutes****:无法从$schedule:strconv解析int。Atoi:解析$JobFrequencyInMinutes:无效语法似乎未使用环境变量,这导致了错误,因为$JobFrequencyInMinutes不是int。。。实际上,该值似乎没有被转换,否则您将得到10不是INT。您是否可以尝试运行以下命令来验证环境变量是否可以在那里使用?kubectl run hello-schedule=*/$JobFrequencyInMinutes****-restart=OnFailure-image=busybox-/bin/sh-c date;回显Kubernetes集群的Hello。如果它运行,您能否得到以下结果:kubectl get cronjob hello以验证计划?我现在遇到了这个错误。CronJob hello无效:spec.schedule:invalid value://**:未能从以下位置解析int:strconv.Atoi:parsing:invalid syntax有意义的是,创建CronJob时,env变量仅在作业本身内部可用,但它无法创建,因为节点级别不存在变量$JobFrequencyInMinutes。我想说的是,为了实现您正在尝试做的事情,您需要在cluster lvl上有一个env变量,并在您想要更新计划时更新它和作业。这对您有意义吗?谢谢Juliano提出了传递变量的方法。我将花更多的时间在这方面,看看是否有一种方法可以从YAML做到这一点。如果我找不到,我想我得到的最好答案是你的。再次感谢!