一、configmaps的核心作用
1.解耦配置与镜像
将配置文件(如环境变量、命令行参数、文本配置文件)从容器镜像中分离,避免因配置变更导致镜像重建。
2.统一管理配置
以键值对(Key-Value)形式存储配置,支持 UTF-8 字符串(data字段)或二进制数据(binaryData字段需 Base64 编码。
3.动态注入容器
配置可通过环境变量、命令行参数或文件挂载(Volume)注入 Pod,适用于多环境部署(如开发/生产环境切换)。
二、创建configmaps的4种方式
1.命令行直接创建
bash
kubectl create configmap app-config --from-literal=APP_COLOR=blue --from-literal=APP_ENV=prod
适用场景:快速定义简单配置
2.从文件创建
bash
kubectl create configmap redis-config --from-file=redis.properties
文件内容自动转为键值,键名为文件名(如 redis.properties),值为文件内容。
3.从目录创建(多文件合并)
bash
kubectl create configmap global-config --from-file=configs/
目录内每个文件生成独立键值对(例:configs/db.conf → 键 db.conf)。
4.yaml声明式创建(推荐)
bash
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config
data:
# 简单键值
DB_HOST: "10.0.0.1"
# 多行文本(保留格式)
server.conf: |
max_connections=200
timeout=30
版本可控,适合复杂配置(如 Nginx 配置文件)。
三、在pod中适用configmaps的3种方式
1.环境变量注入
bash
env:
- name: DB_PASSWORD
valueFrom:
configMapKeyRef:
name: mysql-config # ConfigMap 名称
key: db.password # 键名
配置变更需重启 Pod 生效。
2.单文件挂载(volume)
bash
volumes:
- name: app-config-volume
configMap:
name: app-config # 引用 ConfigMap
volumeMounts:
- name: app-config-volume
mountPath: /etc/app # 容器内挂载路径
/etc/app 目录下生成与键同名的文件(如 server.conf),值为对应配置。
3,选择性挂载文件
bash
volumes:
- name: filtered-config
configMap:
name: game-config
items:
- key: game.properties # 原键名
path: user-settings.cfg # 挂载后重命名
仅需部分配置,避免目录混乱。
四、关键特性与注意事项
**·热更新(无需重启pod):**仅限 Volume 挂载方式,ConfigMap 更新后,容器内文件自动同步(约 10-60 秒)。环境变量方式不支持热更新。
**·配置大小限制:**单个 ConfigMap 不超过 1 MiB,大文件建议用 Volume 挂载独立存储(如 NFS)。
·敏感信息处理:ConfigMap 存储明文 ,机密数据(密码、密钥)必须用 Secret 对象
**·命名空间隔离:**ConfigMap 属于命名空间(Namespace)资源,不同命名空间可存在同名 ConfigMap。
总结
ConfigMap 是 Kubernetes 配置管理的核心组件,通过环境变量、文件挂载等方式实现配置与应用的解耦。关键要点归纳如下:
-
✅ 创建灵活:支持命令行、文件、目录、YAML 四种方式。
-
✅ 动态注入:Volume 挂载支持配置热更新(无需重启)。
-
⚠️ 限制明确:1 MiB 大小限制,敏感数据用 Secret。
-
🔧 场景适配:复杂配置用 YAML 声明,简单变量用命令行快速生成。