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:

  1. 环境变量注入:在容器启动时读取键值。
  2. 命令行参数:将配置作为启动参数传入。
  3. 挂载为文件卷:将 ConfigMap 内容映射到容器文件系统。
  4. 通过 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。
posted @ 2026-05-29 15:27  Donaver  阅读(23)  评论(0)    收藏  举报