读取为环境变量

从ConfigMap中读取配置数据为环境变量时,可以从中读取单个条目,也可以一次性读取所有条目。

读取为环境变量,不需要将ConfigMap挂载为卷,直接在配置文件中将其中的配置数据传入容器的环境变量中即可。

读取单个条目

在Pod的配置文件中,spec.containers.env.valueFrom.configMapKeyRef中可以指定读取的ConfigMap。

例如,为容器创建一个键为INTERVAL的环境变量,其值引用的是名为fortune-config的ConfigMap中的键为sleep-interval的条目的值:

apiVersion: v1
kind: Pod
metadata:
  name: fortune-env-from-configmap
spec:
  containers:
  - name: html-generator
    image: luksa/fortune:env
    env:    # 配置容器的环境变量
    - name: INTERVAL    # 环境变量的Key
      valueFrom: # 配置环境变量的Value
        configMapKeyRef:    # 从ConfigMap中读取数据
          name: fortune-config    # ConfigMap的名字
          key: sleep-interval    # (必须)ConfigMap中的条目的key,将key为sleep-interval的条目的value,作为容器的Key为INTERVAL的环境变量的Value

读取所有条目

在Pod的配置文件中,spec.containers.envFrom.configMapRef中可以指定读取的ConfigMap,它会将指定的ConfigMap中的所有条目都读入容器中,其Key和Value与ConfigMap中的条目一致。

如果ConfigMap中某键名不符合环境变量的键名格式,那么在创建环境变量时,会自动忽略对应的条目。

例如,容器从名为fortune-config的ConfigMap中读取所有条目作为环境变量:

apiVersion: v1
kind: Pod
metadata:
  name: fortune-env-from-configmap
spec:
  containers:
  - name: html-generator
    image: luksa/fortune:env
    envFrom:    # 配置容器的环境变量
    - configMapKeyRef:    # 从ConfigMap中读取数据
        name: fortune-config    # ConfigMap的名字

通过指定spec.containers.envFrom.prefix可以为读入的所有环境变量添加前缀,比如ConfigMap中包含键为FOOBAR的两个条目,那么可以通过下面这种方式添加前缀CONFIG_,令读入容器中的环境变量变成CONFIG_FOOCONFIG_BAR

spec:
  containers:
  - envFrom:
    - prefix: CONFIG_    # 为读入的环境变量添加前缀CONFIG_
      configMapKeyRef:
        name: fortune-config

Last updated

Was this helpful?