【问题标题】:Unable to interpolate environment variable inside POD via the helm chart for stable/elasticsearch-curator无法通过稳定/elasticsearch-curator 的 helm 图表在 POD 内插入环境变量
【发布时间】:2019-11-27 10:22:44
【问题描述】:

我正在尝试为我的自定义麋鹿堆栈制作掌舵图。我使用 stable/elasticsearch-curator 图表作为依赖项。

在我的 values.yaml 文件中,我使用了一些环境变量来传递 elasticsearch 主机:

esClusterName: &esClusterName "elasticsearch-logs"

...

elasticsearch-curator:

  env:
    ES_CLUSTER_NAME: *esClusterName
    ELASTICSEARCH_HOST: $(ES_CLUSTER_NAME)-master

  configMaps:

    config_yml: |-
      ---
      client:
        hosts:
          - ${ELASTICSEARCH_HOST}
        port: 9200

但变量未正确插值,如此错误消息所示:

HTTP N/A error: HTTPConnectionPool(host='$(es_cluster_name)-master', port=9200): Max retries exceeded with ...

在我的 pod 中,ELASTICSEARCH_HOST = '$(es_cluster_name)-master' -- 以小写形式表示的变量名称字符串和“-master” -- 而不是 "elasticsearch-logs-master"

我不能把头绕在这上面。我对其他依赖项使用了相同的技术——环境变量插值——并且它有效。

我看到的唯一区别是 elasticsearch-curator 的掌舵图传递环境变量的方式与其他图表不同:

# stable/elasticsearch-curator/templates/cronjob.yaml(文件为here

            env:
{{- if .Values.env }}
{{- range $key,$value := .Values.env }}
              - name: {{ $key | upper | quote}}
                value: {{ $value | quote}}
{{- end }}
{{- end }}

这个模板期望值像这样在 values.yaml 中传递:(文件是here

env:
  MY_ENV_VAR: value1
  MY_OTHER_VAR: value2

而所有其他模板都使用这种方式:(exemple file)

        env: {{ toYaml .Values.extraEnvs | nindent 10 }}

使用 values.yaml 像这样:(exemple file)

extraEnvs: 
  - name: MY_ENVIRONMENT_VAR
    value: the_value_goes_here

但我不确定这种差异是否能解释我的问题。所以我的问题是:我该如何让它发挥作用?

【问题讨论】:

  • 您不能将环境变量放入values.yaml。您必须在 helm 命令行中指定它们。
  • @Flimzy 我知道,这就是为什么我不将变量放在我的 values.yaml 文件中的原因。相反,我使用 YAML ANCHORS 传递给一个 env 变量,该变量被插在另一个 env 变量 INSIDE MY POD 中。它适用于我所有的其他推车。只是没有这个。我不使用 helm 命令行传递它们的原因是它是一个伞形图表,必须将相似的值传递给许多依赖项。使用命令行会破坏此图表的用途。
  • 面临同样的问题。通过重命名变量来修复,因此如果它们按字母顺序排列,k8s 可能会以正确的顺序解析它们。我有 ENV=dev 和 DBHOST=$(ENV)-example-com。使用 Helm DBHOST 自动排序后,首先无法解析 ENV,因此我需要将变量重命名为 HOST,例如。可能应该有任何规则可以对 helm 中的 envs 进行排序,但我没有找到。

标签: environment-variables kubernetes-helm elasticsearch-curator


【解决方案1】:

我将ELASTICSEARCH_HOST 替换为ES_HOST,如下所示:

elasticsearch-curator:

  env:
    ES_CLUSTER_NAME: *esClusterName
    ES_HOST: $(ES_CLUSTER_NAME)-master

  configMaps:

    config_yml: |-
      ---
      client:
        hosts:
          - ${ES_HOST}
        port: 9200

而且效果很好!

我认为这是因为解析 values.yaml 时,env: 对象中的键按字母顺序排序:

env: {
  ELASTICSEARCH_HOST: $(ES_CLUSTER_NAME)-master
  ES_CLUSTER_NAME: "elasticsearch-logs"
}

然后,当 pod 尝试在 ELASTICSEARCH_HOST 中插入 ES_CLUSTER_NAME 的值时,它不起作用,因为它还不知道 ES_CLUSTER_NAME 的值。

如果能得到确认(或确认),那就太好了。

【讨论】:

    猜你喜欢
    • 2018-09-21
    • 2020-02-25
    • 2021-09-15
    • 1970-01-01
    • 2020-07-08
    • 2022-08-17
    • 2018-09-30
    • 1970-01-01
    • 2020-10-20
    相关资源
    最近更新 更多