kubernetes - 我如何等待一个钩子,这是一项在 helm 中完成的工作?
问题描述
我有分阶段部署的要求:
阶段1
-配置地图和秘密
第二阶段
-工作1
-工作2
工作 1 和工作 2 完成后,我想进入有另一份工作的阶段 3
第三阶段
- Job3(有一个就绪探针)
一旦第 3 阶段准备就绪,我想进入第 4 阶段
第 4 阶段
- 工作 4
我想知道如何在高层次上使用 helm 来实现这一点,因为钩子并没有真正等待工作完成。
解决方案
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 对象,它会自行创建作业。
推荐阅读
- c# - 将 get, set for property 放在 Rider 的一条线上
- flutter - 如何从提供者 Flutter 中调用值
- java - 如何获取 ArrayList 中的特定列表或项目
- android - 如何从 tflite 文件中提取 labels.txt 文件?
- python - 从一个正在运行的脚本导入到另一个
- express - 是否可以使用唯一验证加密/解密 Sequelize 模型的字段?
- javascript - Type Annotations 只能在 TypeScript Files 中使用,在 REACT-NATIVE 中解析错误
- python - aplay:main:831:音频打开错误:没有这样的文件或目录
- node.js - 在 NodeJs 中进行 http/s 请求的推荐方式
- javascript - Plotly.js - 更改对象属性内的值