Helm 按特定顺序安装

Helm install in certain order

我正在尝试使用以下资源创建 Helm Chart:

  1. 秘密
  2. ConfigMap
  3. 服务
  4. 工作
  5. 部署

这些也是我希望的部署顺序。我在 Deployment 中放置了一个挂钩,因此它是 post-install,但是 Helm 没有将它视为资源,我必须手动管理它。

Job 需要 Secret 和 ConfigMap 中的信息,否则我会将其作为预安装挂钩。但是我不能把所有的东西都变成一个钩子,否则在我的发布中什么都不会被管理。

有没有人有解决方案或想法能够管理 Helm 版本中的所有资源并确保作业在部署开始之前完成?

我现在唯一的想法是两个制作两个图表:一个有 1-4,第二个有 5,这取决于第一个。

Helm 收集给定图表中的所有资源及其依赖项,按资源类型对它们进行分组,然后按以下顺序安装它们(参见 here - Helm 2.10):

  1. 命名空间
  2. 资源配额
  3. 限制范围
  4. Pod 安全策略
  5. 秘密
  6. ConfigMap
  7. 存储类
  8. 持久卷
  9. PersistentVolumeClaim
  10. 服务帐号
  11. 自定义资源定义
  12. 集群角色
  13. ClusterRoleBinding
  14. 角色
  15. 角色绑定
  16. 服务
  17. 守护进程集
  18. 连播
  19. 复制控制器
  20. 副本集
  21. 部署
  22. 状态集
  23. 工作
  24. 定时作业
  25. 入口
  26. API服务

在卸载版本期间,顺序颠倒(参见 here)。

按照这个逻辑,在您创建 Job 资源的情况下,Secret 和 ConfigMap 都已经应用,但 Helm 不会在应用 Deployment 之前等待 Job 完成。 如果您将 Chart 分成两部分(1-4、5)并按顺序安装它们,您仍然会遇到在作业完成之前可能应用 Deployment 的问题。 我的建议是将图表分成两部分(1-3、4-5),其中作业有一个预安装挂钩,这将确保它在应用部署之前完成。

Helm 尝试按特定顺序安装东西,但在继续之前不检查 pods / 部署 / 作业是否 运行 / 已完成。另请注意 a chart and its dependencies are installed simultaneously,因此您不能使用具有依赖关系的图表来重新排序 Helm 安装资源的方式。

你可以使用 chart hooks to change the order, but these aren't managed resources. In my case, the problem was that we needed custom resources up, then we needed a short script to run, and then we needed to start our deployments. With --wait, if the pod the script was in completed, Helm would mark the upgrade/install as a failure and rollback. The solution in this case was just to use a Job instead of a Pod, which commenters on that issue 比我遇到的问题更多,然后接受部署将重新启动几次,直到一切最终准备就绪。

Helm 3.7 安装顺序:

  1. 命名空间
  2. 网络策略
  3. 资源配额
  4. 限制范围
  5. Pod 安全策略
  6. PodDisruptionBudget
  7. 服务帐号
  8. 秘密
  9. 秘密列表
  10. ConfigMap
  11. 存储类
  12. 持久卷
  13. PersistentVolumeClaim
  14. 自定义资源定义
  15. 集群角色
  16. 集群角色列表
  17. ClusterRoleBinding
  18. ClusterRoleBindingList
  19. 角色
  20. 角色列表
  21. 角色绑定
  22. 角色绑定列表
  23. 服务
  24. 守护进程集
  25. 连播
  26. 复制控制器
  27. 副本集
  28. 部署
  29. Horizo​​ntalPodAutoscaler
  30. 状态集
  31. 工作
  32. 定时作业
  33. 入口
  34. API服务
  35. this closed git issue 告诉我们 CustomResource 最后 要安装的。

Source。 与上面唯一不同的是更多的资源类型,并且 ServiceAccount 在列表中被稍微推高了。