设置环境变量
容器环境变量(如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的操作步骤,请参见创建配置项和创建密钥。
- 登录CCE控制台。
- 单击集群名称进入集群,在左侧选择“工作负载”,在右上角单击“创建工作负载”。
- 在“容器配置 > 容器信息”中,选择“环境变量”页签。
- 请根据需求设置环境变量。CCE集群支持配置多种类型的环境变量,具体说明请参见表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的值。
变量名称
表示设置在容器中的环境变量的名称。
变量/变量引用
用于指定环境变量的值,或从其他来源获取环境变量的值。
- 其他参数配置完成后,单击右下角“创建工作负载”。等待一段时间后,工作负载状态为“运行中”。
假设集群中已创建一个ConfigMap和Secret,关于创建ConfigMap和Secret的操作步骤详情请参见创建配置项和创建密钥。
- 使用kubectl连接集群,具体操作请参见通过kubectl连接集群。
- 查看集群中的ConfigMap。本示例中的ConfigMap名为configmap-example。
kubectl get configmap configmap-example -oyaml
回显如下:
apiVersion: v1 data: configmap_key: configmap_value kind: ConfigMap ...
- 查看集群中的Secret。本示例中的Secret名为secret-example。
kubectl get secret secret-example -oyaml
回显如下:
apiVersion: v1 data: secret_key: c2VjcmV0X3ZhbHVl # c2VjcmV0X3ZhbHVl为secret_value的base64编码 kind: Secret ...
- 创建一个名为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
- 创建Deployment。
kubectl create -f nginx-deployment.yaml
回显如下,表示已经开始创建工作负载。
deployment.apps/env-example created
- 查看Pod名称。
kubectl get pod
回显如下:
NAME READY STATUS RESTARTS AGE env-example-695b759569-lx9jp 1/1 Running 0 17m
- 进入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 # 密钥导入,原密钥中的键值直接会导入结果
相关文档
- 创建工作负载:了解工作负载的更多参数。
- 管理工作负载:工作负载创建后,您可以对其执行升级、编辑YAML、查看日志等操作。
- 如果工作负载创建失败,请参考工作负载异常问题排查进行处理。