指定本地 helm 依赖

Specifying local helm dependency

我正在尝试使用 bitnami helm chart 添加 rabbitmq 服务。该图表包含一个依赖的掌舵图,称为 common。 整个应用程序本身是使用父 helm chart 部署的,每个服务都有自己独立的 helm chart。 Helm 图表结构如下所示-

\myapp
    \charts
        \service1
        \service2
        \service3
        \messaging
            \charts 
                \common
            \templates
                \chart.yml
                \values.yml

当我从 'messaging' 目录 运行“helm 依赖更新”时,它下载了一个通用的 1.x.x.tgz 文件。我提取了内容并将其放在 \messaging\charts\common 文件夹中 原始 messaging\templates\chart.yml(rabbitmq helm 图表)包含以下条目

dependencies:
  - name: common
    repository: https://charts.bitnami.com/bitnami
    tags:
      - bitnami-common
    version: 1.x.x

因为我无法在“Helm 安装”执行期间下载,所以我必须事先下载相关的 helm 图表并将它们保存为本地依赖项。下载 common.tgz 文件后,我提取了内容并更新了 messaging\templates\chart.yml 中的依赖项,如下所示

dependencies:
  - name: common
    repository: 'file://charts/messaging/charts/common'
    tags:
      - bitnami-common
    version: 1.x.x

如果我执行“helm install messaging”。从 \myapp\charts\messaging 目录,服务部署没有任何错误。但是当部署应用程序的父掌舵图时,我总是会收到此错误

"Error: found in Chart.yaml, but missing in charts/ directory: messaging"

有人可以指出配置中的错误吗?我在多个位置移动了公共文件夹的内容,将它们作为 tgz 文件,更新了相对于消息传递目录而不是父 helm 图表位置的存储库路径,但在所有情况下,消息传递服务的安装都因上述原因而失败错误

您不需要解压 charts/*.tgz 文件。如果它们在该目录中(并且仍然打包),那么 Helm 将使用它们来 运行 部署。 Helm 不会自行联系外部图表存储库,只有当您 运行 helm dependency 命令时才会联系。

在你 运行 helm dep up 之后你的文件系统布局应该看起来像

myapp
\-- charts
  \-- messaging
    +-- charts
    | \-- rabbitmq-8.15.3.tgz
    |-- templates
    | +-- deployment.yaml
    | \-- service.yaml
    +-- Chart.yaml
    \-- values.yaml

您可以在这种状态下出发了。不要打开任何东西。

如果您需要跨网络复制此设置,请在执行此操作时包含 charts/*.tgz 文件。 Chart.yamlrequirements.yaml 引用 Internet 位置并不重要; helm install 将只使用那些本地存档。

我遇到了类似的问题,这是因为开发人员将图表和模板等放置在图表目录中。我不断收到错误消息,说它找不到目录,因此将所有图表移动到 helm-charts 目录中,而不是因为图表目录由 Helm 管理。当我更新存储库列表以从新目录中提取时,我的问题就解决了。我从这个问题的评论中得到了这个想法并且它起作用了。 https://github.com/helm/helm/issues/2887