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 默认会自动更新挂载的文件内容(有一定延迟)。

相关推荐
guygg881 天前
Rocky Linux 8.9配置Kubernetes集群详解,适用于CentOS环境
linux·kubernetes·centos
chen_note1 天前
Kubernetes1.23版本搭建(三台机器)
运维·容器·kubernetes·云计算·kubepi
花落已飘1 天前
openEuler WSL2容器化开发实战:Docker Desktop集成与应用部署
运维·docker·容器
skyeeeeee1 天前
kubeadm安装k8s集群
后端·kubernetes
麦聪聊数据1 天前
大数据与云原生数据库中的 SQL2API:优化跨平台数据访问与查询
数据库·sql·云原生
橙色云-智橙协同研发1 天前
【PLM实施专家宝典】离散制造企业ECO管理优化方案:构建自动化、零错误的变更引擎
大数据·云原生·解决方案·数字化转型·plm·eco·云plm
高旭博1 天前
7. kubernetes资源——service服务
云原生·容器·kubernetes
斯普信专业组1 天前
Docker 常用命令与时区配置指南
docker·容器·eureka
熊文豪2 天前
openEuler 云原生实战:部署高性能 Redis 集群与压测分析
数据库·redis·云原生·openeuler