k8s使用volume将ConfigMap作为文件或目录直接挂载_两种方法,轻松上手ConfigMap!

属性配置文件在任何应用程序中都非常重要。它们不仅可以让应用程序具备灵活性,还能够根据文件中配置的值产生不同的功能。实际上,在staging、开发、测试、UAT或生产环境中,我们都使用属性配置文件来驱动不同的行为。

通常情况下,属性配置文件会与代码一起打包,并且整个程序包都部署在执行环境中。这一方法中,如果你想更改任何配置(即便配置文件中也发生了更改),你需要重新发布代码。尽管这种方法行之有效,但是对于现在而言,效率还是太低了。因此我们需要一种外部化的配置。

在本文中,我将阐述Kubernetes如何为容器提供外部化、灵活的配置以及可移植性。ConfigMap主要是为了让应用程序的配置和部署解耦,这一功能可以让容器化应用程序具备可移植性。

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

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

  2. 将ConfigMap挂载为文件

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

f11724b1acdc647d76baba1d189557d1.png

将ConfigMap作为一种环境变量

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

87deefcdfbed0f44b885927cd9730439.png

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

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

a75907ca696dbc409c10ffac217f7d0f.png

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

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

6430fb30cf601f3155ecdf5155a999f1.png

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

92710f7c674c31479f32c5f309be705e.png

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

888aeacd932cab193ae0487470b035da.png

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

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

a49347263f50bf11943cc563140965da.png 9a60cb0790c198846bd128bc04ccb577.png f11724b1acdc647d76baba1d189557d1.png

将ConfigMap挂载为文件

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

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

d3b0f28eb6ef74a70bb345bbb505581b.png

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

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

  1. 当前目录的/config 子目录

  2.  当前目录

  3.  classpath / config包

  4.  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”目录中。

3853196c7381cf6701fee31f23b9fb58.png

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

b6915af9ce57832f5724ace44710bccf.png

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

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

c635f7ec85c54d431f1b4678b851ede0.png

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

以下是K8S pod配置文件:

88bc6879dd1b00bd7fe23c4df77f962d.png

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

4d53fb14a42882e5de40fc81e907bd3f.png

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

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

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

f2437247bd4e491c3e9eabd87167c8af.png

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

这个项目可以从我的Github中获取:

https://github.com/nikhilbhide/MicroServicesTutorial/tree/master/k8s_spring_boot_hello_world_config_map

小声提醒:

昨天圣诞解谜游戏的答案已经推送到今天的次条了,点开公众号即可查看。

2d101bd27954b4a5bbbe72e7078bef4b.png

推荐阅读

超长干货丨Kubernetes网络快速入门完全指南

独家!K8S安全成头等大事,2019年K8S漏洞盘点与解读

服务网格数据平面的关键:层层剖析Envoy配置

2d101bd27954b4a5bbbe72e7078bef4b.png

Rancher年终招聘啦!北京、上海、深圳、沈阳四地火热招聘中,快来加入我们!

解决方案架构师、测试、Golang工程师等众多岗位等你来投!还有更多岗位详情,戳文看咯!

简历投递地址:chinajobs@rancher.com

46d20e73b1a7edc5d42a3425e826a939.png 2d101bd27954b4a5bbbe72e7078bef4b.png

About Rancher Labs

Rancher Labs由CloudStack之父梁胜创建。旗舰产品Rancher是一个开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。Rancher一向因操作体验的直观、极简备受用户青睐,被Forrester评为2018年全球容器管理平台领导厂商,被Gartner评为2017年全球最酷的云基础设施供应商。

目前Rancher在全球拥有超过一亿的下载量,并拥有包括中国人寿、华为、中国平安、兴业银行、民生银行、平安证券、海航科技、厦门航空、上汽集团、海尔、米其林、丰田、本田、中船重工、中联重科、迪斯尼、IBM、Cisco、Nvidia、辉瑞制药、西门子、CCTV、中国联通等全球著名企业在内的共27000家企业客户。

e69230b0bbf8095bc3b32954876aa4ed.png

点击阅读原文,投递简历!

↓↓↓
  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值