helm 图表安装 - 如果依赖项已安装,将会失败

问题描述 投票:0回答:2

我有一些舵图(每个都是一个微服务),但其中一些依赖于 通用图表(一些秘密、PVC 等) 可以声明图表和通用图表之间的依赖关系,但如果包 已作为依赖项安装 - Helm Chart 安装将失败。

我正在寻找一种方法来安装具有依赖项的 Helm Chart,但如果已经安装了其中一个依赖项图表,则可以取消或打印一条消息,但不会使安装过程失败。

有什么聪明的方法来处理这个问题吗? 例如,检查是否已安装先决条件图表并绕过它,而不会导致整个过程失败。 谢谢

kubernetes kubernetes-helm
2个回答
1
投票

理想情况下,您可以使用

提供依赖关系

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/

到目前为止,我们只使用一张图表。但图表可以 具有依赖关系,称为子图,它们也有自己的值 和模板。在本节中,我们将创建一个子图并查看 我们可以通过不同的方式从模板中访问值。


0
投票

不幸的是,没有。尽管 Helm 的官方文档如此声称,但实际上它与“包管理器”几乎没有相似之处。 Helm 图表实际上是完全单一的,不会尝试做任何其他事情(与包管理器的做法完全相反)。

Helm 通过图表重用和部署时模板提供构建时间依赖关系解析,但不提供任何部署时依赖关系。在部署时仅:

  • 解析 yaml 中的模板变量
  • 从子 yaml 文件创建一个 yaml 文件
  • 对 yaml 中的对象类型进行排序/拆分,以便满足某些 k8s 部署要求。
  • 向对象添加自己的注释,以便可以在后续调用中重新发现它们。
  • 部署 yaml

Helm 图表需要在打包时“编译”所有依赖项,这意味着所有递归依赖项必须在打包时复制到伞图中。在部署时,所有这些依赖关系图都只是转储到单个大型 yaml 中,而不检查集群中已存在的内容。只有在部署最终的 yaml 期间,它才真正发现存在冲突(如果存在冲突,并且它不只是创建同一事物的另一个实例)。

© www.soinside.com 2019 - 2024. All rights reserved.