代码之家  ›  专栏  ›  技术社区  ›  Eric Guan

Kubernetes:如何从configmap扩展env变量

  •  2
  • Eric Guan  · 技术社区  · 7 年前

    我正在使用配置映射将env变量注入到容器中。一些变量是通过连接变量创建的,例如:

    ~/.env文件

    HELLO=hello
    WORLD=world
    HELLO_WORLD=${HELLO}_${WORLD}
    

    然后我创建配置映射

    kubectl create configmap env-variables --from-env-file ~/.env

    部署清单引用配置映射。

    apiVersion: apps/v1beta1
    kind: Deployment
    metadata:
      name: my-app
    spec:
      template:
        spec:
          containers:
          - name: my-image
            image: us.gcr.io/my-image
            envFrom:
            - configMapRef:
                name: env-variables
    

    当我执行到我运行的pods中,并执行命令时

    $ printenv HELLO_WORLD

    我想看看 hello_world 但是我看到了 ${HELLO}_${WORLD} . 变量没有展开,因此引用这些变量的应用程序将得到未展开的值。

    如何确保变量得到扩展?

    如果重要的话,我的图片是使用阿尔卑斯山。

    2 回复  |  直到 7 年前
        1
  •  3
  •   Grant David Bachman    7 年前

    我找不到任何关于插入环境变量的文档,但是我可以通过从configmap中删除插入的变量并将其直接列在部署中来实现这一点。如果所有变量都直接列在部署中,那么它也可以工作。看起来kubernetes不将插值应用于从configmap加载的变量。

    例如,这将起作用:

    配置映射

    apiVersion: v1
    data:
      HELLO: hello
      WORLD: world
    kind: ConfigMap
    metadata:
      name: env-variables
      namespace: default
    

    部署:

    apiVersion: apps/v1beta1
    kind: Deployment
    metadata:
      name: my-app
    spec:
      template:
        spec:
          containers:
          - name: my-image
            image: us.gcr.io/my-image
            envFrom:
            - configMapRef:
                name: env-variables
            env:
            - name: HELLO_WORLD
              value: $(HELLO)_$(WORLD)
    
        2
  •  1
  •   VonC    7 年前

    我正在考虑在创建configmap并上传到kubernetes之前扩展变量。

    另一种类似的方法是 kustomize :

    kustomize 允许您为多种目的自定义原始的、无模板的yaml文件,使原始yaml保持原样,并且可以继续使用。

    就像是 make ,它所做的是在一个文件中声明的,就像 sed ,以发出已编辑的文本。

    SED部分应该能够在yaml文件中生成正确的扩展值。

    推荐文章