有条件地管理 Helm 图表依赖项,而无需将子图表保留在“图表”目录中

Ami*_*dav 2 yaml kubernetes-helm

我目前有 3 个 Helm 存储库,其结构如下:

repoA/
??? templates/
??? Chart.yaml
??? values.yaml

repoB/
??? templates/
??? Chart.yaml
??? values.yaml

masterRepo/
??? templates/
??? Chart.yaml
??? values.yaml
??? requirements.yaml

Run Code Online (Sandbox Code Playgroud)

masterRepo 中的 requirements.yaml 文件如下所示:

dependencies:
- name: repoA
  version: "1.0"
  repository: "file://../repoA"
  condition: repoA.enabled
- name: repoB
  version: "1.0"
  repository: "file://../repoB"
  condition: repoB.enabled
Run Code Online (Sandbox Code Playgroud)

我只想使用masterRepo来部署依赖的 Helm 图表。

我知道我可以手动把所有的子库中masterRepo/charts,它会工作,但我想要保留这些存储库的独立,使其他主存储库可以使用任何的

如何使父 Helm 图表检测所有必需的 Helm 图表并有条件地(基于repoX.enabled变量)安装它们,而不将依赖的存储库保留charts在 Master-helm-chart的目录中?

Ami*_*dav 5

如果您在系统的不同位置有多个 Helm 图表,您可以在不更改它们的位置的情况下创建依赖项。

使用问题中指定的结构,我们可以在requirements.yaml(对于 Helm 版本:)2.x.xChart.yaml(对于 Helm 版本:)中添加依赖项3.x.x。我目前正在使用Helm v2.16.1

现在只需运行helm dependency updatehelm dep upmasterRepo目录内部运行,就会创建一个图表目录。现在masterRepo的更新结构如下所示:

masterRepo/
??? charts/
       ??? chartA-1.tgz
       ??? chartB-1.tgz
??? templates/
??? Chart.yaml
??? requirements.lock
??? requirements.yaml
??? values.yaml
Run Code Online (Sandbox Code Playgroud)

添加的新文件/目录是:

  1. ChartA-1.tgzChartB-1.tgz TAR 存档文件,它们只不过是压缩的chartAchartB图表。
  2. requirements.lock:用于重建 charts/ 目录。在此 SO post 中阅读有关此文件的更多信息

要有条件地安装儿童图表,你可以在以下values.yaml的文件masterRepo

repoA:
  enabled: True
repoB:
  enabled: True
Run Code Online (Sandbox Code Playgroud)

现在helm install来自masterRepo内部的一个简单命令将部署masterRepo及其依赖项(chartAchartB)。

希望这可以帮助。海尔明快乐!