TL; 博士

完整版本
我正在为接受的应用程序编写部署规范
它在启动时从环境变量配置。某些
环境变量是从其他变量派生出来的。如果我设置
它们作为要在应用程序启动时获取的文件,我只想
做:

[me@myserver ~]$ cat ./myenv.sh
export FOO=foo
export BAR=bar
export FOOBAR=$FOO$BAR
[me@myserver ~]$ . ./myenv.sh
[me@myserver ~]$ printenv FOOBAR
foobar
但是,通过引用在 ConfigMap 中执行此操作的类似方法
先前定义的键值对不起作用(请参阅示例 ConfigMap
和 Pod,如下)。结果如下:
[me@myserver ~]$ kubectl create -f my-app-config.yaml -f my-app-pod.yaml
configmap "my-app" created
pod "my-app" created
[me@myserver ~]$ kubectl exec -it my-app -- printenv | grep MY_CONFIGMAP
MY_CONFIGMAP_FOO=foo
MY_CONFIGMAP_FOOBAR=$(MY_CONFIGMAP_FOO)$(MY_CONFIGMAP_BAR)
MY_CONFIGMAP_BAR=bar
MY_CONFIGMAP_FOOBAR 的期望值是 foobar
我试图交叉应用以下说明
Use ConfigMap-defined environment variables in Pod commands
从文档:

但是,这显然不起作用,我一直无法找到
在我的研究中回答。
我怀疑我已经知道答案了,但是有没有办法完成
这?
MCVE
配置映射
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-app

data:
  MY_CONFIGMAP_FOO: foo
  MY_CONFIGMAP_BAR: bar

  # Desired concatenation would be `foobar`
  MY_CONFIGMAP_FOOBAR: $(MY_CONFIGMAP_FOO)$(MY_CONFIGMAP_BAR)
apiVersion: v1
kind: Pod
metadata:
  name: my-app

spec:
  containers:
  - name: my-app
    image: alpine
    imagePullPolicy: IfNotPresent
    envFrom:
      - configMapRef:
          name: my-app

    command:
      - /bin/sh

    args:
      - -c
      - "while true; do sleep 3600; done"
尾声:二十九个月后
在与 Kubernetes 合作两年半之后,我的最终解决方案(和建议)是使用 Helm 图表,最好使用 Ansible 管理的部署。

最佳答案

您可以借助此工具实现预期结果: envsubst

按照以下方式创建 ConfigMap

envsubst < my-app-config.yaml | kubectl apply -f -

现在,ConfigMap 上的所有环境变量都将替换为已解析的值。

关于docker - Kubernetes:引用先前定义的 ConfigMap 键值对,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53228090/

10-13 05:37