【问题标题】:Kubernetes--How to trigger a job if configmap changes?Kubernetes——如果configmap发生变化如何触发作业?
【发布时间】:2019-12-13 10:56:30
【问题描述】:

在我们的部署过程中有一个场景,其中一个活动只需要执行一次,然后实际的应用程序容器就可以运行并准备就绪。此活动不能作为初始化容器放置,因为初始化容器将与应用程序容器的每个副本一起执行,但在这种情况下,此活动只需执行一次。

为了实现这一点,我创建了一个 kubernetes 作业,它执行该活动并完成。

  1. 有没有办法在我的应用程序容器部署定义中检查此特定作业已完成? kubernetes 中是否有任何预定义的键来存储这些元数据信息并可以用来识别作业状态?

  2. 此作业正在使用 configMap,并且此作业中使用的容器在 Directory Server 中加载配置文件(由 configMap 提供)。如果 configMap 发生变化,有没有办法自动触发作业?我可以使用 kubectl 删除作业并重新创建,但我正在寻找自动触发器。 如果不在 Kubernetes 中,OpenShift 或 HELM 中是否有任何可能的方法来执行此操作?

【问题讨论】:

  • 需要准确一次完成的活动非常容易出错,尤其是在事情因各种原因自行重新启动的协调环境中。我建议修改活动,以便再次运行它什么都不做(如果你不能轻松地使重新运行变得微不足道,请将其包装在检查它是否已经完成)然后 init 容器应该足够好。

标签: kubernetes openshift-origin configmap kubernetes-jobs


【解决方案1】:

Helm 为这类事情提供了部署后挂钩,尽管使用起来可能有点粗糙。我们为此使用了一个自定义操作符,因此我们可以在我们的部署中拥有一个明确的状态机(init -> migrate -> deploy -> test -> ready)。但这需要写很多工作。

【讨论】:

  • 嗨@coderanger 我在HELM 上工作不多,但我目前正在研究这个选项。感谢您的意见。
【解决方案2】:

当卷中已经使用的 ConfigMap 更新时,预计的键最终也会更新。请参阅官方 kubernetes 文档上的 Mounted ConfigMap

对于某种自动触发,您可以尝试使用 CronJob 选项,如果您知道您的数据每两个小时或每个午夜都会更改,则基于时间。

【讨论】:

    猜你喜欢
    • 2017-03-17
    • 2015-01-02
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    相关资源
    最近更新 更多