Kubernetes-06:configmaps

一、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 声明,简单变量用命令行快速生成。