首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将环境变量的值分配给helm变量

问将环境变量的值分配给helm变量
EN

Stack Overflow用户
提问于 2020-07-13 13:40:41
回答 1查看 2.2K关注 0票数 1

我是新手,我希望能够使用配置映射和共享环境变量将gitlab项目变量写入文件。

我有一组环境变量定义为gitlab项目变量( gitlab运行程序将它们公开为环境变量),用于每个环境(为了简洁起见,<ENV>是DEV/TEST/PROD ):

代码语言:javascript
复制
MYSQL_USER_<ENV> = "user"
MYSQL_PASSWORD_<ENV> = "pass"

在掌舵图中,每个环境都有其变量的映射。例如,values..yaml包含:

代码语言:javascript
复制
envVars:
  MYSQL_USER: $MYSQL_USER_<ENV>
  MYSQL_PASSWORD: $MYSQL_PASSWORD_<ENV>

values.yaml包含一个Ruby,它将使用这些变量:

代码语言:javascript
复制
files:
  config.rb: |
    mysql['username'] = ENV["MYSQL_USER"]
    mysql['password'] = ENV["MYSQL_PASSWORD"]

configmap.env.yaml定义:

代码语言:javascript
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "mychart.fullname" . }}-config-env
data:
{{- range $config_key, $config_value := .Values.envVars }}
  {{ $config_key }}: {{ $config_value | quote | nindent 4 }}
{{- end }}

configmap.files.yaml定义:

代码语言:javascript
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "mychart.fullname" . }}-config-volume
data: 
{{- range $file_path, $file_content := .Values.files }}
  {{ $file_path }}: |
{{ $file_content | indent 4 -}}
{{- end }}

最后,配置映射的部署(这里只显示了配置映射部分,我在这里不使用秘密,因为这个问题足够长):

代码语言:javascript
复制
      volumes:
        - name: {{ include "mychart.fullname" . }}-config-volume
          configMap:
            name: {{ include "mychart.fullname" . }}-config-volume
      containers:
        - name: {{ .Chart.Name }}
          volumeMounts:
          - name: {{ include "mychart.fullname" . }}-config-volume
            mountPath: /etc/my-config-dir
          envFrom: 
            - configMapRef:
                name: {{ include "mychart.fullname" . }}-config-env

因此,在一句话中,工作流应该是:MYSQL_USER/PASSWORD_<ENV>保存到MYSQL_USER/PASSWORD中,然后将其写入/etc/my-config-dir/config.rb

我似乎无法使values.yaml (MYSQL_USER,MYSQL_PASSWORD)的环境变量获得项目变量(MYSQL_USER_<ENV>、MYSQL_PASSWORD_<ENV>)的值。我使用helm 3,但是{{ env "MYSQL_USER_<ENV>" }}失败了。我可以使用环境变量命名为Ruby文件的字符串内插,但是接下来我必须知道应该为每个容器创建什么样的环境变量。

我试图避免使用多个--set参数。我也不知道envsubst怎么能在这里被使用..。

任何帮助都将不胜感激,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-14 12:17:49

所以我最终使用了envsubst

代码语言:javascript
复制
  script:
    - VALUES_FILE=values.${ENV}.yaml
    - envsubst < ${VALUES_FILE}.env > ${VALUES_FILE}
    - helm upgrade ... -f ${VALUES_FILE}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62877126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档