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

相关推荐
bestcxx7 小时前
(二十六)、Kuboard 部署网络问题 &k8s 使用本地镜像 & k8s使用 register本地镜像站 综合应用
网络·容器·kubernetes
Lin_Aries_042111 小时前
容器化 Flask 应用程序
linux·后端·python·docker·容器·flask
Lin_Aries_042113 小时前
通过配置 GitLab 自动触发项目自动化构建与部署
运维·docker·容器·自动化·云计算·gitlab
尘埃不入你眼眸13 小时前
Docker操作命令
运维·docker·容器
霖.2413 小时前
四种常用SVC(service)及其与Ingress协作方式
linux·服务器·云原生·kubernetes·k8s
Coco_淳14 小时前
K8s平台部署Grafana + Loki + Promtail日志收集系统
kubernetes·grafana·日志·loki
liweiweili12617 小时前
K8S中关于容器对外提供服务网络类型
容器·kubernetes
小白不想白a17 小时前
【ansible/K8s】K8s的自动化部署源码分享
kubernetes·自动化·ansible
云游18 小时前
Zabbix7.4.8(三):通过Zabbix agent 2监控Docker相关指标
docker·容器·zabbix
Lin_Aries_042118 小时前
使用 Jenkins 的流水线项目实施 CI/CD
运维·ci/cd·docker·容器·云计算·jenkins