configmap是kubernetes中管理非敏感环境变量的核心资源,以明文键值对形式存储(单个上限1mib),支持yaml或命令行创建,并可通过envfrom.configmapref全量注入或env+configmapkeyref按需映射到pod环境变量。

ConfigMap 是 Kubernetes 中管理容器环境变量最常用、最推荐的方式之一。它把配置从镜像中剥离出来,让同一份镜像能在开发、测试、生产等不同环境中灵活运行,只需替换 ConfigMap 即可,无需重建镜像。
ConfigMap 怎么存环境变量?
ConfigMap 本质是键值对集合,每个 key 对应一个配置项,value 就是你要注入的环境变量值。比如数据库地址、功能开关、超时时间等,都可以作为 key-value 存进去。
- 支持明文存储,适合非敏感数据(敏感信息请用 Secret)
- 单个 ConfigMap 大小上限为 1 MiB,够大多数应用配置使用
- 可通过 YAML 文件定义,也支持命令行快速创建
两种主流注入方式怎么选?
把 ConfigMap 的内容变成容器里的环境变量,主要有两种写法,适用场景略有不同:
-
方式一:逐个 key 映射为环境变量 —— 适合少量关键参数,比如
DB_HOST、LOG_LEVEL。在 Pod 或 Deployment 的容器定义里用env+valueFrom.configMapKeyRef指定。 -
方式二:整组 key 全部导入为环境变量 —— 适合已有大量配置项,且命名规范(如全大写+下划线)。用
envFrom.configMapRef一键导入全部 data 字段,省去逐条写env的麻烦。
实战:给 MySQL 容器注入 root 密码
虽然密码属于敏感信息,但作为演示逻辑,我们先用 ConfigMap 展示流程(实际生产请改用 Secret):
1. 创建 ConfigMap(YAML):
apiVersion: v1kind: ConfigMap
metadata:
name: mysql-config
data:
MYSQL_ROOT_PASSWORD: "my-secret-pw"
2. 在 MySQL Deployment 中引用:
containers:- name: mysql
image: mysql:8.0
envFrom:
- configMapRef:
name: mysql-config
这样容器启动后,MYSQL_ROOT_PASSWORD 就会自动成为环境变量,MySQL 镜像会识别并使用它初始化 root 账号。
注意事项和常见坑
环境变量注入不是“实时生效”的魔法,要注意这些细节:
- Pod 启动后修改 ConfigMap,已运行的容器不会自动更新环境变量(除非你用
envFrom+ 滚动更新触发新 Pod) - 如果 ConfigMap 不存在或 key 名写错,容器可能启动失败,或读到空值 —— 建议配合
optional: true控制容错 - 环境变量名必须符合 POSIX 标准(字母、数字、下划线),ConfigMap 的 key 若含非法字符,需在引用时做映射处理
- 多个 ConfigMap 可同时注入,顺序无关,但 key 冲突时后者覆盖前者











