【发布时间】: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