ConfigMap
ConfigMap 是 Kubernetes 中用于存储非机密配置数据的核心对象,它以键值对形式保存环境变量、命令行参数或配置文件内容,让应用配置与容器镜像解耦。 它非常适合管理应用的动态配置,但不适合存储敏感信息或大文件(超过 1 MiB)。
🧩 ConfigMap 的核心作用
- 存储非机密配置:以键值对形式保存应用的配置数据。
- 解耦应用与环境:让容器镜像保持通用,环境差异通过 ConfigMap 注入。
- 灵活注入方式:支持作为环境变量、命令行参数、挂载为文件,或通过 API 直接读取。
- 轻量存储:适合保存小型配置(最大 1 MiB),不适合存储大量数据。
📌 类比理解
ConfigMap = 配置文件柜
- 应用代码(Pod)就像工人,工具柜(ConfigMap)里放着不同环境的说明书。
- 工人启动时会从柜子里拿到说明书(配置),按照环境要求工作。
- 工具柜里的内容可以随时更新,而工人不用换人(镜像不变)。
⚙️ 创建 ConfigMap 的常用方式
| 方法 | 命令示例 | 说明 |
|---|---|---|
| 从字面值创建 | kubectl create configmap app-config --from-literal=key=value |
直接定义键值对。 |
| 从文件创建 | kubectl create configmap game-config --from-file=game.properties |
将文件内容作为值。 |
| 从目录创建 | kubectl create configmap game-config --from-file=./config/ |
将目录下所有文件打包为键值。 |
查看详情:
kubectl describe configmap game-config
kubectl get configmap game-config -o yaml
🧠 ConfigMap 与 Pod 的结合方式
Pod 可以通过以下四种方式使用 ConfigMap:
- 环境变量注入:在容器启动时读取键值。
- 命令行参数:将配置作为启动参数传入。
- 挂载为文件卷:将 ConfigMap 内容映射到容器文件系统。
- 通过 API 动态读取:应用代码直接访问 Kubernetes API 获取配置。
🧱 实践建议
- 命名规范:ConfigMap 名称必须是合法的 DNS 子域名。
- 不可变配置:从 v1.19 起可设置
immutable: true,防止被修改。 - 命名空间限制:Pod 与 ConfigMap 必须在同一 Namespace 中。
📝 使用示例
apiVersion: v1
kind: ConfigMap
metadata:
name: game-config
data:
game.properties: |
player=admin
difficulty=hard
level=5
---
apiVersion: v1
kind: Pod
metadata:
name: configmap-demo-pod
spec:
volumes:
- name: config-volume
configMap:
name: game-config
containers:
- name: configmap-test-container
image: registry.k8s.io/busybox
command:
- cat
- "/etc/config/game.properties"
volumeMounts:
- name: config-volume
mountPath: "/etc/config"
👉 这个 Pod 会通过环境变量和挂载文件的方式使用 ConfigMap。
⚠️ 注意事项
- 大小限制:单个 ConfigMap 不超过 1 MiB。
- 命名空间限制:Pod 和 ConfigMap 必须在同一个命名空间。
- 不可变选项:支持
immutable: true,避免误改。 - 敏感数据:不要存储密码或证书,应使用 Secret。
💡 总结
- ConfigMap 是 Kubernetes 的 配置文件柜。
- 它让应用镜像与环境配置解耦,支持多种注入方式。
- 适合保存轻量配置,敏感信息需用 Secret。

浙公网安备 33010602011771号