如何在OpenShift的YAML块折叠标识中引用ConfigMap值?
正确在Deployment折叠块环境变量中引用ConfigMap值的方法
问题场景
现有如下ConfigMap存储配置值:
kind: ConfigMap apiVersion: v1 metadata: name: my-service namespace: my-namespace labels: app: my-service data: SPECIAL_NAME: Tom
需要在Deployment的容器环境变量USERS(使用块折叠标识>-定义的多行字符串)中引用SPECIAL_NAME的值,但直接写变量名或单独定义环境变量的方式均无效。
正确配置方法
通过先加载ConfigMap为容器环境变量,再在折叠块中用变量引用语法实现:
kind: Deployment apiVersion: apps/v1 metadata: namespace: my-namespace labels: app: my-service spec: selector: matchLabels: app: my-service template: metadata: labels: app: my-service spec: containers: - name: my-service image: 'myservice.myrepo.com/my-service:latest' env: # 从ConfigMap加载SPECIAL_NAME为容器级环境变量 - name: SPECIAL_NAME valueFrom: configMapKeyRef: name: my-service key: SPECIAL_NAME # 在折叠块字符串中用$(变量名)引用已加载的环境变量 - name: USERS value: >- -javaagent:/opt/project/javaagent.jar -Users.exist=true -Users.first=John -Users.specialone=$(SPECIAL_NAME) ...
原理说明
- Kubernetes支持在环境变量值中使用
$(VAR_NAME)语法引用其他已定义的环境变量,Pod启动时会自动完成变量替换。 - 之前的错误原因:
- 直接在折叠块中写
SPECIAL_NAME,Kubernetes不会自动识别为ConfigMap中的键,只会当作普通字符串处理。 - 单独定义
Users.specialone环境变量,该变量与USERS变量相互独立,不会合并到USERS的多行字符串中。
- 直接在折叠块中写
内容的提问来源于stack exchange,提问作者DAA
相关产品推荐
相关产品推荐

