ConfigMap 是什么
存放非敏感配置的对象:可整体挂载为文件、按键注入环境变量。卷挂载的文件更新后延迟同步,应用要能重读或滚动重启;环境变量注入必须重启 Pod 才生效。与 Secret 的差别在于敏感性与编码,而 ConfigMap 本身就是明文对象,任何有读权限的人都能看到内容,命名与权限控制要按这个前提做。
基本信息
| 创建 | kubectl create configmap app-config --from-file=config.yaml --from-literal=LOG_LEVEL=info |
|---|---|
| 消费 | volume 挂载为文件、envFrom 注入环境变量、valueFrom 取单键 |
| 不可变 | immutable: true 可防误改并减轻 API Server 压力 |
| 生效方式 | 卷挂载延迟同步;环境变量需重启 Pod |
| 键名 | 作为环境变量注入时非法键名会被跳过 |
典型使用场景
- 配置文件挂载:应用读取挂载目录下的配置文件。
- 环境变量注入:envFrom 批量或 valueFrom 单键注入。
- 环境维度配置:不同命名空间各用一份 ConfigMap。
- 不可变配置:immutable 防止运行期被误改。
- 版本化管理:配置清单进仓库,变更走评审流程。
挂载示例
挂载示例
volumes:
- name: cfg
configMap:
name: app-config
containers:
- name: app
volumeMounts:
- {name: cfg, mountPath: /etc/app}生效方式对照
| 方式 | 更新后的行为 | 适用 |
|---|---|---|
| 卷挂载 | 延迟同步文件内容 | 配置文件、证书类内容 |
| 环境变量 | 需重启 Pod | 启动参数、连接地址 |
| subPath 挂载 | 不会自动更新 | 单个文件的精确挂载 |
以卷方式挂载的 ConfigMap 更新后,文件内容会在延迟后同步;应用需具备感知或重启机制。
改完 ConfigMap 别等自动生效:环境变量注入必须重启 Pod,先明确生效路径再验证结果。
subPath 挂载的单个文件不会随更新变化,需要重建 Pod 或改用整目录挂载。
上线顺序讲究:先更新配置对象再发应用,应用启动时才能读到预期值,反过来会出现短暂错配。
注意容量上限:单个 ConfigMap 有大小限制,大配置文件要拆成多个对象而不是硬塞。
差异排查:对比两个环境时先 diff 配置清单再怀疑代码,能省下大量排查时间。