Helm按特定顺序安装

wat*_*ess 15 kubernetes kubernetes-helm

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

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

这些也是我希望它们部署的顺序.我在部署中放了一个钩子,以便它是安装后的,但是Helm并没有将它视为资源,我必须手动管理它.

Job需要Secret和ConfigMap中的信息,否则我会将其作为预安装钩子.但我不能把所有东西都当成钩子,否则我的版本就无法管理.

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

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

yan*_*ver 37

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

  1. 命名空间
  2. ResourceQuota
  3. LimitRange
  4. PodSecurityPolicy
  5. 秘密
  6. ConfigMap
  7. StorageClass
  8. PersistentVolume
  9. PersistentVolumeClaim
  10. ServiceAccount
  11. CustomResourceDefinition
  12. ClusterRole
  13. ClusterRoleBinding
  14. 角色
  15. RoleBinding
  16. 服务
  17. DaemonSet
  18. ReplicationController
  19. ReplicaSet
  20. 部署
  21. StatefulSet
  22. 工作
  23. 的cronjob
  24. 入口
  25. APIService

在卸载发行版期间,订单会反转(请参阅此处).

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

  • 链接到 helm v3 的源代码:https://github.com/helm/helm/blob/release-3.0/pkg/releaseutil/kind_sorter.go (8认同)

jer*_*ile 12

Helm 尝试按特定顺序安装内容,但在继续之前不会检查 pod/部署/作业是否正在运行/完成。另请注意,图表及其依赖项是同时安装的,因此您无法使用具有依赖项的图表来重新排序 Helm 安装资源的方式。

您可以使用图表挂钩来更改顺序,但这些不是托管资源。就我而言,问题是我们需要自定义资源,然后需要运行一个简短的脚本,然后需要开始部署。使用--wait,如果脚本所在的 pod 已完成,Helm 会将升级/安装标记为失败并回滚。这种情况下的解决方案只是使用 Job 而不是 Pod,该问题的评论者比我遇到的问题更多,然后接受部署将在一切最终准备就绪之前重新启动几次。

Helm 3.7 安装顺序:

  1. 命名空间
  2. 网络策略
  3. 资源配额
  4. 限制范围
  5. Pod 安全策略
  6. Pod 中断预算
  7. 服务帐号
  8. 秘密
  9. 秘密名单
  10. 配置映射表
  11. 存储类
  12. 持续量
  13. 持续成交量索赔
  14. 自定义资源定义
  15. 集群角色
  16. 集群角色列表
  17. 集群角色绑定
  18. 集群角色绑定列表
  19. 角色
  20. 角色列表
  21. 角色绑定
  22. 角色绑定列表
  23. 服务
  24. 守护进程集
  25. 复制控制器
  26. 副本集
  27. 部署
  28. 水平Pod自动缩放器
  29. 有状态集
  30. 工作
  31. 定时任务
  32. 入口
  33. API服务
  34. 这个已关闭的 git 问题告诉我们CustomResources 是最后安装的。

来源。与上面的唯一区别是更多的资源类型,并且 ServiceAccount 在列表中略有上升。