首页/云/Kubernetes 速查/ConfigMap 注入环境变量(env/envFrom)
配置与存储54 条

ConfigMap 注入环境变量(env/envFrom)

把配置以环境变量注入容器:单键用 valueFrom.configMapKeyRef,整集合用 envFrom;注入发生在容器启动时,运行中不更新。

Kubernetes 速查云更新于 2026-10-13

注入环境变量是什么

把配置对象里的内容以环境变量形式注入容器,有两种写法:一种逐个键指定,在变量名与对象键名不一致时更灵活;另一种把对象里的所有键一次性注入,适合配置项较多的场景。注入发生在容器创建的那一刻,之后对象再更新也不会反映到已经运行的环境变量上。

哪些键会被跳过

环境变量名有字符集限制,而对象键名允许包含连字符与点号。键名不符合变量命名规则时不会报错,而是被静默跳过,应用读不到变量后表现为配置缺失,排查时容易怀疑对象本身而不是键名。配置项较多时优先考虑以文件方式挂载。

基本信息

适用环境任何 Kubernetes 发行版
逐键写法指定来源对象与键名,可自定义变量名
整集写法把对象里所有键注入为变量
可选项可标记允许对象不存在,缺失时不阻止启动
生效时机容器创建时注入一次
更新行为对象更新后已运行的容器不会变化

典型使用场景

  • 常规参数注入:日志级别、连接串、功能开关这类小配置
  • 批量注入:配置项较多时一次性注入整个对象
  • 环境差异化:不同环境使用不同对象承载取值
  • 可选配置:允许对象缺失以支持默认值兜底
  • 敏感项的替代:需要保密时改用密钥对象并采用同样写法
  • 迁移过渡:从环境变量迁移到文件挂载过程中先并行使用

两种写法

两种写法
containers:
  - name: app
    image: registry.example.com/app:1.26.0
    env:
      - name: LOG_LEVEL            # 自定义变量名
        valueFrom:
          configMapKeyRef:
            name: app-config
            key: log-level           # 对象里的键名
    envFrom:
      - configMapRef:
          name: app-config          # 一次性注入该对象的全部键
      - configMapRef:
          name: feature-flags
          optional: true            # 对象不存在也不阻止启动

验证注入结果

验证注入结果
kubectl exec -it web-x -- env | grep -E 'LOG_LEVEL|MAX_CONN'   # 看变量是否注入
kubectl get cm app-config -o jsonpath='{.data}'                 # 对照对象的键名
kubectl describe pod web-x | grep -A12 Environment                # 看注入来源解析
kubectl get events --field-selector involvedObject.name=web-x | tail -5

两种写法对照

写法适用场景注意
逐键注入需要改变量名或只取部分键键名写错会导致容器无法启动
整集注入配置项多、希望少写模板键名不合法时会被静默跳过
标记可选项对象可能缺失的场景缺失后应用需自身兜底默认值
引用密钥对象包含敏感内容时写法相同,来源对象不同
同名变量同时出现时,显式逐键声明的优先级高于整集注入的写法。
环境变量在容器创建时注入一次,更新对象后必须重建实例才能生效,用子路径挂载的单个文件同样如此。

易错点

  • 键名含不支持的字符:注入被静默跳过而不报错,应用读不到变量,容易误判为对象内容问题
  • 引用不存在的对象或键:容器无法创建,事件里会给出相关提示
  • 以为更新对象就能改配置:环境变量只在创建时注入,必须重建实例
  • 整集注入后与已有变量重名:变量被覆盖或来源混乱,应明确优先级并做好命名规范

数据来源与参考

  • Kubernetes 官方文档 · ConfigMap(Using ConfigMaps)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌