
# ConfigMap
ConfigMap是一种用于存储应用所需配置信息的资源类型，用于保存配置数据的键值对，可以用来保存单个属性，也可以用来保存配置文件。
通过ConfigMap可以方便地做到配置解耦，使得不同环境有不同的配置。
#### 创建ConfigMap
下面示例创建了一个名为configmap-test的ConfigMap，ConfigMap的配置数据在data字段下定义。
```
apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap-test
data:                     # 配置数据
  property_1: Hello
  property_2: World
```
 #### 在环境变量中引用ConfigMap
ConfigMap最为常见的使用方式就是在环境变量和Volume中引用。
例如下面例子中，引用了configmap-test的property_1，将其作为环境变量EXAMPLE_PROPERTY_1的值，这样容器启动后里面EXAMPLE_PROPERTY_1的值就是property_1的值，即"Hello"。
```
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx:alpine
    name: container-0
    resources:
      limits:
        cpu: 100m
        memory: 200Mi
      requests:
        cpu: 100m
        memory: 200Mi
    env:
    - name: EXAMPLE_PROPERTY_1
      valueFrom:
        configMapKeyRef:          # 引用ConfigMap
          name: configmap-test
          key: property_1
  imagePullSecrets:
  - name: default-secret
```
#### 在Volume中引用ConfigMap
在Volume中引用ConfigMap，就是通过文件的方式直接将ConfigMap的每条数据填入Volume，每条数据是一个文件，键就是文件名，键值就是文件内容。
如下示例中，创建一个名为vol-configmap的Volume，这个Volume引用名为"configmap-test"的ConfigMap，再将Volume挂载到容器的"/tmp"路径下。Pod创建成功后，在容器的"/tmp"路径下，就有两个文件property_1和property_2，它们的值分别为"Hello"和"World"。
```
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx:alpine
    name: container-0
    resources:
      limits:
        cpu: 100m
        memory: 200Mi
      requests:
        cpu: 100m
        memory: 200Mi
    volumeMounts:
    - name: vol-configmap           # 挂载名为vol-configmap的Volume
      mountPath: "/tmp"
  imagePullSecrets:
  - name: default-secret
  volumes:
  - name: vol-configmap
    configMap:                      # 引用ConfigMap
      name: configmap-test
```
