Kubernetes-配置映射模板变量

时间:2019-01-24 16:13:01

标签: kubernetes

我在Pod(或配置映射)中有两个环境变量:
-TARGET_URL=http://www.example.com
-TARGET_PARAM=param

我有什么办法提供从这两个变量派生的第三个env变量,类似${TARGET_URL}/mysite/${TARGET_PARAM}

谢谢!

3 个答案:

答案 0 :(得分:2)

如果没有第3方工具,我认为现在不可能实现。关于api ref,它在YAML中不支持多变量。但我将向您介绍第3方工具-Helm

可以使用Helm实现。您的模板如下所示:

 containers:
    - name: {{.Values.Backend.name }}
      image: "{{ .Values.Backend.image.repository }}:{{ .Values.Backend.image.tag }}"
      imagePullPolicy: "{{ .Values.Backend.image.pullPolicy }}"
      args:
        - name: TARGET_URL
          value: {{ .Value.URL}}
        - name: TARGET_PARAM
          value: {{ .Value.PARAM}}
        - name: URL
          value: {{ .Value.URL }}/mysite/{{ .Value.PARAM}}

,您将为文件values.yamlTARGET_URL添加文件TARGET_PARAM

URL: http://www.example.com
PARAM: param          

答案 1 :(得分:1)

对于环境变量(以及Pod规范中的其他两个字段,包括argscommand),有一个类似于Make的$(VARIABLE)名称将被扩展;例如参见the documentation for .env.value。可能看起来像:

env:
  - name: TARGET_URL
    valueFrom:
      configMapKeyRef:
        key: cm
        name: TARGET_URL
  - name: TARGET_PARAM
    valueFrom:
      configMapKeyRef:
        key: cm
        name: TARGET_PARAM
  - name: TARGET_DETAIL_URL
    value: $(TARGET_URL)/mysite/$(TARGET_PARAM)

如果要依靠文件将ConfigMap挂载到容器中,则它只能包含静态内容;否则,它只能包含静态内容。这个把戏行不通。

答案 2 :(得分:0)

您可以使用可以在docker入口点调用的初始化脚本来进行操作。