【问题标题】:How to maintain a separate values file for a dependency Helm subchart that is shared with the parent chart?如何为与父图表共享的依赖 Helm 子图表维护单独的值文件?
【发布时间】:2021-09-12 08:03:20
【问题描述】:

我正在构建一个依赖于另一个图表的 Helm 图表(比如说,来自 bitnami repo 的“kafka”)。我在Chart.yaml 中声明了另一个图表作为依赖项:

dependencies:
- name: kafka
  version: 14.0.5
  repository: https://charts.bitnami.com/bitnami

现在我可以在我的values.yaml 的顶级kafka 部分中设置此依赖关系图的值。到目前为止,一切顺利。

如果我还需要使用相同的值独立运行“kafka”图表怎么办?假设我将它们提取到单独的kafka-values.yaml 中。在这种情况下,我可以在部署父图表时重复使用这个单独的文件吗?

我了解,如果我在部署父图表时简单地执行--values kafka-values.yaml,则这些值将附加到根范围而不是kafka 范围,并且“kafka”子图表将看不到它们。

【问题讨论】:

    标签: kubernetes-helm


    【解决方案1】:

    您完全正确,您可以创建一个额外的值文件以传递到您的图表中。因此,假设您使用一些值创建了 kafka-values.yaml 文件。如果您现在使用选项 --values kafka-values.yaml 安装您的父图表,则此文件现在将覆盖在您的掌舵图表内的 values.yaml 上。如果您只想安装 kafka 图表,现在也可以使用这个 kafka-values.yaml 来做同样的事情。

    一般来说,helm中的值叠加顺序遵循这个list的顺序。这意味着通过外部文件或单个值传递到图表中的任何值都将覆盖到图表中的 values.yaml 文件中。如果指定了相同的值,则 values.yaml 值将被覆盖。如果尚未在“较低优先级”中定义,则这些值将覆盖到图表的值中。

    编辑

    您尝试做的主要区别在于您的父图表的 kafka-values.yaml 需要在 kafka: 范围内缩进。

    【讨论】:

      【解决方案2】:

      如果您将某些内容列为图表的依赖项,Helm 将始终尝试将其安装到父图表。它不会在集群中的其他地方寻找另一个安装,也不会尝试从另一个 Helm 版本导入或导出值。

      您可能有理由希望将 Kafka 用作跨多个服务的消息传递或事件总线。在这种情况下,您不一定希望将 Kafka 绑定到单个服务;您可以在集群级别或专用硬件上安装它,或者使用它的云托管版本。这意味着您需要两件事:设置是否将 Kafka 作为依赖项安装,以及指向 Kafka 引导服务器的设置。

      # values.yaml
      
      # kafka has settings for the Kafka broker.
      kafka:
        # enabled indicates whether to install Kafka as part of this release.
        enabled: true
      
        # bootstrapServers is a comma-separated list of HOST:PORT indicating
        # the location of at least one known Kafka broker.  Only used if
        # enabled is false.
        bootstrapServers: ''
      

      在您的图表需求中,您可以specify a condition 使依赖项仅在设置值时安装:

      dependencies:
        - name: kafka
          version: ^14
          repository: https://charts.bitnami.com/bitnami
          condition: kafka.enabled     # <--- add this line
      

      最后,您需要使用模板逻辑将正确的 Kafka 地址传递给应用程序。

      env:
        - name: KAFKA_BOOTSTRAP_SERVERS
      {{- if .Values.kafka.enabled }}
          value: {{ .Release.Name }}-kafka:9092
      {{- else }}
          value: {{ .Values.kafka.bootstrapServers }}
      {{- end }}
      

      然后在安装图表时,您可以指定使用本地或远程 Kafka。

      helm install chart-with-local-kafka .
      # --set kafka.enabled=true  # on by default
      
      helm install chart-with-remote-kafka . \
        --set kafka.enabled=false \
        --set kafka.bootstrapServers=kafka.infra.example.com:9092
      

      【讨论】:

        猜你喜欢
        • 2019-04-10
        • 2020-09-11
        • 1970-01-01
        • 2019-08-15
        • 2020-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-31
        相关资源
        最近更新 更多