首页/云/云与容器速查/ConfigMap 配置管理
Kubernetes68 条

ConfigMap 配置管理

存放非敏感配置的键值对象:可整包注入环境变量、也可挂载成文件;与镜像解耦,改配置不必重打包。注意环境变量方式不热更新,挂载方式约 1 分钟级最终一致。

云与容器速查云更新于 2026-10-13

ConfigMap 是什么

ConfigMap 是 Kubernetes 里存放非敏感配置的 API 对象,以键值对形式独立于镜像存在:同一份镜像在开发、测试、生产跑不同参数,靠的就是挂不同的 ConfigMap。它通过环境变量或文件挂载注入容器,改配置不必重新构建镜像。密码、证书私钥这类敏感数据不属于它,应放 Secret。

基本信息

作用范围命名空间级资源,Pod 只能引用同命名空间的 ConfigMap
注入方式env/envFrom 注入环境变量;volumes 挂载为文件
体量上限单个 ConfigMap 1MiB,超出需拆分
创建kubectl create configmap --from-file/--from-literal,或直接写 YAML
校验kubectl describe cm <名称> 查看键与字节数

典型使用场景

  • 同一镜像多环境部署:不同环境注入不同日志级别与超时参数
  • 把 nginx、MySQL 等一整段配置文件挂进容器,避免为改一行重建镜像
  • 功能开关、灰度比例这类开关集中管理,回滚只需切回旧对象
  • 配置走独立发布流程,与镜像版本解耦,互不牵连
  • 批量注入一组环境变量,省去在 Pod spec 里逐条写 env

最小示例

最小示例
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-conf
  namespace: dev
data:
  LOG_LEVEL: info          # 单值键:可整体注入环境变量
  app.yaml: |              # 多行内容:挂载后成为同名文件
    server:
      port: 8080
      read_timeout: 5s

两种注入方式对比

注入方式生效机制改配置之后
envFrom容器启动时读取一次写入环境变量必须重建 Pod 才更新
volume 挂载以文件形式挂到指定目录约 1 分钟级同步,应用需重读
env 单键引用只注入指定键同 envFrom,需重建 Pod
subPath 挂单文件只挂一个键为文件不随 ConfigMap 更新,需重建
「配置改了应用没变」先问注入方式:env 注入的改动 Pod 完全不感知,要执行 kubectl rollout restart deployment/<名称>;挂载方式有分钟级延迟,且应用得自己重读配置文件才生效。
ConfigMap 内容以明文存放在 etcd,任何能读该命名空间 ConfigMap 的账号都能看到;数据库口令、访问密钥请放 Secret,必要时再叠加 KMS 加密。
挂载到目录会把容器内该目录原有内容整体覆盖;只想替换单个文件就用 subPath,但会失去自动更新能力,两者按需求取舍。

易错点

  • 把敏感信息放 ConfigMap:权限模型比 Secret 宽松,等于半公开
  • env 注入后改了 ConfigMap 不重启 Pod:容器内永远是旧值,被误判成配置没生效
  • 引用不存在的 ConfigMap 且未标记 optional:Pod 卡在 CreateContainerConfigError 起不来
  • Pod 跨命名空间引用同名 ConfigMap:对象找不到,报 configmap not found
  • 单个 ConfigMap 塞超大文件超过 1MiB:创建请求被 API 直接拒绝

数据来源与参考

  • Kubernetes Docs:ConfigMaps

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌