更新时间:2025-07-31 GMT+08:00

设置环境变量

容器环境变量(如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

添加环境变量

Standard/Turbo集群支持通过控制台或kubectl命令行的方式添加环境变量,具体如下:

使用配置项或密钥相关类型的环境变量时,需确保集群中已创建对应的ConfigMap和Secret。关于创建ConfigMap和Secret的操作步骤,请参见创建配置项创建密钥

  1. 登录CCE控制台
  2. 单击集群名称进入集群,在左侧选择“工作负载”,在右上角单击“创建工作负载”
  3. 在“容器配置 > 容器信息”中,选择“环境变量”页签。
  4. 请根据需求设置环境变量。CCE集群支持配置多种类型的环境变量,具体说明请参见表1

    • 单击“新增变量”,逐条增加环境变量,依次填写“类型”“变量名称”“变量/变量引用”等信息。
    • 单击“批量编辑自定义变量”,在编辑页面,按行输入自定义变量,格式为“变量名称=变量/变量引用”
    图1 设置环境变量
    表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. 其他参数配置完成后,单击右下角“创建工作负载”。等待一段时间后,工作负载状态为“运行中”。

假设集群中已创建一个ConfigMap和Secret,关于创建ConfigMap和Secret的操作步骤详情请参见创建配置项创建密钥

  1. 使用kubectl连接集群,具体操作请参见通过kubectl连接集群
  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               # 密钥导入,原密钥中的键值直接会导入结果

相关文档