docker - Kubernetes:如何从 configmap 扩展环境变量

标签 docker kubernetes

我正在使用配置映射将环境变量注入(inject)到我的容器中。一些变量是通过连接变量创建的,例如:

~/.env 文件

HELLO=hello
WORLD=world
HELLO_WORLD=${HELLO}_${WORLD}

然后我创建配置图
kubectl create configmap env-variables --from-env-file ~/.env
部署 list 引用配置映射。
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: my-app
spec:
  template:
    spec:
      containers:
      - name: my-image
        image: us.gcr.io/my-image
        envFrom:
        - configMapRef:
            name: env-variables

当我执行到我正在运行的 pod 中并执行命令时
$ printenv HELLO_WORLD
我希望看到 hello_world ,但我看到 ${HELLO}_${WORLD} .变量没有展开,因此我引用这些变量的应用程序将获得未展开的值。

如何确保变量得到扩展?

如果重要的话,我的图像使用的是 alpine。

最佳答案

我找不到任何关于插值环境变量的文档,但我能够通过从 configmap 中删除插值变量并将其直接在部署中列出来使其工作。如果所有变量都直接在部署中列出,它也可以工作。看起来 kubernetes 没有对从配置映射加载的变量应用插值。

例如,这将起作用:

配置图

apiVersion: v1
data:
  HELLO: hello
  WORLD: world
kind: ConfigMap
metadata:
  name: env-variables
  namespace: default

部署:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: my-app
spec:
  template:
    spec:
      containers:
      - name: my-image
        image: us.gcr.io/my-image
        envFrom:
        - configMapRef:
            name: env-variables
        env:
        - name: HELLO_WORLD
          value: $(HELLO)_$(WORLD)

关于docker - Kubernetes:如何从 configmap 扩展环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52013185/

相关文章:

docker - 为什么当我创建它的节点被杀死时,Kafka 分布式连接器就会死亡?

docker - 为什么我的 docker container apache 服务会在每次附加我的容器然后退出时关闭?

Docker 在 Kubernetes 中使用 docker 私有(private)注册表拉取没有 ssl 的镜像

kubernetes - 如何使kubernetes cronjob从文件夹中识别ssh key

java - Spring 执行器的活跃度和就绪度正在恢复 404

kubernetes - kube-dns getsockopt 没有路由到主机

go - 我有一个在 Kubernetes 上运行的 Golang 应用程序,但是当 pod 死亡时根本没有错误消息。我应该怎么办?

kubernetes - Pod 无限期地停留在 PodInitializing 状态

docker - 从外行的角度理解 docker

docker - 如何在 docker overlay 网络创建期间避免竞争条件?