想要在 Kubernetes 上参数化 cronjob 计划

Want to parameterize cronjob schedule on Kubernetes

我有一个 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)”:语法无效

如果有任何其他方法可以实现此目的,请指导我。

这里的问题是环境变量仅在创建 CronJob 时可用并且在作业本身内部可用,但创建失败是因为节点级别不存在变量 $JobFrequencyInMinutes。

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

声明式方式似乎不起作用(通过您的 YAML),因此您需要使用命令式方式创建:

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