K8s ConfigMap配置管理全解析

Kubernetes(k8s)中,ConfigMap 是一种用于存储配置数据的资源对象,主要用来将配置信息和容器化应用进行解耦,以实现配置的集中管理、动态更新和复用。以下是详细介绍:

1. 用途

  • 分离配置和代码:在应用开发中,配置信息(如数据库连接字符串、日志级别等)经常需要根据不同的环境(开发、测试、生产)进行调整。使用 ConfigMap 可以将这些配置从应用代码中抽离出来,让应用代码保持不变,只需要修改 ConfigMap 中的配置数据,就能适应不同的环境。
  • 支持动态更新:当应用的配置发生变化时,不需要重新构建和部署容器镜像,只需要更新 ConfigMap,然后通过一定的方式(如重启 Pod、重新加载配置等)让应用获取到新的配置。
  • 多容器共享配置:在一个 Pod 中可能包含多个容器,这些容器可能需要共享一些配置信息,ConfigMap 就可以为它们提供统一的配置来源。

2. 数据结构

ConfigMap 可以以键值对(key-value)的形式来存储配置数据,值可以是简单的字符串,也可以是较为复杂的配置文件内容。

3. 创建方式

  • 基于字面量创建 :使用kubectl create configmap命令并通过--from-literal参数指定键值对来创建。例如,要创建一个名为my-configmap,包含APP_COLOR=blueAPP_MODE=prod两个配置项的 ConfigMap,可以执行以下命令:

    kubectl create configmap my-configmap --from-literal=APP_COLOR=blue --from-literal=APP_MODE=prod

  • 基于文件创建 :如果配置信息已经存在于文件中,也可以基于文件来创建 ConfigMap。比如,有一个app.properties文件,内容为:

    database.url=jdbc://localhost:3306/mydb
    database.user=root
    database.password=123456

可以通过以下命令创建 ConfigMap:

复制代码
kubectl create configmap my-configmap --from-file=app.properties
  • 基于目录创建 :如果有多个配置文件在一个目录下,可以基于目录创建 ConfigMap,Kubernetes 会为每个文件生成一个键值对,键为文件名,值为文件内容。假设config-files目录下有log.propertiesserver.properties两个文件,执行以下命令创建 ConfigMap:

    kubectl create configmap my-configmap --from-file=config-files/

4. 在 Pod 中使用 ConfigMap

  • 环境变量方式 :在 Pod 的 YAML 配置文件中,通过env字段引用 ConfigMap 中的数据作为容器的环境变量。示例如下:

    apiVersion: v1
    kind: Pod
    metadata:
    name: my-pod
    spec:
    containers:
    - name: my-container
    image: my-image
    env:
    - name: APP_COLOR
    valueFrom:
    configMapKeyRef:
    name: my-configmap # 引用的ConfigMap名称
    key: APP_COLOR # ConfigMap中的键

  • 挂载卷方式:将 ConfigMap 作为 Volume 挂载到容器中,这样容器内的应用就可以像读取文件一样读取 ConfigMap 中的配置数据。示例如下:

    apiVersion: v1
    kind: Pod
    metadata:
    name: my-pod
    spec:
    containers:
    - name: my-container
    image: my-image
    volumeMounts:
    - name: config-volume
    mountPath: "/etc/config" # 挂载路径
    volumes:
    - name: config-volume
    configMap:
    name: my-configmap # 引用的ConfigMap名称

上述示例中,ConfigMap 中的数据会以文件的形式出现在/etc/config目录下,文件名就是 ConfigMap 中的键。

5. 更新 ConfigMap

当需要更新 ConfigMap 中的配置数据时,可以使用kubectl edit configmap命令来编辑 ConfigMap。例如:

复制代码
kubectl edit configmap my-configmap

编辑保存后,通过一定的机制(如重启 Pod,或者应用本身支持动态重新加载配置)让应用获取到新的配置 。如果是通过挂载卷方式使用 ConfigMap,Kubernetes 默认会自动更新挂载的文件内容(有一定延迟)。

相关推荐
风落无尘3 小时前
Stable Diffusion WebUI & ComfyUI 完整安装教程:官方部署+一键整合包+Docker容器化(2026最新)
docker·容器·stable diffusion
CodeMartain8 小时前
Dify Windows 原生部署(无 Docker、纯本地)
运维·docker·容器
牛奶咖啡139 小时前
k8s容器编排技术实践——使用containerd作为容器运行时部署k8s集群
kubernetes·k8s的安装部署·开启系统的ipvs支持·安装containerd·containerd配置加速器·安装k8s的工具·安装calico网络插件
万里侯9 小时前
云原生数据备份与恢复:保障数据安全的最佳实践
微服务·容器·k8s
llrraa201010 小时前
配置docker国内镜像源
运维·docker·容器
阿里云云原生10 小时前
阿里云 STAROps 全域智能运维平台发布!从“被动救火”到“主动自治”
云原生
2301_7807896611 小时前
手游遇到攻击为什么要用SDK游戏盾手游遇到攻击为什么要用 SDK 游戏盾?
安全·web安全·游戏·架构·kubernetes·ddos
35岁程序员的自救之路11 小时前
AiBBS - 面向下一个十年的AI + 云原生社区系统
人工智能·云原生
珂玥c12 小时前
k8s集群ingress碎碎念
云原生·容器·kubernetes
佳杰云星12 小时前
如何给大模型集群选“大脑”?智算调度与管理平台 10 维选型指南(附选型评分表)
人工智能·kubernetes·大模型·云计算·gpu·算力调度·智算中心