1

我正在尝试为我的自定义麋鹿堆栈制作掌舵图。我使用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 = --a '$(es_cluster_name)-master'string of my variable in LOWERCASE and "-master"-- 而不是"elasticsearch-logs-master".

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

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

# stable/elasticsearch-curator/templates/cronjob.yaml (文件在这里

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

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

env:
  MY_ENV_VAR: value1
  MY_OTHER_VAR: value2

而所有其他模板都使用这种方式:(示例文件

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

使用 values.yaml 像这样:(示例文件

extraEnvs: 
  - name: MY_ENVIRONMENT_VAR
    value: the_value_goes_here

但我不确定这种差异是否能解释我的问题。所以我的问题是:我如何使它工作?

4

1 回答 1

3

我换成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 尝试插入ES_CLUSTER_NAMEinside的值时ELASTICSEARCH_HOST,它不起作用,因为它还不知道 的值ES_CLUSTER_NAME

很高兴能确认(或确认)这一点。

于 2019-11-27T13:07:27.230 回答