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