千家信息网

ConfigMap在kubernetes中的应用

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,ConfigMap概念在生产环境中经常会遇到需要修改配置文件的情况,传统的修改方式不仅会影响到服务的正常运行,而且操作步骤也很繁琐。为了解决这个问题,kubernetes项目从1.2版本引入了Conf
千家信息网最后更新 2025年12月02日ConfigMap在kubernetes中的应用

ConfigMap概念

在生产环境中经常会遇到需要修改配置文件的情况,传统的修改方式不仅会影响到服务的正常运行,而且操作步骤也很繁琐。为了解决这个问题,kubernetes项目从1.2版本引入了ConfigMap功能,用于将应用的配置信息与程序的分离。这种方式不仅可以实现应用程序被的复用,而且还可以通过不同的配置实现更灵活的功能。在创建容器时,用户可以将应用程序打包为容器镜像后,通过环境变量或者外接挂载文件的方式进行配置注入。

ConfigMap是以key:value的形式保存配置项,既可以用于表示一个变量的值(例如config=info),也可以用于表示一个完整配置文件的内容(例如server.xml=…)。

如果你对Spring Cloud的生态很熟悉,那么接下来你会发现ConfigMap与Spring Cloud server十分类似。这里有两种使用ConfigMap的方法:

  1. 将ConfigMap作为一种环境变量

  2. 将ConfigMap挂载为文件

让我们开始进行实践!我们将使用一个简单的应用程序,基于Spring Boot、Docker和Kubernetes进行演示

将ConfigMap作为一种环境变量

在本例中,我们将在Kubernetes中创建一个新的环境变量,并将其用于代码中。在Java中,可以通过System.getenv(String) API在代码中使用环境变量。在常规Java应用程序中,可以在J2EE应用程序容器(如Oracle WLS或IBM WAS)中设置环境变量,也可以在OS中设置环境变量。然而,在Kubernetes中情况并不相同。要使用环境变量,我们必须根据literal创建配置映射。



通过kubectl create configmap命令,我们创建了两个环境变量:app.name 和 app.desc。

我们来了解一下这背后发生了什么。



现在注意数据部分,在数据部分下,你会找到键值对。从技术上来说,ConfigMap仅仅是键值存储。属性的名称是键,属性的值是值。应用程序的代码会要求你查找这些键值对。

为了在Java代码中使用此环境变量,我们需要编写以下代码:



下面的代码段定义了两个K8s环境变量,分别为" SPRING_BOOT_HELLO_WORLD_APP_NAME"和" SPRING_BOOT_HELLO_WORLD_DESC"。这些变量将从ConfigMap app-env-config获取值。需要重点关注的是键。



属性配置文件可以在单个文件中保存很多个属性,以在不同环境中运行应用程序。在Spring Boot应用程序中,属性保存在classpath下的application.properties文件中。我们来看一下打包在应用程序jar包中的application.properties文件。



我们正在使用命令kubectl create configmap从单个文件或从多个文件创建ConfigMap。

现在让我们查看完整的代码


将ConfigMap挂载为文件

在本节中,我将说明如何使用ConfigMap挂载文件以外部化配置。在此示例中,我将使用ConfigMap来外部化application.properties文件。即使默认文件打包在jar中,也位于src / main / resources下。简单来说,我们将通过ConfigMap所提供的文件来覆盖默认文件。

第一步是从application.properties创建ConfigMap。让我们了解如何在K8s中存储此ConfigMap

通过ConfigMap,我们将挂载application.properties文件到K8s集群中,并且可以在应用程序中使用它。请注意,数据部分包含了application.properties的内容,键是文件名。

现在,为了覆盖默认配置文件,我们需要(通过ConfigMap)将application.properties挂载到应用程序的classpath中。Spring Boot通过提供不同的选项来提供这一功能。SpringApplication在以下位置从application.properties文件加载属性,并将它们添加到Spring Environment

  • 当前目录的/config 子目录

  • 当前目录

  • classpath / config包

  • The classpath root

如果你想了解更多信息,可以查阅官方文档
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files

最简单,最好的方法是将application.properties挂载在" / config"目录中。



仔细检查挂载路径,请注意ConfigMap的名称应与我们在上面创建的app-file-configmap完全相同,键为文件名。另外,请确保将volume mount配置的名称更改为volume配置的名称

这段代码说明了如何在application.properties文件中定义属性。如果使用Spring推荐的标准方法的话,这十分简单。具体而言,就是使用@Value 注释将属性值注入到变量中。

现在,我们可以继续进行ConfigMap示例应用程序了。我们来看一下完整的代码段。



让我们创建一个Docker镜像并将其上传到Dockerhub。在本例中,镜像名称是k8s-springboot-helloworld-configmap-app。

以下是K8S pod配置文件:



现在我们使用NodePort服务类型创建服务,以便可以从K8S集群外部使用Welcome服务。



现在,让我们把这些更改应用于K8S

导航到浏览器并访问http://:/welcome。在本例,应该是http:// 192.168.99.100:30880/welcome

认真观察输出,返回的字符串是:



同时,检查代码中硬编码的环境变量的默认值,以及打包在jar中的application.properties的property默认值。你发现从ConfigMap中获取了环境变量和application.properties的值。

文件 变量 环境 应用 程序 配置 应用程序 代码 属性 名称 服务 不同 功能 容器 数据 方式 方法 目录 部分 镜像 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全找哪个部门 华美云服务器怎么给op VB可考数据库工程师吗 云服务器防攻击 CSGO服务器正在连接 网络安全进校园小学绘画 数据库前面的加号没有了 河南联通服务器价格 苹果台式机服务器是干什么的 ad软件开发步骤 幼儿园网络安全每日提醒 国家网络安全学院是谁投资的 台湾香港有哪些数据库 软件开发收入拆分硬件 济南络明网络技术有限公司 杭州计算机应用软件开发哪家好 碧蓝航线最热闹服务器 软件开发各组提升方法 公安局内部组织网络安全教育 汽车软件开发管理体系认证 政府办网络安全法宣传活动总结 软件开发公司要缴增值税不 计算机网络和计算机网络技术 查询数据库地址和端口 海南鸿雁互联网科技有限公司 数据库课程设计考试预约系统 .net软件开发电脑配置 软件开发研究方向是什么意思 数据库数据文件是什么 软件开发有成本吗
0