我正在使用配置映射将env变量注入到我的容器中。一些变量是通过串联变量来创建的,例如:
〜/ .env文件
import requests
base_url = "http://status.aws.amazon.com/"
response = requests.get(base_url, timeout=30)
parser.feed(response.content) # assuming it wants bytes, not unicode
print response.text
然后我创建配置图
HELLO=hello
WORLD=world
HELLO_WORLD=${HELLO}_${WORLD}
部署清单参考配置映射。
kubectl create configmap env-variables --from-env-file ~/.env
当我执行我正在运行的Pod并执行命令时
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
我希望看到$ printenv HELLO_WORLD
,但是我看到hello_world
。变量没有扩展,因此引用这些变量的应用程序将获得未扩展的值。
如何确保变量得到扩展?
如果有问题,我的图像使用的是高山图像。
答案 0 :(得分:3)
我找不到任何有关插值环境变量的文档,但是我能够通过从configmap中删除插值变量并将其直接列出在部署中来使其工作。如果所有变量都直接在部署中列出,它也可以使用。看起来kubernetes不会将插值应用于从configmaps加载的变量。
例如,这将起作用:
配置映射
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)
答案 1 :(得分:1)
我正在考虑在创建configMap并上传到kubernetes之前先扩展变量
另一种并行方法是使用kustomize:
kustomize
使您可以自定义无模板的原始YAML文件,以实现多种目的,而原始的YAML则保持不变并可以使用。就像
make
,因为它所做的是在文件中声明,就像sed
,因为它发出已编辑的文本。
sed部分应该能够在yaml文件中生成正确的扩展值。