【问题标题】:How do I wait for a hook which is a job to complete in helm?我如何等待一个钩子,这是一项在 helm 中完成的工作?
【发布时间】:2021-12-15 14:34:18
【问题描述】:

我有分阶段部署的需求:

第一阶段

-配置地图和秘密

第二阶段

-工作1

-工作2

一旦工作 1 和工作 2 完成,我想进入有另一份工作的阶段 3

第三阶段

  • Job3(有准备探测)

一旦第 3 阶段准备就绪,我想进入第 4 阶段

第 4 阶段

  • 工作4

我想知道如何在高级别的 helm 中实现这一点,因为 hooks 并没有真正等待工作完成。

【问题讨论】:

    标签: kubernetes kubernetes-helm kubernetes-pod helmfile helm3


    【解决方案1】:

    Helm 没有这种级别的生命周期控制。如果“作业 3(具有就绪性探测)”实际上是一个部署,那么您几乎可以将其硬塞到安装前和安装后的钩子中,但总的来说,这超出了 Helm 的能力。

    鉴于您专门讨论的是一次性运行作业,我可能会使用kubectl 来安装它们。您将需要某种包装脚本,然后您可以kubectl wait 完成作业。这可能看起来像:

    # Install the configuration; since this is persistent, it makes
    # sense to manage it in Helm
    helm upgrade --install -n my-app my-app .
    
    # Delete and recreate the first set of jobs, then wait for them to finish.
    kubectl delete -f stage-2.yaml || true
    kubectl apply -f stage-2.yaml
    kubectl wait -f stage-2.yaml --for=Complete=true
    
    # Delete and recreate the second set of jobs, _etc._
    kubectl delete -f stage-3.yaml || true
    kubectl apply -f stage-3.yaml
    kubectl wait -f stage-3.yaml --for=Complete=true
    

    如果您的逻辑涉及到这一点,您还可以考虑使用Kubernetes API 构建一个程序来管理作业对象。如果该程序在集群中运行,您可以在 Helm 图表中包含其 Deployment 和 RBAC 对象,它会自行创建作业。

    【讨论】:

    • 人们没有意识到 helm 在复杂场景中的局限性。我们将 helm 命令包装在各种脚本 + 手动 kubectl 中,就像您展示的那样。它在柔软的一面是痛苦的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 2020-09-19
    • 1970-01-01
    相关资源
    最近更新 更多