首页 > 解决方案 > 我如何等待一个钩子,这是一项在 helm 中完成的工作?

问题描述

我有分阶段部署的要求:

阶段1

-配置地图和秘密

第二阶段

-工作1

-工作2

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

第三阶段

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

第 4 阶段

我想知道如何在高层次上使用 helm 来实现这一点,因为钩子并没有真正等待工作完成。

标签: kuberneteskubernetes-helmkubernetes-podhelmfilehelm3

解决方案


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来构建一个程序来管理 Job 对象。如果该程序在集群中运行,您可以在 Helm 图表中包含其部署和 RBAC 对象,它会自行创建作业。


推荐阅读