如何引用同一存储库中的 helm 图表

MRo*_*lin 5 kubernetes-helm

我想在同一个存储库中维护一些 Helm 图表,这些图表在各自的requirements.yaml文件中相互引用。这些图表应该如何引用彼此的相对路径?

对于本地开发,我可以使用file://如下协议

name: chart-name
repository: file://../chart-name
Run Code Online (Sandbox Code Playgroud)

但是,当我移动到托管存储库时,我将需要更改此设置。我希望这个图表目录不需要将其最终位置烘焙到其repository.yaml 文件中。这可能吗?

zco*_*rts 2

当您移动到托管存储库时,您是否不必发布每个图表?如果是这样,只要您没有循环依赖关系,就可以将每个图表按依赖顺序发布到托管存储库,然后更新requirements.yaml。

即如果您有 3 个图表 A、B 和 C。

  1. A 不依赖于 B 和 C
  2. B 取决于 A
  3. C 取决于 B

将 A 发布到托管存储库,更新 B 的要求以指向 A 的托管存储库名称,然后发布 B 并对 C 重复更新过程。

我正在做类似的事情,但我不使用托管存储库。我已经有了一个大型的 Ansible 设置,因此我编写了一个直接从目录安装图表的角色。有一个 git 存储库包含我的所有(当前 7 个)图表,并且减去运行 helm 服务器是一个类似的过程。明显的缺点是手动更新需求,但我不确定是否还有其他选择。

编辑

有点 hacky 但可以工作:

为了避免编辑依赖项,一种方法是在本地运行图表存储库。如果您的存储库位于charts.domain.com,请像往常一样添加对此的依赖项

dependencies:
  - name: my-chart
    repository: http://charts.domain.com
    version: 0.0.1
Run Code Online (Sandbox Code Playgroud)

charts.domain.com然后,当您在本地开发时,向您的主机文件添加一个指向您的图表的条目localhost

示例工作流程可能类似于:

mkdir my-charts
mv my-char-a-0.0.1.tgz my-charts/
helm repo index my-charts/ --url http://charts.domain.com
Run Code Online (Sandbox Code Playgroud)

现在提供从本地主机生成的索引/存储库。这样您的依赖始终是charts.domain.com

根据您使用的远程主机,当您愿意发布时,您可以将此本地索引同步到远程主机,这样就可以减少本地和远程主机出现分歧的机会。

再次需要注意的是,您需要启用禁用此主机条目,具体取决于您是否正在开发或想要使用实时存储库。您始终可以编写主机文件条目编辑的脚本。