引言
在 Kubernetes 中,配置和代码解耦是最佳实践之一。
不论是环境变量、应用配置文件,还是命令行参数,都不应该硬编码在镜像里。
而 ConfigMap,正是官方提供的轻量级配置管理方案。
这篇文章将带你快速掌握 ConfigMap 的核心概念、使用场景、典型用法以及一些进阶技巧,帮你真正把它用到极致!
一、什么是 ConfigMap?
ConfigMap 是一种 Kubernetes 资源对象,
主要用来以键值对(key-value)的形式,存储非敏感的配置信息。
比如:
- 应用的配置文件内容
- 环境变量
- 命令行启动参数
使用 ConfigMap,能够让:
✅ 镜像更加通用;
✅ 不同环境(开发、测试、生产)轻松切换配置;
✅ 应用升级时,不需要重新构建镜像。
二、ConfigMap 的常见使用方式
ConfigMap 可以以多种方式被 Pod 引用:
| 引用方式 | 说明 |
|---|---|
| 环境变量注入 | 将 ConfigMap 的键值作为容器环境变量 |
| 挂载为 Volume 文件 | 将 ConfigMap 挂载到 Pod 作为文件读取 |
| 作为命令行参数 | 动态读取 ConfigMap 的值拼接启动参数 |
每种方式适配不同场景,下面我们逐一示范。
三、实战演练:玩转 ConfigMap
1. 创建一个 ConfigMap
可以通过 kubectl 命令或者 YAML 文件创建。
方法一:命令行快速创建
bash
复制编辑
kubectl create configmap app-config --from-literal=APP_MODE=production --from-literal=APP_PORT=8080
创建了一个名为 app-config 的 ConfigMap,里面有两个键值对。
方法二:用 YAML 创建
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
APP_MODE: "production"
APP_PORT: "8080"
✅ YAML 方式更可控,推荐生产环境使用!
2. 以环境变量方式使用
修改 Deployment,让容器读取 ConfigMap 的值作为环境变量:
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-app
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- name: demo
image: busybox
command: ["sh", "-c", "echo APP_MODE=$APP_MODE && echo APP_PORT=$APP_PORT && sleep 3600"]
env:
- name: APP_MODE
valueFrom:
configMapKeyRef:
name: app-config
key: APP_MODE
- name: APP_PORT
valueFrom:
configMapKeyRef:
name: app-config
key: APP_PORT
执行效果:
APP_MODE和APP_PORT成为容器内的环境变量。- 应用可以轻松读取,不需要改镜像。
3. 以 Volume 挂载方式使用
另一种常用方式是把 ConfigMap 挂载到容器目录,作为文件读取。
spec:
containers:
- name: demo
image: busybox
command: ["sh", "-c", "cat /etc/config/APP_MODE && cat /etc/config/APP_PORT && sleep 3600"]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: app-config
效果:
/etc/config/APP_MODE文件包含production/etc/config/APP_PORT文件包含8080
适合应用读取配置文件而不是环境变量的场景,比如 Java 应用。
四、ConfigMap 常见问题及最佳实践
1. ConfigMap 修改,Pod 会自动感知吗?
✅ 以 Volume 挂载时,可以感知变化(延迟几秒到一分钟左右)!
但
❌ 以环境变量注入时,不会自动更新。
需要重启 Pod。
因此:频繁变化的配置,推荐用 Volume 挂载;固定配置用环境变量注入。
2. ConfigMap 适合存放大文件吗?
不适合!
- ConfigMap 单体最大支持 1MB。
- 超大配置(比如大型证书、二进制文件),推荐用 Volume + 外部存储(如 Config Server)。
3. 如何在不同环境复用 ConfigMap?
可以为不同环境创建不同的 ConfigMap,例如:
app-config-devapp-config-testapp-config-prod
然后用不同的 Deployment 引用对应的 ConfigMap。
高级玩法也可以结合 Helm Charts 动态模板化生成。
五、总结
ConfigMap 是 Kubernetes 配置管理的基石,它让应用实现了真正的:
- 配置与代码分离
- 多环境灵活切换
- 快速响应变更
掌握 ConfigMap,不仅能让你的 K8s 项目更加规范,还能大幅提升系统的可维护性。
记住三句话:
- 配置别写死在镜像里;
- 频繁变化的用 Volume;
- 不要拿 ConfigMap 储存大文件!