我有一些舵图(每个都是一个微服务),但其中一些依赖于 通用图表(一些秘密、PVC 等) 可以声明图表和通用图表之间的依赖关系,但如果包 已作为依赖项安装 - Helm Chart 安装将失败。
我正在寻找一种方法来安装具有依赖项的 Helm Chart,但如果已经安装了其中一个依赖项图表,则可以取消或打印一条消息,但不会使安装过程失败。
有什么聪明的方法来处理这个问题吗? 例如,检查是否已安装先决条件图表并绕过它,而不会导致整个过程失败。 谢谢
理想情况下,您可以使用
提供依赖关系https://helm.sh/docs/helm/helm_dependency/
# Chart.yaml
dependencies:
- name: nginx
version: "1.2.3"
repository: "https://example.com/charts"
- name: memcached
version: "3.2.1"
repository: "https://another.example.com/charts"
Helm 图表将其依赖项存储在“charts/”中。对于图表 对于开发人员来说,管理“Chart.yaml”中的依赖关系通常更容易 它声明了所有依赖项。
依赖命令对该文件进行操作,使得很容易 在所需的依赖关系和实际的依赖关系之间进行同步 依赖项存储在“charts/”目录中。
您还可以使用子图表和父图表格式来管理依赖关系
文件夹结构会像这样
├── Chart.yaml
├── charts
│ └── django
│ ├── Chart.yaml
│ ├── templates
│ │ ├── deployment.yaml
│ │ ├── ingress.yaml
│ │ └── service.yaml
│ └── values.yaml
├── templates
└── values.yaml
例如:https://medium.com/craftech/one-chart-to-rule-them-all-3f685e0f25a9
您还可以在官方文档中阅读更多内容:https://helm.sh/docs/chart_template_guide/subcharts_and_globals/
到目前为止,我们只使用一张图表。但图表可以 具有依赖关系,称为子图,它们也有自己的值 和模板。在本节中,我们将创建一个子图并查看 我们可以通过不同的方式从模板中访问值。
不幸的是,没有。尽管 Helm 的官方文档如此声称,但实际上它与“包管理器”几乎没有相似之处。 Helm 图表实际上是完全单一的,不会尝试做任何其他事情(与包管理器的做法完全相反)。
Helm 通过图表重用和部署时模板提供构建时间依赖关系解析,但不提供任何部署时依赖关系。在部署时仅:
Helm 图表需要在打包时“编译”所有依赖项,这意味着所有递归依赖项必须在打包时复制到伞图中。在部署时,所有这些依赖关系图都只是转储到单个大型 yaml 中,而不检查集群中已存在的内容。只有在部署最终的 yaml 期间,它才真正发现存在冲突(如果存在冲突,并且它不只是创建同一事物的另一个实例)。