# 使用配置项
配置项创建后，可在工作负载环境变量、命令行参数和数据卷三个场景使用。
- [通过配置项设置工作负载环境变量]
- [通过配置项设置命令行参数]
- [使用配置项挂载到工作负载数据卷]
本节以下面这个ConfigMap为例，具体介绍ConfigMap的用法。
```
apiVersion: v1
kind: ConfigMap
metadata:
  name: cce-configmap
data:
  SPECIAL_LEVEL: Hello
  SPECIAL_TYPE: CCE
```
![](https://support.huaweicloud.com/usermanual-cce-autopilot/public_sys-resources/notice_3.0-zh-cn.png)
- 在工作负载里使用ConfigMap时，需要工作负载和ConfigMap处于同一集群和命名空间中。
- 以数据卷挂载使用ConfigMap时，当ConfigMap被更新，Kubernetes会同时更新数据卷中的数据。 对于以[subPath](https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#using-subpath)形式挂载的ConfigMap数据卷，当ConfigMap被更新时，Kubernetes无法自动更新数据卷中的数据。
  
- 以环境变量方式使用ConfigMap时，当ConfigMap被更新，数据不会被自动更新。 更新这些数据需要重新启动Pod。
 
 #### 通过配置项设置工作负载环境变量
**使用控制台方式**
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧导航栏选择"工作负载"，单击右上角"创建工作负载"。 
   在创建工作负载时，在"容器配置"中找到"环境变量"，单击"新增变量"。
   - **配置项导入** ：选择一个配置项，将配置项中所有键值都导入为环境变量。
     ![](https://support.huaweicloud.com/usermanual-cce-autopilot/zh-cn_image_0000001961222262.png "点击放大")
     
   
   - **配置项键值导入** ：将配置项中某个键的值导入作为某个环境变量的值。
     - 变量名称：工作负载中的环境变量名称，可自定义，默认为配置项中选择的键名。
     
     - 变量/变量引用：选择一个配置项及需要导入的键名，将其对应的值导入为工作负载环境变量。
     
     
     例如将cce-configmap这个配置项中"SPECIAL_LEVEL"的值"Hello"导入，作为工作负载环境变量"SPECIAL_LEVEL"的值，导入后容器中有一个名为"SPECIAL_LEVEL"的环境变量，其值为"Hello"。
     ![](https://support.huaweicloud.com/usermanual-cce-autopilot/zh-cn_image_0000001997623193.png "点击放大")
     
   
   
   
   
3. 配置其他工作负载参数后，单击"创建工作负载"。 
   等待工作负载正常运行后，您可[登录容器](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_00356.html)执行以下语句，查看该配置项是否已被设置为工作负载的环境变量。
   ```
   printenv SPECIAL_LEVEL
   ```
   示例输出如下：
   ```
   Hello
   ```
   
   
**使用kubectl方式**
1. 请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0107.html)配置kubectl命令。
2. 创建并编辑nginx-configmap.yaml文件。 
   **vi nginx-configmap.yaml**
   YAML文件内容如下：
   - **配置项导入** ：如果要将一个配置项中所有数据都添加到环境变量中，可以使用envFrom参数，配置项中的Key会成为工作负载中的环境变量名称。
     ```
     apiVersion: apps/v1
     kind: Deployment
     metadata:
       name: nginx-configmap
     spec:
       replicas: 1
       selector:
         matchLabels:
           app: nginx-configmap
       template:
         metadata:
           labels:
             app: nginx-configmap
         spec:
           containers:
           - name: container-1
             image: nginx:latest
             envFrom:                      # 使用envFrom来指定环境变量引用的配置项
             - configMapRef:
                 name: cce-configmap       # 引用的配置项名称
           imagePullSecrets:
           - name: default-secret
     ```
     
   
   - **配置项键值导入** ：您可以在创建工作负载时将配置项设置为环境变量，使用valueFrom参数单独引用ConfigMap中的Key/Value。
     ```
     apiVersion: apps/v1
     kind: Deployment
     metadata:
       name: nginx-configmap
     spec:
       replicas: 1
       selector:
         matchLabels:
           app: nginx-configmap
       template:
         metadata:
           labels:
             app: nginx-configmap
         spec:
           containers:
           - name: container-1
             image: nginx:latest
             env:                             # 设置工作负载中的环境变量
             - name: SPECIAL_LEVEL           # 工作负载中的环境变量名称
               valueFrom:                    # 使用valueFrom来指定环境变量引用配置项
                 configMapKeyRef:
                   name: cce-configmap       # 引用的配置项名称
                   key: SPECIAL_LEVEL        # 引用的配置项中的key
             - name: SPECIAL_TYPE            # 添加多个环境变量参数，可同时导入多个环境变量
               valueFrom:
                 configMapKeyRef:
                   name: cce-configmap
                   key: SPECIAL_TYPE
           imagePullSecrets:
           - name: default-secret
     ```
     
   
   
   
   
3. 创建工作负载。 
   **kubectl apply -f nginx-configmap.yaml**
   
   
4. 创建完成后，查看Pod中的环境变量。 
   1. 执行以下命令，查看已创建的Pod。
      ```
      kubectl get pod | grep nginx-configmap
      ```
      预期输出如下：
      ```
      nginx-configmap-***   1/1     Running   0              2m18s
      ```
      
   
   2. 执行以下命令，查看该Pod中的环境变量。
      ```
      kubectl exec nginx-configmap-*** -- printenv SPECIAL_LEVEL SPECIAL_TYPE
      ```
      预期输出如下：
      ```
      Hello
      CCE
      ```
      说明该配置项已被设置为工作负载的环境变量。
      
   
   
   
   
 
 #### 通过配置项设置命令行参数
您可以使用配置项作为环境变量来设置容器中的命令或者参数值，使用环境变量替换语法$VAR_NAME来进行。
**使用控制台方式**
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧导航栏选择"工作负载"，单击右上角"创建工作负载"。 
   在创建工作负载时，在"容器配置"中找到"环境变量"，单击"新增变量"。本例中以"配置项导入"为例。
   - **配置项导入** ：选择一个配置项，将配置项中所有键值都导入为环境变量。
     ![](https://support.huaweicloud.com/usermanual-cce-autopilot/zh-cn_image_0000001686130294.png "点击放大")
     
   
   
   
   
3. 在"容器配置"中找到"生命周期"，在右侧选择"启动后处理"页签，并填写以下参数。 
   - 处理方式：命令行脚本。
   
   - 执行命令：以下命令需分三行填写，其中*SPECIAL_LEVEL* 和*SPECIAL_TYPE* 为工作负载中的环境变量名，即cce-configmap配置项中的键名。
     ```
     /bin/bash
     -c
     echo $SPECIAL_LEVEL $SPECIAL_TYPE > /usr/share/nginx/html/index.html
     ```
     
   
   
   ![](https://support.huaweicloud.com/usermanual-cce-autopilot/zh-cn_image_0000001961062470.png "点击放大")
   
   
4. 配置其他工作负载参数后，单击"创建工作负载"。 
   等待工作负载正常运行后，您可[登录容器](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_00356.html)执行以下语句，查看该配置项是否已被设置为工作负载的环境变量。
   ```
   cat /usr/share/nginx/html/index.html
   ```
   示例输出如下：
   ```
   Hello CCE
   ```
   
   
**使用kubectl方式**
1. 请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0107.html)配置kubectl命令。
2. 创建并编辑nginx-configmap.yaml文件。 
   **vi nginx-configmap.yaml**
   如下面的示例所示，在工作负载中导入了cce-configmap配置项，其中*SPECIAL_LEVEL* 和*SPECIAL_TYPE* 为工作负载中的环境变量名，即cce-configmap配置项中的键名。
   ```
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: nginx-configmap
   spec:
     replicas: 1
     selector:
       matchLabels:
         app: nginx-configmap
     template:
       metadata:
         labels:
           app: nginx-configmap
       spec:
         containers:
         - name: container-1
           image: nginx:latest
           lifecycle:
             postStart:
               exec:
                 command: [ "/bin/sh", "-c", "echo $SPECIAL_LEVEL $SPECIAL_TYPE > /usr/share/nginx/html/index.html" ]
           envFrom:                      # 使用envFrom来指定环境变量引用的配置项
           - configMapRef:
               name: cce-configmap       # 引用的配置项名称
         imagePullSecrets:
           - name: default-secret
   ```
   
   
3. 创建工作负载。 
   **kubectl apply -f nginx-configmap.yaml**
   
   
4. 等待工作负载正常运行后，容器中的/usr/share/nginx/html/index.html文件将被输入如下内容。 
   1. 执行以下命令，查看已创建的Pod。
      ```
      kubectl get pod | grep nginx-configmap
      ```
      预期输出如下：
      ```
      nginx-configmap-***   1/1     Running   0              2m18s
      ```
      
   
   2. 执行以下命令，查看该Pod中的环境变量。
      ```
      kubectl exec nginx-configmap-*** -- cat /usr/share/nginx/html/index.html
      ```
      预期输出如下：
      ```
      Hello CCE
      ```
      
   
   
   
   
 
 #### 使用配置项挂载到工作负载数据卷
配置项(ConfigMap)挂载是将配置项中的数据挂载到指定的容器路径。平台提供工作负载代码和配置文件的分离，"配置项挂载"用于处理工作负载配置参数。用户需要提前创建工作负载配置，操作步骤请参见[创建配置项](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0152.html)。
**使用控制台方式**
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧导航栏选择"工作负载"，单击右上角"创建工作负载"。 
   在创建工作负载时，在"容器配置"中找到"数据存储"，选择"添加存储卷 \> 配置项(ConfigMap)"。
   
   
3. 选择配置项挂载参数，如[表1]。
   
    表1配置项挂载 
   | 参数    | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   |:---|:---|
   | 配置项 | 选择对应的配置项名称。 配置项需要提前创建，具体请参见[创建配置项](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0152.html)。                                                                                                                                                                                                                                                                                                                                          |
   | 挂载路径   | 请输入挂载路径。配置项挂载完成后，会在容器中的挂载路径下生成以配置项中的key为文件名， value为文件内容的配置文件。 数据存储挂载到容器上的路径。请不要挂载在系统目录下，如"**/** "、"**/var/run"** 等，会导致容器异常。建议挂载在空目录下，若目录不为空，请确保目录下无影响容器启动的文件，否则文件会被替换，导致容器启动异常，工作负载创建失败。 须知： 挂载高危目录的情况下 ，建议使用低权限账号启动，否则可能会造成宿主机高危文件被破坏。                                                                                                                                                                                                              |
   | 子路径  | 请输入挂载路径的子路径。 - 使用子路径挂载本地磁盘，实现在单一Pod中重复使用同一个Volume，不填写时默认为根。  - 子路径可以填写ConfigMap的键值，子路径若填写为不存在的键值则数据导入不会生效。  - 通过子路径导入的数据不会随ConfigMap的更新而动态更新。   |
   | 权限   | 只读。只能读容器路径中的数据卷。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
      
   图1使用配置项挂载到工作负载数据卷   
   ![](https://support.huaweicloud.com/usermanual-cce-autopilot/zh-cn_image_0000001997702601.png "点击放大")
   
   
4. 其余信息都配置完成后，单击"创建工作负载"。 
   等待工作负载正常运行后，本示例将在/etc/config目录下生成SPECIAL_LEVEL和SPECIAL_TYPE两个文件，且文件的内容分别为Hello和CCE。
   您可[登录容器](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_00356.html)执行以下语句，查看容器中的SPECIAL_LEVEL或SPECIAL_TYPE文件。
   ```
   cat /etc/config/SPECIAL_LEVEL
   ```
   预期输出如下：
   ```
   Hello
   ```
   
   
**使用kubectl方式**
1. 请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0107.html)配置kubectl命令。
2. 创建并编辑nginx-configmap.yaml文件。 
   **vi nginx-configmap.yaml**
   如下面的示例所示，配置项挂载完成后，最终会在容器中的/etc/config目录下生成以配置项中的key为文件名， value为文件内容的配置文件。
   ```
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: nginx-configmap
   spec:
     replicas: 1
     selector:
       matchLabels:
         app: nginx-configmap
     template:
       metadata:
         labels:
           app: nginx-configmap
       spec:
         containers:
         - name: container-1
           image: nginx:latest
           volumeMounts:
           - name: config-volume
             mountPath: /etc/config            # 挂载到/etc/config目录下
             readOnly: true
       volumes:
       - name: config-volume
         configMap:
           name: cce-configmap                 # 引用的配置项名称
   ```
   
   
3. 创建工作负载。 
   **kubectl apply -f nginx-configmap.yaml**
   
   
4. 等待工作负载正常运行后，在/etc/config目录下会生成SPECIAL_LEVEL和SPECIAL_TYPE两个文件，且文件的内容分别为Hello和CCE。 
   1. 执行以下命令，查看已创建的Pod。
      ```
      kubectl get pod | grep nginx-configmap
      ```
      预期输出如下：
      ```
      nginx-configmap-***   1/1     Running   0              2m18s
      ```
      
   
   2. 执行以下命令，查看该Pod中的SPECIAL_LEVEL或SPECIAL_TYPE文件。
      ```
      kubectl exec nginx-configmap-*** -- cat /etc/config/SPECIAL_LEVEL
      ```
      预期输出如下：
      ```
      Hello
      ```
      
   
   
   
   
 
