首页 > 解决方案 > Helm 根据条件下载依赖项

问题描述

我正在使用 helm 图表来部署大约 15 个微服务。有一个父 helm 图表,requirements.yaml其中所有必需的微服务都列为依赖项。

示例requirements.yaml文件:

dependencies:
  - name: service1
    repository: "@stable"
    version: <version>
  - name: service2
    repository: "@stable"
    version: <version>
  - name: service3
    repository: "@stable"
    version: <version>
  - name: service4
    repository: "@stable"
    version: <version>
    condition: false

当我运行helm dependency update所有列为依赖项的图表时,都会下载。在某些情况下,很少有服务正在开发中,并且不需要在生产中部署。

我们针对 prod 和 non-prod 环境有不同的 artifactory,并且禁用的服务不在 prod artifactory 中。因此,它给出了一个错误,说 helm chart 丢失。我知道条件标志不会安装依赖项,但我怎样才能阻止它下载依赖项?

标签: kubernetes-helm

解决方案


可能来得有点晚,但我最近整理了一个类似的问题,我认为它可能会帮助其他人分享。在 Chart.yaml 中声明依赖项时可以使用条件键:

dependencies:
- condition: gitea.cache.builtIn.enabled
  name: memcached
  repository: https://charts.bitnami.com/bitnami
  version: 4.2.20

values.yaml 中的位如下:

[...]
gitea:
  cache:
    builtIn:
      enabled: true
[...]

这个例子是从奇妙的gitea helm chart repo中提取的,应该是不言自明的。但是,您可以查看Helm 文档

请注意,如果嵌套图表的深度超过 2 层,helm2 可能会出现异常,因此我建议您查看 Helm3。

最后请注意,在我的情况下(因为我在部署 Helm 图表时走了一个小弯路,所以在渲染 helm 图表时会检查条件,而不是在运行 helm 依赖项更新时


推荐阅读