【问题标题】:Kubernetes Helm chart requirements.yaml file dependencies false conditionKubernetes Helm 图表 requirements.yaml 文件依赖项 false 条件
【发布时间】:2022-05-19 10:59:57
【问题描述】:

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

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

values.yaml

external_apache:
  enabled: false

文件 requirements.yaml

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

如何添加错误条件?

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

condition: external_apache.enabled == false

【问题讨论】:

  • 正确的语法是condition: external_apache.enabled,但你确定文件是从 values.yaml 中获取值吗?
  • 是的。从 values.yaml 文件中获取值。这里我试图读取 enabled: false 条件 if enabled: true 然后我们可以使用 use condition: external_apache.enabled
  • 这里我验证了两个条件。 1. if enabled: false --- 添加一些依赖项 2. if enabled: true --- 添加一些其他的sendencies 但是当启用时我没有得到正确的语法: 假
  • 我在尝试安装图表时也遇到了完全相同的错误问题。 Error: found in requirements.yaml, but missing in charts/ directory: subchart1helm的版本是v2.11.0

标签: kubernetes kubernetes-helm


【解决方案1】:

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

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

Unable to use condition in 'requirements.yaml' #2111

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

Helm 2 to Helm 3 upgrade note:

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

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

Helm documentationrepository 中,有一个条件如何工作的解释: (我添加了一些 cmets 让阅读更容易)

Condition - 条件字段包含一个或多个 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 中并解析为布尔值,则图表将根据该布尔值启用或禁用。 仅评估列表中找到的第一个有效路径,如果不存在路径,则条件无效

在top parent的values中,所有带有tags的图表都可以通过指定tag和一个布尔值来启用或禁用。

# 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 and Condition Resolution中描述:

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

你也可以在命令行中设置标签和条件:

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

【讨论】:

    【解决方案2】:

    Helm 版本 v2.2.2 有效,而 v2.10.0 无效。

    【讨论】:

      【解决方案3】:

      根据documentation 和@VAS 的回答,您的问题的答案是不可能在requirements.yaml 中使用否定条件

      【讨论】:

        【解决方案4】:

        虽然有点晚了,但用户可能会觉得它很有帮助。我没有从命令行为父图表运行 helm install,但是,我有一个用于运行它的 shell 脚本和另一个用于环境属性的 shell 脚本。

        我已在环境脚本中将条件布尔值设置为 true 或 false,并使用为父 helm 图表运行 helm 的其他脚本中的值,我已在父值中设置了单个子图表 enabled 属性.yaml。

        此外,在 3.0.0+ 版本中,之前完成的配置 requirements.yaml 现在在父级的 chart.yaml 本身中完成。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-11
          • 2019-04-10
          相关资源
          最近更新 更多