容器无法识别以环境变量传递的ConfigMap键值对问题咨询
解决方案
问题根源
你当前用Kustomize的files字段生成ConfigMap时,config1.properties会被当作ConfigMap的单个键,对应的值是文件的全部内容。所以容器里的map-envs变量存的是整个文件的文本,自然无法直接通过$JIN读取单独的键值对。
步骤1:修正Kustomize的ConfigMap生成配置
把configMapGenerator里的files换成env,这样Kustomize会自动解析properties文件里的键值对,生成对应多个键的ConfigMap:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - k8s.yaml configMapGenerator: - name: map1 env: config1.properties # 替换原来的files字段
执行kustomize build后,生成的ConfigMap会包含JIN、RUM、WHISKY三个独立的键,而非单个config1.properties键。
步骤2:修正Deployment的环境变量配置
有两种方式导入这些环境变量:
方式一:批量导入所有ConfigMap键为环境变量
如果想把ConfigMap里的所有键都转为容器的环境变量,用envFrom字段:
containers: - name: your-container-name envFrom: - configMapRef: name: map1-kt62t9247m # 注意名称要和Kustomize生成的一致,带哈希后缀
这样容器里会直接出现JIN、RUM、WHISKY三个环境变量,直接用echo $JIN就能输出值,Node.js也能通过process.env.JIN读取。
方式二:逐个指定需要导入的键
如果只需要导入部分键,用configMapKeyRef逐个配置:
containers: - name: your-container-name env: - name: JIN valueFrom: configMapKeyRef: name: map1-kt62t9247m key: JIN - name: RUM valueFrom: configMapKeyRef: name: map1-kt62t9247m key: RUM
验证
重新部署后,进入容器执行env命令,就能看到JIN、RUM这些单独的环境变量,执行echo $JIN会输出bombay,Node.js应用也能正常读取process.env.JIN。
内容的提问来源于stack exchange,提问作者Omer Meister
相关产品推荐
相关产品推荐

