【问题标题】:kubernetes, parametrize env var after |- operandkubernetes,在 |- 操作数之后参数化 env var
【发布时间】:2020-07-15 14:59:14
【问题描述】:

我有一个包含以下内容的 yaml 文件:

...
volumeMounts:
      - mountPath: /var/lib/grafana
        name: grafana-storage
      - mountPath: /etc/grafana/provisioning/datasources
        name: grafana-datasources
        readOnly: false
...

并且指定了 grafana-datasource 卷中的另一个文件:

apiVersion: v1
kind: ConfigMap
metadata:
    name: grafana-datasources
    namespace: ccx-data-pipeline
    labels:
        grafana_datasource: '1'
data:
    prometheus.yaml: |-
        {
            "apiVersion": 1,
            "datasources": [
                {
                    "access":"proxy",
                    "editable": true,
                    "name": "prometheus-ccx-service",
                    "orgId": 1,
                    "type": "prometheus",
                    "url": "http://prometheus-service:9090",
                    "version": 1
                }
            ]
        }

重点是

"url": "http://prometheus-service:9090" 

不能硬编码,但必须参数化(最好使用环境变量)。这样做会很棒:

"url": "${ENDPOINT}"

但它不起作用,可能是由于 |- 语法。有没有一种优雅的方法来实现这一点?

【问题讨论】:

  • Kubernetes 和 Prometheus 都不支持 ${} 语法。与|-无关;对于 YAML,它只是普通的内容。

标签: kubernetes configuration environment-variables yaml config


【解决方案1】:

直接在 Kubernetes 中是不可能的。 ConfigMap 将底层文件视为通用 data 类型并且无法对其进行模板化,因为它无法识别其类型(.yaml、.conf 等)

你可以做什么:

  1. 提前对您的 .yaml 文件应用某种模板(例如通过 Jinja2 模板)
  2. 根据您的环境(staging、prod)从不同的文件生成不同的 ConfigMap。
  3. 使用kustomize动态生成ConfigMap

【讨论】:

    猜你喜欢
    • 2021-02-28
    • 2017-08-30
    • 2020-01-12
    • 1970-01-01
    • 2016-02-24
    • 2022-12-26
    • 2012-03-04
    • 1970-01-01
    • 2012-01-07
    相关资源
    最近更新 更多