首页 > 解决方案 > Kubernetes Helm 图表 requirements.yaml 文件依赖项 false 条件

问题描述

我正在使用 Kubernetes Helm requirements.yaml 文件来添加依赖项。根据 values.yaml 条件,它将创建依赖项 pod。

在这里,我想在 apache.enabled == false 时执行所需的依赖项

values.yaml

external_apache:
  enabled: false

文件需求.yaml

dependencies:
- name:
  version:
  repository:
  condition: external_apache.enabled

如何添加虚假条件?

我尝试了以下条件,但它不起作用:

condition: external_apache.enabled == false

标签: kuberneteskubernetes-helm

解决方案


你使用的是什么版本的 Helm?

GitHub 上的 Kubernetes 存储库中也有类似的问题:

无法在“requirements.yaml”中使用条件 #2111

解决方案是将 Helm 升级到 v2.2.0+。在该版本中,添加了条件支持。

Helm 2 到 Helm 3 升级说明:

Chart apiVersion 因以下规范更改而升级为“v2”:

  • 动态链接的图表依赖项移至Chart.yaml(requirements.yaml 已删除,需求 --> 依赖项)
  • 现在可以将库图表(帮助/常用图表)添加为动态链接的图表依赖项
  • 图表具有类型元数据字段,用于将图表定义为应用程序或库图表。默认情况下它是应用程序,这意味着它是可渲染和可安装的
  • Helm 2 图表 (apiVersion=v1) 仍然可以安装

Helm 文档存储库中,有一个关于条件如何工作的解释:(我添加了一些注释以使阅读更容易)

条件- 条件字段包含一个或多个 YAML 路径(以逗号分隔)。
标签- 标签字段是与此图表关联的标签的 YAML 列表。

# parentchart/requirements.yaml
dependencies:
      - name: subchart1
        repository: http://localhost:10191
        version: 0.1.0
        condition: subchart1.enabled, global.subchart1.enabled
        tags:
          - front-end        #(chart should be disabled because the tags.front-end is “false” in values.yaml file , but ...)
          - subchart1        #(subchart1.enabled condition path is present in values.yaml file and it has "true" value...)
                             #(this condition, so it overrides tag front-end and this chart will be enabled)

      - name: subchart2
        repository: http://localhost:10191
        version: 0.1.0
        condition: subchart2.enabled,global.subchart2.enabled
                  #(as soon as no one from these paths is exists in values.yaml this condition has ho effect)

        tags:
          - back-end        #(chart should be enabled because the tags.back-end is “true” in values.yaml file)
          - subchart2       #(and there is no condition path found in values.yaml to override it)

如果此条件路径存在于顶级父级values并解析为布尔值,则图表将根据该布尔值启用或禁用。仅评估列表中找到的第一个有效路径,如果不存在路径,则条件无效

在顶级父级的值中,所有带有标签的图表都可以通过指定标签和布尔值来启用或禁用。

# parentchart/values.yaml

subchart1:
  enabled: true          #(this could be found from requirements as subchart1.enabled and override tags in this case)
tags:
  front-end: false      #(this disables charts with tag front-end)
  back-end: true        #(this enables charts with tag back-end)

标签和条件解析中描述了条件和标签的逻辑和顺序:

  • 条件(在值中设置时)总是覆盖标签。存在的第一个条件路径获胜,该图表的后续条件路径将被忽略。
  • 标签被评估为“如果图表的任何标签为真,则启用图表”。
  • 标签和条件值必须设置在最高父级的值中。
  • tags: key in values 必须是顶级键。全局变量和嵌套标签:当前不支持表格。

您还可以在命令行中设置标签和条件:

helm install --set tags.front-end=true --set subchart2.enabled=false

推荐阅读