我正在尝试使用以下资源创建一个 Helm 图表:
- 秘密
- 配置地图
- 服务
- 工作
- 部署
这些也按照我希望部署它们的顺序排列。我在部署中放置了一个钩子,以便它是安装后,但是 Helm 没有将其视为资源,我必须手动管理它。
作业需要 Secret 和 ConfigMap 中的信息,否则我会将其作为预安装钩子。但是我不能把所有东西都变成一个钩子,否则在我的版本中什么都不会管理。
是否有人有解决方案或想法能够管理 Helm 版本中的所有资源并确保作业在部署开始之前完成?
我现在唯一的想法是两个制作两个图表:一个是 1-4,第二个是 5,这取决于第一个。
Helm收集给定图表及其依赖项中的所有资源,按资源类型对它们进行分组,然后按以下顺序安装它们(请参阅此处 - Helm 2.10(:
- Namespace
- 资源配额
- 极限范围
- PodSecurityPolicy
- 秘密
- 配置地图
- 存储类
- 持久卷
- 持久卷声明
- 服务帐户
- 自定义资源定义
- 集群角色
- 群集角色绑定
- 角色
- 角色绑定
- 服务
- 守护程序集
- 荚
- 复制控制器
- 副本集
- 部署
- 有状态集
- 工作
- 克朗乔布斯
- 入口
- APIService
在卸载发行版期间,顺序颠倒(请参阅此处(。
按照此逻辑,在创建作业资源的情况下,机密和配置映射都已应用,但 Helm 不会等待作业完成即可应用部署。 如果将图表拆分为两部分(1-4、5(并按顺序安装它们,则仍然会遇到在作业完成之前可能应用部署的问题。 我的建议是将图表分为两部分(1-3,4-5(,其中作业有一个预安装钩子,这将确保它在应用部署之前完成。
Helm 尝试按特定顺序安装东西,但在继续之前不会检查 pod/部署/作业是否正在运行/已完成。另请注意,图表及其依赖项是同时安装的,因此不能使用具有依赖项的图表来重新排序 Helm 安装资源的方式。
您可以使用图表挂钩来更改顺序,但这些不是托管资源。就我而言,问题是我们需要自定义资源,然后我们需要一个简短的脚本来运行,然后我们需要开始部署。使用--wait
,如果脚本所在的 pod 已完成,Helm 会将升级/安装标记为失败并回滚。在这种情况下,解决方案只是使用 Job 而不是 Pod,这个问题的评论者比我有更多的问题,然后接受部署会在一切最终准备就绪之前重新启动几次。
Helm 3.7 安装顺序:
- Namespace
- 网络政策
- 资源配额
- 极限范围
- PodSecurityPolicy
- 豆荚中断预算
- 服务帐户
- 秘密
- 机密列表
- 配置地图
- 存储类
- 持久卷
- 持久卷声明
- 自定义资源定义
- 集群角色
- 群集角色列表
- 群集角色绑定
- 群集角色绑定列表
- 角色
- 角色列表
- 角色绑定
- 角色绑定列表
- 服务
- 守护程序集
- 荚
- 复制控制器
- 副本集
- 部署
- HorizontalPodAutoscaler
- 有状态集
- 工作
- 克朗乔布斯
- 入口
- APIService
- 这个关闭的 Git 问题告诉我们
CustomResource
最后安装。
源。 与上面的唯一区别是更多的资源类型,并且服务帐户在列表中略微上推。