2017-04-03 29 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

相關問題