Kubernetes:pod启动时从文件中提取环境变量
我想知道我是否能够从文件中传播环境变量 我想我有一个这样的文件:Kubernetes:pod启动时从文件中提取环境变量,kubernetes,Kubernetes,我想知道我是否能够从文件中传播环境变量 我想我有一个这样的文件: ENV_VARIABLE_USERNAME=username ENV_VARIABLE_PASSWORD=password 我希望在pod启动时,该内容文件作为环境变量传播 有可能吗?我使用j2cli和Jinja模板来显示Kubernetes清单。清单以Jinja模板的形式编写,j2cli可以为我传递环境变量: j2 --format=env config.j2 data.env 一般来说,对于环境变量,您可以通过config
ENV_VARIABLE_USERNAME=username
ENV_VARIABLE_PASSWORD=password
我希望在pod启动时,该内容文件作为环境变量传播
有可能吗?我使用
j2cli
和Jinja模板来显示Kubernetes清单。清单以Jinja模板的形式编写,j2cli可以为我传递环境变量:
j2 --format=env config.j2 data.env
一般来说,对于环境变量,您可以通过configMap来实现。但由于这是一个用户名和密码(敏感信息),您可以通过一个秘密来实现 例如,给定Pod(本例中为redis)和下面的秘密:
apiVersion: v1
kind: Secret
metadata:
name: credentials
type: Opaque
data:
username: dXNlcm5hbWU= //username -> encoded base64
password: cGFzc3dvcmQ= //password -> encoded base64
注意:您需要对所有数据进行秘密编码。这个是用base64编码的:
echo -n username | base64
豆荚:
apiVersion: v1
kind: Pod
metadata:
name: redis-pod
spec:
containers:
- name: redis
image: redis
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: credentials
key: username
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: credentials
key: password
restartPolicy: Never
现在,如果您在pod中运行env | grep SECRET
,我将正确初始化变量:
nerus:~/workspace (master) $ kubectl exec redis-pod env | grep SECRET
SECRET_USERNAME=username
SECRET_PASSWORD=password
如果Kubernetes版本高于1.6,则可以将文件配置为ConfigMap:
kubectl创建configmap yourconfigmap--from env file=YOUR_env_文件
然后在中使用configmap的内容
您介意提供如何在我的规范文件中使用此指令吗?
您的_ENV_文件可以是容器文件系统上的文件。后面的envFrom是configmap或secret ref您的_ENV_文件
位于容器外部,并通过configMap
或secret
像suren的show一样作为环境变量注入容器中。
apiVersion: v1
kind: Pod
metadata:
name: yourpod
spec:
containers:
- name: test-container
image: yourimage
command: [ "/bin/sh", "-c", "env" ]
envFrom:
- configMapRef:
name: yourconfigmap
restartPolicy: Never