Kubernetes ConfigMap:从文件导入多个值而不是一个?

时间:2017-04-03 14:55:52

标签: kubernetes

从文件创建新的ConfigMap:
kubernetes create configmap foo --from-file=foo

这就是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

因此,pod中的echo $foo命令返回:
VAR1=value1 VAR2=value2

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

以某种方式将该文件的值作为单独的env变量VAR1VAR2VAR3等提供给pod的创意方式(以及正确的位置)是什么? 。?

1 个答案:

答案 0 :(得分:3)

对于Kubernetes的当前版本(1.6.x),这是不可能的。正如kubectl create configmap envFrom中所写:

  

- from-file:可以使用文件路径指定密钥文件,在这种情况下,文件basename将用作configmap密钥,或者可选地使用密钥和文件路径,在这种情况下将使用给定的密钥。指定目录将迭代其basename为有效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" ' ')"

要保留文件,您可以将文件转换为某些东西,然后运行此命令,如下所示:

VAR1

除此之外,查看offical documentation之类的优秀提案也值得您花时间。

还要关注变量命名。 iirc VAR2var vTicketType; vTicketType = prompt(" What type of Tickets is required?"); document.write("The Ticket Type is: " + vTicketType); var vTicketQty; var vTicketQty = parseInt(vTicketQty); vTicketQty = prompt("How many Tickets are required?"); document.write("<br/>"); document.write("The Ticket Qty is: " + vTicketQty); document.write("<br/>"); if (vTicketQty < 0) { document.write("Invalid Qty"); document.write("<br/>"); } function calcPrice(vTicketPrice) { var vTicketPrice; if (vTicketType.toLowerCase() == "a") { document.write("Ticket cost is:$100"); vTicketPrice = 100; } else if (vTicketType.toLowerCase() == "b") { document.write("Ticket cost is:$75"); vTicketPrice = 75; } else if (vTicketType.toLowerCase() == "c") { document.write("Ticket cost is:$50"); vTicketPrice = 50; } else { document.write("-1"); vTicketPrice = -1; } } function calcTotal(vTotalPayment) { var vTotalPayment; if (vTotalPayment > 0) { document.write("<br/>" + "Total payment required is: $" + vTotalPayment); } else { document.write("<br/>" + "Invalid data supplied"); } }不是有效的属性名称 - 它们必须是小写的,这可能会在传递它们时引起一些问题。