2017-04-03 65 views
3

创建从一个文件的新ConfigMap:
kubernetes create configmap foo --from-file=fooKubernetes ConfigMap:从文件中导入多个值而不是一个值?

这是ConfigMap内部的样子: kubernetes get configmaps foo -o yaml

apiVersion: v1 
data: 
    foo: | 
    VAR1=value1 
    VAR2=value2 

然后,我用这个ConfigMap在容器中创建一组环境变量:

apiVersion: v1 
kind: Pod 
metadata: 
    labels: 
    name: app 
    name: app 
spec: 
    containers: 
    - name: app-server 
     image: app:latest 
     ports: 
     - containerPort: 3000 
     envFrom: 
     - configMapRef: 
      name: foo 
     command: ["/bin/bash", "-c", "printenv"] 

当容器命令运行时,我看到下列输出为printenv

foo=VAR1=value1 
VAR2=value2 

因此,在群返回一个echo $foo命令:
VAR1=value1 VAR2=value2

根据与--from-file的文档ConfigMap,这是预期的行为。

会是怎样一种创新的方式(和合适的地方),以某种方式获得该文件的提供给吊舱作为单独的ENV变量的值VAR1VAR2VAR3等?

回答

3

对于Kubernetes的当前版本(1.6.x),这是不可能的。由于写在offical documentationkubectl create configmap

--from文件:密钥文件可以使用其的文件路径来指定,在这种情况下文件名前缀将被用作configmap键,或任选地用密钥和文件路径,在这种情况下将使用给定的密钥。指定一个目录将迭代基本名称是有效configmap键的目录中的每个指定文件。

当你想创造出这样使用,作为envFrom容器配置输入configmap你可以与--from-literal选项像这样创建:

kubectl create configmap foo --from-literal=var1=value1 --from-literal=var2=value2 

仍然保持静止的文件,您可以将您的文件转换成出头,然后运行这个命令是这样的:

eval "kubectl create configmap foo $(cat foo.txt | sed -e 's/^/--from-literal=/' | tr "\n" ' ')" 

伴随着,也许像检查的优秀提案--flatten flag proposal on Github值得你花时间。

还要留意变量命名。 iirc VAR1VAR2不是有效的属性名称 - 它们必须是小写字母,在传递它们时可能会导致一些问题。

+0

是的! '--flatten'标志将是理想的。它完全描述了用例。 – changingrainbows

相关问题