2

我目前正在做一个需要设置更多(大约 20 个)环境变量的项目。

现在这些变量应该与 pod 内的多个容器共享。我正在使用 Configmap 来定义值。现在我的问题是这个。我必须单独设置每个环境变量,并且还必须为每个容器都这样做,这非常丑陋并且有很多不必要的代码。基本上它看起来像这样

kind: Pod
apiVersion: v1
...
containers:
- name: container1
  image: my-image:latest
  env:
  - name: VAR1
    valueFrom:
      configMapKeyRef:
        name: my-config
        key: my-var1
    ...
- name: container2
  image: some-other-image:stable
  env:
  - name: VAR1
    valueFrom:
      configMapKeyRef:
        name: my-config
        key: my-var1
    ...

我想要的是自动将我的 configMap 中的所有值和环境变量添加到容器中。我的第一种方法是将 configMap 挂载为卷,然后在启动时运行 shell 脚本。与此类似

配置映射

kind: ConfigMap
apiVersion: v1
...
data:
  envCat.sh: |
    #!/bin/sh
    export $(grep -v '^#' /etc/pod-config/envVars | xargs)
    cat
  envVars
    MY_VAR1="HELLO WORLD!!"
    MY_VAR2="I AM HERE"

kind: Pod
apiVersion: v1
...
spec:
  volumes:
  - name: config-volume:
    configMap:
      name: my-config
  containers:
  - name: container1
    image: my-image:latest
    volumeMounts:
    - name: config-volume
      mountPath: /etc/pod-config
    command:
    - /etc/pod-config/envCat.sh

不幸的是,当我在容器中手动运行导出命令但运行 shell 脚本或运行 /bin/sh /etc/pod-config/envCat.sh 时,导出命令工作得很好。

有什么建议可以实现我想做的吗?

4

1 回答 1

6

您应该使用 envFrom 将所有键:值对加载为容器内的环境变量

于 2019-03-12T18:01:33.123 回答