我正在使用配置映射将环境变量注入(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/