【发布时间】:2019-02-05 02:59:52
【问题描述】:
我在一个 pod(或一个配置映射)中有两个环境变量:
- TARGET_URL=http://www.example.com
- TARGET_PARAM=param
我有什么办法可以提供从这两个变量派生的第三个环境变量,例如${TARGET_URL}/mysite/${TARGET_PARAM}。
谢谢!
【问题讨论】:
标签: kubernetes
我在一个 pod(或一个配置映射)中有两个环境变量:
- TARGET_URL=http://www.example.com
- TARGET_PARAM=param
我有什么办法可以提供从这两个变量派生的第三个环境变量,例如${TARGET_URL}/mysite/${TARGET_PARAM}。
谢谢!
【问题讨论】:
标签: kubernetes
如果没有 3rd 方工具,我认为现在是不可能的。关于 api ref 它不支持 YAML 中的多变量。但是我会告诉你一个 3rd 方工具——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.yaml 中添加TARGET_URL 和TARGET_PARAM 的参数
URL: http://www.example.com
PARAM: param
【讨论】:
对于环境变量(以及 pod 规范中的其他几个字段,包括 args 和 command),有一个类似于 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 作为文件挂载到容器中,那么它只能包含静态内容;这招行不通。
【讨论】:
您可以使用可在 docker 入口点调用的初始化脚本。
【讨论】: