# 设置环境变量
容器环境变量（如DB_HOST=db.example.com）是运行容器时动态传入的配置参数，允许在不重新构建镜像的情况下，灵活调整应用的行为和设置。其主要作用包括：
- **动态配置应用**：允许在不修改容器镜像的情况下，通过注入不同的变量值（如DB_HOST=prod.db.com或DB_HOST=test.db.com）改变应用行为。即使容器因调度等原因重启，该配置信息依然有效。典型场景有数据库连接信息、API端点、功能开关等。
- **环境隔离配置**：使用同一套镜像配合不同环境变量，即可适配开发、测试、生产等不同环境。例如，通过ENV_MODE=production启用生产环境配置。
- **安全管理敏感信息**：配合Secrets等机制，安全地传递密码、密钥等敏感数据，避免将敏感信息硬编码在镜像或代码中。
环境变量可以在工作负载部署后进行修改，为工作负载提供极大的灵活性。CCE中设置的环境变量与Dockerfile中的"ENV"效果相同。更多信息，请参见[Define Environment Variables for a Container](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/)。
#### 添加环境变量
支持通过控制台或kubectl命令行的方式添加环境变量，具体如下:
- [通过控制台添加环境变量]
  使用配置项或密钥相关类型的环境变量时，需确保集群中已创建对应的ConfigMap和Secret。关于创建ConfigMap和Secret的操作步骤，请参见[创建配置项](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0152.html#cce_11_0152)和[创建密钥](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0153.html#cce_11_0153)。
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)。
  
  2. 单击集群名称进入集群，在左侧选择"工作负载"，在右上角单击"创建工作负载"。
  
  3. 在"容器配置 \> 容器信息"中，选择"环境变量"页签。
  
  4. 请根据需求设置环境变量。CCE集群支持配置多种类型的环境变量，具体说明请参见[表1]。
     
     - 单击"新增变量"，逐条增加环境变量，依次填写"类型"、"变量名称"和"变量/变量引用"等信息。
     
     - 单击"批量编辑自定义变量"，在编辑页面，按行输入自定义变量，格式为"变量名称=变量/变量引用"。
     
     
     图1设置环境变量   
     ![](https://support.huaweicloud.com/usermanual-cce-autopilot/zh-cn_image_0000001868021626.png "点击放大")
      表1设置环境变量 
     | 参数     | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
     |:---|:---|
     | 类型     | 用于设置环境变量的类型，具体如下： - **自定义**：需要手动填写环境变量名称及对应的参数值。  - **配置项导入** ：将配置项中所有键值皆导入为环境变量。 如[图1]所示，将配置项configmap-example中的所有键值导入环境变量。   - **配置项键值导入** ：将配置项中某个键的值导入，作为环境变量的值。 如[图1]所示，将配置项configmap-example中的configmap_key对应的键值导入环境变量。假设configmap_key对应的键值为configmap_value，将其导入后，环境变量key1的值为configmap_value。   - **密钥导入** ：将密钥中所有键值皆导入为环境变量。 如[图1]所示，将密钥secret-example中的所有键值导入环境变量。   - **密钥键值导入** ：将密钥中某个键的值导入，作为环境变量的值。 如[图1]所示，将密钥secret-example中secret_key对应的键值导入环境变量。假设secret_key对应的键值为secret_value，将其导入后，环境变量key2的值为secret_value。   - **变量/变量引用** ：用Pod定义的字段作为环境变量的值。 如[图1]所示，将此Pod的名称导入，作为环境变量key3的值。   - **资源引用** ：用容器定义的资源申请值或限制值作为环境变量的值。 如[图1]所示，将容器container-1的CPU限制值导入，作为环境变量key4的值。    |
     | 变量名称   | 表示设置在容器中的环境变量的名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
     | 变量/变量引用 | 用于指定环境变量的值，或从其他来源获取环境变量的值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
        
     
     
  
  5. 其他参数配置完成后，单击右下角"创建工作负载"。等待一段时间后，工作负载状态为"运行中"。
   
- [通过kubectl命令行添加环境变量]
  假设集群中已创建一个ConfigMap和Secret，关于创建ConfigMap和Secret的操作步骤详情请参见[创建配置项](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0152.html#cce_11_0152)和[创建密钥](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0153.html#cce_11_0153)。
  1. 使用kubectl连接集群，具体操作请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0107.html)。
  
  2. 查看集群中的ConfigMap。本示例中的ConfigMap名为configmap-example。 
     ```
     kubectl get configmap configmap-example -oyaml
     ```
     回显如下：
     ```
     apiVersion: v1
     data:
       configmap_key: configmap_value
     kind: ConfigMap
     ...
     ```
     
     
  
  3. 查看集群中的Secret。本示例中的Secret名为secret-example。 
     ```
     kubectl get secret secret-example -oyaml
     ```
     回显如下：
     ```
     apiVersion: v1
     data:
       secret_key: c2VjcmV0X3ZhbHVl              # c2VjcmV0X3ZhbHVl为secret_value的base64编码
     kind: Secret
     ...
     ```
     
     
  
  4. 创建一个名为nginx-deployment.yaml的文件。其中，nginx-deployment.yaml为自定义名称，您可以随意命名。 
     ```
     vi nginx-deployment.yaml
     ```
     在工作负载中设置环境变量，YAML示例如下：
     ```
     apiVersion: apps/v1
     kind: Deployment
     metadata:
       name: env-example
       namespace: default
     spec:
       replicas: 1
       selector:
         matchLabels:
           app: env-example
       template:
         metadata:
           labels:
             app: env-example
         spec:
           containers:
             - name: container-1
               image: nginx:alpine
               imagePullPolicy: Always
               resources:
                 requests:
                   cpu: 250m
                   memory: 512Mi
                 limits:
                   cpu: 250m
                   memory: 512Mi
               env:
                 - name: key                     # 自定义，自定义环境变量名称及对应的参数值
                   value: value
                 - name: key1                    # 配置项键值导入，将配置项中某个键的值导入，作为环境变量的值
                   valueFrom:
                     configMapKeyRef:
                       name: configmap-example
                       key: configmap_key
                 - name: key2                    # 密钥键值导入，将密钥中某个键的值导入，作为环境变量的值
                   valueFrom:
                     secretKeyRef:
                       name: secret-example
                       key: secret_key
                 - name: key3                    # 变量引用，将Pod定义的字段导入，作为环境变量的值
                   valueFrom:
                     fieldRef:
                       apiVersion: v1
                       fieldPath: metadata.name
                 - name: key4                    # 资源引用，用容器定义的资源申请值或限制值作为环境变量的值
                   valueFrom:
                     resourceFieldRef:
                       containerName: container1
                       resource: limits.cpu
                       divisor: 1
               envFrom:
                 - configMapRef:                 # 配置项导入，将配置项中所有键值导入为环境变量
                     name: configmap-example
                 - secretRef:                    # 密钥导入，将密钥中所有键值导入为环境变量
                     name: secret-example
           imagePullSecrets:
             - name: default-secret
     ```
     
     
  
  5. 创建Deployment。 
     ```
     kubectl create -f nginx-deployment.yaml
     ```
     回显如下，表示已经开始创建工作负载。
     ```
     deployment.apps/env-example created
     ```
     
     
  
  6. 查看Pod名称。 
     ```
     kubectl get pod
     ```
     回显如下：
     ```
     NAME                           READY   STATUS    RESTARTS   AGE
     env-example-695b759569-lx9jp   1/1     Running   0          17m
     ```
     
     
  
  7. 进入Pod中查看环境变量。 
     ```
     kubectl exec env-example-695b759569-lx9jp  -- printenv
     ```
     回显如下，则说明环境变量配置成功。
     ```
     / # env
     key=value                             # 自定义环境变量
     key1=configmap_value                  # 配置项键值导入
     key2=secret_value                     # 密钥键值导入
     key3=env-example-695b759569-lx9jp     # Pod的metadata.name
     key4=1                                # container1这个容器的limits.cpu，单位为Core，向上取整
     configmap_key=configmap_value         # 配置项导入，原配置项中的键值直接会导入结果
     secret_key=secret_value               # 密钥导入，原密钥中的键值直接会导入结果
     ```
     
     
   
#### 相关文档
- [创建工作负载](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0673.html)：了解工作负载的更多参数。
- [管理工作负载](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0007.html)：工作负载创建后，您可以对其执行升级、编辑YAML、查看日志等操作。
- 如果工作负载创建失败，请参考[工作负载异常问题排查](https://support.huaweicloud.com/cce_faq/cce_faq_00029.html)进行处理。
 
