如何动态传递env参数从values.yaml拉取数据生成不同环境ConfigMap
当然可以实现,通过Helm模板内置的index函数配合动态传参即可完成,具体操作如下:
步骤1:调整ConfigMap模板
使用index函数动态读取对应环境的配置,有两种写法可选:
写法1:逐个指定字段
适合需要筛选部分字段的场景:
apiVersion: v1 kind: ConfigMap metadata: name: "{{ .Values.service.name }}-configmap" data: ATTR1: "{{ index .Values.configMap.data .Values.env "ATTR1" }}" ATTR2: "{{ index .Values.configMap.data .Values.env "ATTR2" }}"
写法2:全量映射环境配置
不需要逐个写字段,自动同步values里的所有配置,更简洁:
apiVersion: v1 kind: ConfigMap metadata: name: "{{ .Values.service.name }}-configmap" data: {{- toYaml (index .Values.configMap.data .Values.env) | nindent 2 }}
步骤2:传入环境参数
有两种常用的参数传入方式:
- 执行helm命令时动态指定:
部署dev环境执行:helm install <你的release名称> <你的chart路径> --set env=dev
部署qa环境只需把参数改为--set env=qa即可。 - 在values.yaml配置默认值:
可以在values.yaml里新增默认环境配置,省去每次传参的麻烦:
需要切换环境时,仍然可以通过# values.yaml 新增默认配置 env: dev # 原有configMap配置保持不变 configMap: data: dev: ATTR1 : "Value1-dev" ATTR2 : "Value2-dev" qa: ATTR1 : "Value1-qa" ATTR2 : "Value2-qa"--set env=qa覆盖默认值。
内容的提问来源于stack exchange,提问作者Angshuman
相关产品推荐
相关产品推荐

