【Kubernetes】ConfigMap配置管理:存储配置参数,创建到容器挂载

在Kubernetes中,配置管理是应用部署的重要环节。ConfigMap作为存储非敏感配置数据的资源对象,能帮助我们实现"配置与代码分离",让应用部署更灵活。

一、什么是ConfigMap?

ConfigMap是Kubernetes中用于存储非加密配置数据的资源类型,它可以存储键值对、配置文件等内容,然后被Pod中的容器引用。其核心作用是:

  • 实现配置与应用程序代码分离
  • 方便不同环境(开发、测试、生产)使用不同配置
  • 避免配置硬编码到镜像或Pod定义中

简单说,ConfigMap就像一个"配置文件仓库",Pod可以按需获取其中的配置。

二、创建ConfigMap的4种方式

1. 从目录创建(适用于多配置文件)

如果有多个配置文件需要统一管理,可以直接从目录创建ConfigMap:

# 目录结构
test/
└── config/├── db.properties└── redis.properties# 从config目录创建(注意执行命令时的路径)
chenaws@k8smaster:~/test$ kubectl create configmap test-dir-config --from-file=config/
configmap/test-dir-config created

查看创建的ConfigMap:

chenaws@k8smaster:~/test$ kubectl describe cm test-dir-config
Name:         test-dir-config
Namespace:    default
Data
====
redis.properties:  # 文件名作为key
----
host: 127.0.0.1    # 文件内容作为value
port: 6379db.properties:
----
username=root
password=admin

2. 从单个文件创建(适用于独立配置文件)

对于单个配置文件(如应用的.yaml配置),可以直接指定文件路径创建:

# 创建application.yaml文件
chenaws@k8smaster:~/test$ cat application.yaml
spring:application:name: test-app
server:port: 8080# 从文件创建ConfigMap
chenaws@k8smaster:~/test$ kubectl create cm spring-boot-test-yaml --from-file=./application.yaml
configmap/spring-boot-test-yaml created

此时ConfigMap的key默认是文件名(application.yaml),value是文件内容。

3. 重命名配置文件的key

如果希望在ConfigMap中使用自定义的key(而非默认文件名),可以用key=value格式指定:

# 将application.yaml重命名为app.yml存入ConfigMap
chenaws@k8smaster:~/test$ kubectl create cm spring-boot-test-alises-yaml --from-file=app.yml=application.yaml
configmap/spring-boot-test-alises-yaml created# 查看结果(key已变为app.yml)
chenaws@k8smaster:~/test$ kubectl describe cm spring-boot-test-alises-yaml
Name:         spring-boot-test-alises-yaml
Data
====
app.yml:  # 自定义的key
----
spring:application:name: test-app
server:port: 8080

4. 直接指定键值对创建(适用于简单配置)

对于简单的键值对配置(如用户名、密码),可以用--from-literal直接创建:

# 创建包含用户名和密码的ConfigMap
chenaws@k8smaster:~/test$ kubectl create cm test-k-v-config --from-literal=username=root --from-literal=password=admin
configmap/test-k-v-config created# 查看结果
chenaws@k8smaster:~/test$ kubectl describe cm test-k-v-config
Name:         test-k-v-config
Data
====
password:  # 键
----
admin      # 值
username:
----
root

三、在Pod中使用ConfigMap的两种方式

创建ConfigMap后,Pod可以通过环境变量文件挂载两种方式使用其中的配置。

方式1:作为环境变量注入

适用于需要通过环境变量读取配置的场景(如应用启动参数)。

步骤1:创建存储环境变量的ConfigMap
chenaws@k8smaster:~/test$ kubectl create configmap test-env-config \
--from-literal=JAVA_OPTS_TEST='-Xms521m -Xms512m' \
--from-literal=APP_NAME=springboot-env-test
configmap/test-env-config created
步骤2:定义引用ConfigMap的Pod

创建env-test-pod.yaml

apiVersion: v1
kind: Pod
metadata:name: test-env-po
spec:containers:- name: env-testimage: alpinecommand: ["/bin/sh", "-c", "env;sleep 3600"]  # 输出环境变量后休眠env:# 引用ConfigMap中的key作为环境变量- name: JAVA_VM_OPTS  # 容器内的环境变量名valueFrom:configMapKeyRef:name: test-env-config  # 关联的ConfigMap名称key: JAVA_OPTS_TEST    # 引用的key- name: APP  # 另一个环境变量valueFrom:configMapKeyRef:name: test-env-configkey: APP_NAMErestartPolicy: Never  # Pod退出后不重启
步骤3:创建Pod并验证
# 创建Pod
chenaws@k8smaster:~/test$ kubectl create -f env-test-pod.yaml
pod/test-env-po created# 查看Pod状态(等待容器创建完成)
chenaws@k8smaster:~/test$ kubectl get po test-env-po
NAME         READY   STATUS    RESTARTS   AGE
test-env-po  1/1     Running   0          30s# 查看环境变量(确认ConfigMap的配置已注入)
chenaws@k8smaster:~/test$ kubectl logs -f test-env-po
JAVA_VM_OPTS=-Xms521m -Xms512m  # 来自ConfigMap
APP=springboot-env-test          # 来自ConfigMap
...

方式2:作为文件挂载到容器

适用于需要通过配置文件读取的场景(如数据库配置文件、应用配置文件)。

步骤1:使用之前创建的test-dir-config(包含db.properties和redis.properties)
步骤2:定义挂载ConfigMap的Pod

创建file-test-pod.yaml

apiVersion: v1
kind: Pod
metadata:name: test-configfile-po
spec:containers:- name: file-testimage: alpinecommand: ["/bin/sh", "-c", "sleep 3600"]  # 休眠等待查看volumeMounts:- name: config-volume  # 与下面的volume名称对应mountPath: /usr/local/mysql/conf  # 挂载到容器内的路径items:  # 可选:指定只挂载部分文件(不指定则挂载全部)- key: db.properties  # ConfigMap中的key(文件名)path: db.properties  # 挂载到容器内的文件名volumes:- name: config-volumeconfigMap:name: test-dir-config  # 关联的ConfigMap名称restartPolicy: Never
步骤3:创建Pod并验证
# 创建Pod
chenaws@k8smaster:~/test$ kubectl create -f file-test-pod.yaml
pod/test-configfile-po created# 进入容器查看挂载的文件
chenaws@k8smaster:~/test$ kubectl exec -it test-configfile-po -- sh
/ # cd /usr/local/mysql/conf/  # 挂载路径
/usr/local/mysql/conf # ls
db.properties  # 已挂载的文件
/usr/local/mysql/conf # cat db.properties 
username=root  # 内容与ConfigMap一致
password=admin

注意

  • 如果不指定items,ConfigMap中的所有文件(db.properties和redis.properties)都会被挂载到目标路径
  • 挂载的文件权限为只读(ro),无法在容器内修改

四、ConfigMap使用总结

1. 创建方式对比

创建方式命令示例适用场景
从目录创建--from-file=目录路径多配置文件统一管理
从单个文件创建--from-file=文件路径单个独立配置文件
重命名key创建--from-file=自定义key=文件路径需要修改配置文件在ConfigMap中的key
键值对直接创建--from-literal=key=value简单的键值对配置(如参数)

2. 使用方式对比

使用方式配置方式优点缺点
环境变量注入env.valueFrom.configMapKeyRef适合应用启动参数,读取方便配置更新后需重启Pod才能生效
文件挂载volumeMounts + volumes.configMap适合配置文件,支持部分文件挂载配置更新后会自动同步(约1分钟延迟)

3. 注意事项

  • ConfigMap与Pod必须在同一命名空间才能引用
  • 配置更新后:环境变量方式需重启Pod,文件挂载方式会自动同步(有延迟)
  • 不要用ConfigMap存储敏感信息(如密码、密钥),敏感信息应使用Secret

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91747.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91747.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Promise和回调地狱

顺序执行 vs. 异步操作: 当我们说“顺序执行”,通常是指 操作按顺序发生。而 异步操作 指的是操作在后台执行,不会阻塞其他操作,通常会使用回调、Promise 或 async/await 来处理结果。 在 Promise 链式调用 的情况下,虽…

LeetCode 65:有效数字

LeetCode 65:有效数字问题本质与挑战 需判断字符串是否为有效数字,规则涉及整数、小数、指数(e/E)的复杂组合,如: 整数:123、-45、678小数:1.2、.3、4.、5.6指数:1e10、2…

数据结构之顺序表应用与双指针法

元素删除通过元素移动的方式来模拟删除操作:将指定下标后的所有元素依次向前移动一位,覆盖要删除的元素,从而达到 "删除" 的效果。 通过自定义函数实现删除功能,需要传入数组、数组长度的指针(因为要修改长度…

Python编程基础与实践:Python基础数据类型入门

Python变量与数据类型实践 学习目标 通过本课程的学习,学员可以掌握Python中变量的基本概念,了解并能够使用Python的基本数据类型,包括整型、浮点型、字符串和布尔值。此外,学员还将学习如何在实际编程中声明和使用这些数据类型。…

深入解析C/C++函数变量传递:栈、堆与全局变量的生命周期之旅

资料合集下载链接: ​https://pan.quark.cn/s/472bbdfcd014​ 在编程学习中,函数是构建程序的基石,而理解变量如何在函数之间正确、安全地传递,则是从入门到进阶的关键一步。我们经常会遇到这样的困惑:为什么一个指针在某个函数里工作正常,传递给另一个函数后却变成了“…

Ubuntu18网络连接不上也ping不通网络配置问题排查与解决方法

Ubuntu 18启动以后发现连接不上网络,执行 ip a命令或者ifconfig都显示不了正确的地址(192.168.xxx.xxx)。 刚装好系统是没问题的,打算使用FTP开启ftp服务与windows互传文件,安装了net-tools插件就突然连不上网络了,怀疑是网络配置被修改了。 经过了一段时间折腾终于解决了,…

【计算机网络】Socket网络编程

目录 一、主机字节序列和网络字节序列 二、套接字地址结构 1、IPv4 地址结构 (sockaddr_in) 2、IPv6 地址结构 (sockaddr_in6) 3、通用套接字地址结构 (sockaddr) 4、Unix域套接字地址结构 (sockaddr_un) 5、专用 socket 地址结构 6、套接字地址结构的转换 字符串转二进制地址 …

网页操作自动化解决方案:如何用Browser-Use+CPolar提升企业运营效率

文章目录前言1. 安装Ollama2. Gemma3模型安装与运行3. 虚拟环境准备3.1 安装Python3.2. 安装conda4. 本地部署Brower Use WebUI4.1 创建一个新conda环境4.2 克隆存储库4.3 安装依赖环境4.4 安装浏览器自动化工具4.5 修改配置信息5. 本地运行测试6. 安装内网穿透6.1 配置公网地址…

Pycharm的设置过程

20250802 用于记录pycharm的设置过程 编辑器相关 python语言设置文件注释 在设置的编辑器部分,按照需求设置模板! 函数生成注释

GaussDB as的用法

通过使用 SQL,可以为表名称或列名称指定别名(Alias)。1 别名的作用SQL 别名用于为表或表中的列提供临时名称。 SQL 别名通常用于使列名更具可读性。 SQL 一个别名只存在于查询期间。 提高SQL执行效率与编写SQL代码效率。2 使用别名的场景在下…

Prim算法

一,prim算法逻辑1.理解:克鲁斯卡尔算法关注的是边,普里姆算法关注的是点把图中每个顶点比作孤岛,点亮一座孤岛就可以解锁附近的孤岛每次解锁的点都是离自身最近的点2.普里姆算法流程a.采用邻接矩阵表示,考虑要查找最小…

嵌入式学习之硬件——51单片机 1.0

一、基础知识1.什么是嵌入式?嵌入式以应用为中心,计算机技术为基础,软硬件可裁剪的专用计算机系统;2.嵌入式的应用?消费电子、无人驾驶、储能、新能源........3.嵌入式发展?(1)第一阶…

51c大模型~合集161

自己的原文哦~ https://blog.51cto.com/whaosoft/14079111 #这家国内公司,在给xx智能技术栈做「通解」 打通机器人智能化的关键:眼脑手。 xx智能(Embodied Intelligence)是 AI 领域里热度极高的赛道:给大模型…

Linux9 root密码修改

开机按e进入在linux行即quiet后面输入rd.break ctrlx进入内核输入mount -o remount,rw /sysrootchroot /sysrootpasswd root即可修改密码输入touch /.autorelabelexitexit等待即可

提示词增强工程(Prompt Enhancement Engineering)白皮书草稿

提示词增强工程(Prompt Enhancement Engineering)白皮书草稿 作者: 技术人进化社 Email:2819699195qq.com 日期: 2025年7月30日 1. 引言 随着大型语言模型(LLM)能力的飞速发展,如何高…

电路元器件

电流单位 电压 电阻单位 电阻的决定式 欧姆定律 交流电和直流电 交流电 串联电路 并联电路 在线模拟器 Circuitjs web 在线电路模拟器 下载

广泛分布于内侧内嗅皮层全层的速度细胞(speed cells)对NLP中的深层语义分析的积极影响和启示

速度细胞(Speed Cells)作为内侧内嗅皮层(MEC)的核心神经元,通过编码运动速度信息与网格细胞协同实现动态路径整合。这一神经机制为自然语言处理(NLP)的深层语义分析提供了以下关键启示和影响&am…

sql中的多表查询

在SQL中,多表查询用于从多个表中组合数据,常见的方法包括 ​连接查询(JOIN)​​ 和 ​子查询。以下是详细说明和示例:一、连接查询(JOIN)通过关联字段将多个表的数据合并,分为以下几…

Ruby 面向对象编程深入解析

Ruby 面向对象编程深入解析 引言 Ruby 作为一种动态、解释型、面向对象的语言,自1995年由日本程序员Yukihiro Matsumoto创造以来,凭借其简洁、灵活和强大的面向对象特性,在全球范围内获得了广泛的认可。本文将深入探讨Ruby的面向对象编程(OOP)特性,帮助读者更好地理解和…

Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现围栏羊驼的检测识别(C#代码,UI界面版)

Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现围栏羊驼的检测识别(C#代码,UI界面版)工业相机使用YoloV8模型实现围栏羊驼的检测识别工业相机通过YoloV8模型实现围栏羊驼的检测识别的技术背景在相机SDK中获取图像转换图像的代码分…