【问题标题】:Read schedule expression of Kubernetes CronJob from ConfigMap从 ConfigMap 中读取 Kubernetes CronJob 的调度表达式
【发布时间】:2020-12-16 12:38:22
【问题描述】:

我在 Kubernetes 中配置了超过 10 个 CronJobs,并且都按预期正常工作。

现在我计划再添加 20 个 CronJobs。从外部资源获取数据、处理数据并生成某种报告的所有作业。

我想将 CronJobs 的调度表达式配置到 ConfigMap 中。例如,

kind: ConfigMap
apiVersion: v1
metadata:
  name: scheduler-config
  namespace: test
data:
  job1.schedule.expression: */1 * * * *
  job2.schedule.expression: */5 * * * *
  job3.schedule.expression: */30 * * * *
  job4.schedule.expression: 0 1 * * *
  job5.schedule.expression: 0 0 * * THU

如果可能,我想让它更灵活,例如,如果我用新表达式更新 ConfigMap,那么 CronJob 应该用新的计划表达式更新,并且下次它应该按照 ConfigMap 中的新表达式值运行。

【问题讨论】:

  • 据我所知,ConfigMap 用于在容器内设置环境变量或作为卷挂载。我认为您不能使用 configmap 在 cronjob 中设置计划。也许您可以使用helm cronjobs 作为替代方案?
  • 我不太清楚你在问什么。使用 configmap 能给你带来什么?为什么不直接在相应的 cronjob 中更新 spec.schedule
  • 我有很多 cronjobs,更新每个 cronjob 的 spec.schedule 非常耗时,如果我可以将所有调度程序放在一个配置中并在需要时应用它会更好。
  • 你可以编写一个小程序来监听 configmap 的变化,当它收到通知时,它会以编程方式重新配置所有的 cronjobs。

标签: kubernetes configmap kubernetes-cronjob


【解决方案1】:

正如我在 cmets 中已经提到的

据我所知ConfigMap 用于在容器内设置环境变量或作为卷挂载。我认为您不能使用 configmap 在 cronjob 中设置计划。


作为替代方案,您可以使用 helm cronjobs 并在 values.yaml 中指定时间表。

看看下面用上面的 helm cronjobs 创建的 cronjobs。

kubectl get cronjob
NAME                     SCHEDULE      SUSPEND   ACTIVE    LAST SCHEDULE   AGE
cold-fly-hello-env-var   * * * * *     False     0         23s             1m
cold-fly-hello-ubuntu    */5 * * * *   False     0         23s             1m
cold-fly-hello-world     * * * * *     False     0         23s             1m

他们的日程安排是theretherethere

【讨论】:

  • 谢谢,我会试试看它是否适合我的用例
猜你喜欢
  • 1970-01-01
  • 2021-11-08
  • 2019-09-13
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 2020-07-18
  • 2019-06-21
相关资源
最近更新 更多