实战 K8s ConfigMap:打造动态可配置的云原生应用

🐇明明跟你说过:个人主页

🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅

🔖行路有良友,便是天堂🔖

目录

 一、前言

1、k8s简介

2、ConfigMap简介 

二、ConfigMap的使用场景

1、环境变量配置

2、配置文件挂载

三、ConfigMap实践

1、ConfigMap YAML文件语法

2、与Pod的结合使用

3、ConfigMap的命名规范

四、ConfigMap核心价值总结 


在上一章节中,我们讲述了configmap的介绍、定义、原理等,本期我们将详细介绍configmap在k8s中的实际应用

 一、前言

1、k8s简介

 Kubernetes单词起源于希腊语, 是“舵手”或者“领航员、飞行员”的意思。

Kubernetes(简称K8s)的前世今生可以追溯到谷歌(Google)内部的一个项目,它起源于2003年,当时谷歌正面临着不断增长的应用程序和服务的管理挑战。这个项目最初被称为"Borg",是一个早期的容器编排系统。Borg 的成功经验成为 Kubernetes 开发的契机。

 有关k8s起源的介绍,请参考《初识K8s之前世今生、架构、组件、前景》这篇文章

Kubernetes的优点包括可移植性、可伸缩性和扩展性。它使用轻型的YAML清单文件实现声明性部署方法,对于应用程序更新,无需重新构建基础结构。管理员可以计划和部署容器,根据需要扩展容器并管理其生命周期。借助Kubernetes的开放源代码API,用户可以通过首选编程语言、操作系统、库和消息传递总线来构建应用程序,还可以将现有持续集成和持续交付(CI/CD)工具集成。

2、ConfigMap简介 

K8s的ConfigMap是一种用于存储配置数据的API对象,属于Kubernetes中的核心对象。它用于将应用程序的配置信息与容器镜像分离,以便在不重新构建镜像的情况下进行配置的修改和更新。ConfigMap可以存储键值对、文本文件或者以特定格式组织的配置文件,例如环境变量、命令行参数等。

ConfigMap的主要作用是提供一个集中管理和传递配置信息的机制,让应用程序能够从ConfigMap中获取配置数据。这样,在不修改容器镜像的前提下,可以根据需要动态地修改应用程序的配置参数。通过kubectl命令行工具或Kubernetes API,可以创建、更新和删除ConfigMap。

在使用K8s部署应用时,将配置信息写入代码会导致一个问题,即每次更新配置时都需要重新打包镜像。而ConfigMap则可以将配置信息和Docker镜像解耦,解决了这个问题。此外,在微服务架构中,多个服务可能共享相同的配置,使用ConfigMap可以方便地实现配置共享。

二、ConfigMap的使用场景

1、环境变量配置

ConfigMap 在 Kubernetes 中有多种使用场景,其中之一就是配置环境变量。通过将配置数据存储在 ConfigMap 中,可以轻松地将这些数据注入到 Pod 的容器中作为环境变量使用。

这样做的好处包括:

  • 解耦配置与容器镜像: 将配置数据与容器镜像分离,使得容器镜像更加通用和可复用,而配置数据可以根据需要进行灵活调整。
  • 动态配置: 可以在不重新构建容器镜像的情况下,通过更新 ConfigMap 来动态地更改容器的配置。
  • 适用于不同环境: 可以为不同的环境(例如开发、测试、生产)创建不同的 ConfigMap,从而实现环境间配置的隔离和管理。

使用 ConfigMap 配置环境变量的一般步骤包括:

  1. 创建一个包含配置数据的 ConfigMap 对象,其中键值对代表了环境变量的名称和值。
  2. 在 Pod 的配置文件中,将 ConfigMap 挂载为一个卷。
  3. 配置容器镜像中的应用程序,使其使用 ConfigMap 中定义的环境变量。

下面是一个示例 YAML 文件,展示了如何在 Kubernetes 中使用 ConfigMap 配置环境变量:

apiVersion: v1
kind: ConfigMap
metadata:name: my-configmap
data:DATABASE_URL: "mysql://user:password@mysql-service:3306/mydatabase"API_KEY: "my-secret-api-key"---apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imageenvFrom:- configMapRef:name: my-configmap


在这个示例中,my-configmap 是一个包含了 DATABASE_URL 和 API_KEY 两个键值对的 ConfigMap。然后,my-pod Pod 使用了这个 ConfigMap,并将其注入到了容器的环境变量中。

2、配置文件挂载

  1. ConfigMap 在 Kubernetes 中的另一个常见用途是挂载配置文件。通过将配置文件存储在 ConfigMap 中,并将其挂载到 Pod 的文件系统中,可以实现对应用程序配置文件的动态更新,而无需重新启动容器。

使用 ConfigMap 挂载配置文件的一般步骤包括:

  1. 创建一个包含配置文件内容的 ConfigMap 对象,其中键值对代表了配置文件的文件名和内容。
  2. 在 Pod 的配置文件中,将 ConfigMap 挂载为一个卷,并指定挂载路径。
  3. 在容器的配置中,将配置文件路径指向挂载的卷中的文件。

下面是一个示例 YAML 文件,展示了如何在 Kubernetes 中使用 ConfigMap 挂载配置文件:

apiVersion: v1
kind: ConfigMap
metadata:name: my-configmap
data:app.properties: |key1=value1key2=value2key3=value3---apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imagevolumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:name: my-configmap

在这个示例中,my-configmap 是一个包含了 app.properties 键值对的 ConfigMap,其中包含了应用程序的配置文件内容。然后,my-pod Pod 使用了这个 ConfigMap,并将其挂载为一个卷到容器的 /etc/config 路径下。这样一来,应用程序就可以直接读取挂载的配置文件,而配置文件的内容可以通过更新 ConfigMap 来动态变更,无需重启容器。

三、ConfigMap实践

1、ConfigMap YAML文件语法

ConfigMap 的 YAML 文件语法与其他 Kubernetes 资源的 YAML 文件语法类似,主要包括以下几个部分:

  • apiVersion: 表示要使用的 Kubernetes API 版本。
  • kind: 表示要创建的资源类型,这里是 ConfigMap。
  • metadata: 元数据,包括资源的名称和其他属性。
  • data: 配置数据的键值对,可以包含多个键值对,每个键值对表示一个配置项。

下面是一个示例 ConfigMap 的 YAML 文件:

apiVersion: v1
kind: ConfigMap
metadata:name: example-configmap
data:key1: value1key2: value2key3: value3


在这个示例中,我们定义了一个名为 example-configmap 的 ConfigMap,其中包含了三个键值对,分别是 key1: value1、key2: value2 和 key3: value3。

2、与Pod的结合使用

在 Kubernetes 中,可以使用 ConfigMap 将配置文件挂载到 Pod 中,以便在容器内部使用。下面是一个示例 YAML 文件,用于创建一个使用 nginx 镜像的 Pod,并将配置文件通过 ConfigMap 挂载进去:

apiVersion: v1
kind: ConfigMap
metadata:name: nginx-config
data:nginx.conf: |server {listen       80;server_name  localhost;location / {root   /usr/share/nginx/html;index  index.html index.htm;}}
---
apiVersion: v1
kind: Pod
metadata:name: nginx-pod
spec:containers:- name: nginx-containerimage: nginxvolumeMounts:- name: nginx-config-volumemountPath: /etc/nginx/nginx.confsubPath: nginx.confvolumes:- name: nginx-config-volumeconfigMap:name: nginx-config


这个 YAML 文件定义了一个名为 nginx-config 的 ConfigMap,其中包含了一个 nginx.conf 的配置文件。然后定义了一个名为 nginx-pod 的 Pod,使用了 nginx 镜像,并通过 ConfigMap 将 nginx.conf 配置文件挂载到了容器内的 /etc/nginx/nginx.conf 路径下。

通过这种方式,Pod 内的 nginx 容器就可以使用 ConfigMap 中定义的配置文件来配置 nginx 服务器了。

3、ConfigMap的命名规范

ConfigMap 的命名规范通常遵循 Kubernetes 资源的命名规范,主要包括以下几点:

  • 名称长度: ConfigMap 的名称应尽量简短,但要具有描述性,以便易于理解和识别。
  • 字符集: 名称可以包含小写字母、数字和连字符(-)。
  • 唯一性: 在同一个命名空间内,ConfigMap 的名称必须是唯一的,不允许存在重复的名称。
  • 名称规范: 推荐使用有意义的名称,以反映 ConfigMap 存储的配置信息的用途或内容。

例如,如果 ConfigMap 存储了用于配置应用程序的信息,可以使用应用程序名称作为 ConfigMap 的一部分。以下是一个示例:

app-configmap


根据实际情况,您还可以在名称中添加其他信息,以进一步描述 ConfigMap 的内容。例如:

nginx-configmap
database-configmap

四、ConfigMap核心价值总结 

  1. 配置集中管理: ConfigMap 允许将应用程序配置从容器镜像中分离出来,使得配置可以独立于容器进行管理。这样做可以降低容器镜像的耦合度,并更方便地管理和更新配置。
  2. 容器化应用程序的配置: 通过将配置信息存储在 ConfigMap 中,可以轻松地将这些配置注入到容器化的应用程序中。这样做可以使得应用程序更加灵活,并且更容易在不同环境中进行部署和运行。
  3. 动态配置更新: ConfigMap 中的配置可以随时更新,而不需要重新部署应用程序。这样可以实现动态配置更新,使得应用程序可以在不停止运行的情况下更新配置,提高了系统的可用性和灵活性。
  4. 与环境变量和卷挂载结合: ConfigMap 的配置可以通过环境变量或卷挂载的方式注入到容器中,从而实现容器内部的动态配置。这样可以使得应用程序可以轻松地访问配置信息,并且可以根据需要进行动态调整。
  5. 与其他资源的集成: ConfigMap 可以与其他 Kubernetes 资源进行集成,例如 Deployment、StatefulSet、DaemonSet 等。这样可以实现对整个应用程序的配置管理,使得应用程序的部署和运行更加便捷和可控。

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Kubernetes的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

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

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

相关文章

【每日刷题】Day16

【每日刷题】Day16 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 24. 两两交换链表中的节点 - 力扣(LeetCode) 2. 160. 相交链表 - 力扣&…

xcode c++项目设置运行时参数

在 Xcode 项目中,你可以通过配置 scheme 来指定在运行时传递的参数。以下是在 Xcode 中设置运行时参数的步骤: 打开 Xcode,并打开你的项目。在 Xcode 菜单栏中,选择 "Product" -> "Scheme" -> "E…

一次配置Docker环境的完整记录

一次配置Docker环境的完整记录 Docker环境搭建报错与解决报错一报错二报错三 Docker环境搭建 本节介绍了一次配置docker环境的完整记录: 编写Dockerfile文件: FROM pytorch/pytorch:1.10.0-cuda11.3-cudnn8-develRUN rm /etc/apt/sources.list.d/cuda.l…

LeetCode 409—— 最长回文串

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 要想组成回文串,那么只有最中间的字符可以是奇数个,其余字符都必须是偶数个。 所以,我们先遍历一遍字符串,统计出每个字符出现的次数。 然后如果某个字符出现了偶…

C++string类(个人笔记)

string类 1.认识string的接口以及熟练使用常用接口1.1string类对象的常见构造1.2string类对象的容量操作1.3string类对象的访问及遍历操作1.4string类对象的修改操作 2.vs 和g下string结构的说明3.string类运用的笔试题4.string类的模拟实现 1.认识string的接口以及熟练使用常用…

使用 Docker 部署 SurveyKing 调查问卷系统

1)SurveyKing 介绍 SurveyKing 是一款功能强大、操作简便的开源问卷系统。它不仅满足了用户对问卷调查的基本需求,还提供了丰富的逻辑设置和灵活的问题设置,使得问卷制作更加智能化和个性化。此外,SurveyKing 还具有快速部署和安全…

【从浅学到熟知Linux】进程控制下篇=>进程程序替换与简易Shell实现(含替换原理、execve、execvp等接口详解)

🏠关于专栏:Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 🎯每天努力一点点,技术变化看得见 文章目录 进程程序替换什么是程序替换及其原理替换函数execlexeclpexecleexecvexecvpexecvpeexecve 替换函数总结实现…

深入剖析跨境电商平台风控机制,探索测评安全与稳定的秘诀

在跨境电商测评市场鱼龙混杂的当下,测评过程中可能隐藏的陷阱保持高度警觉。多年的测评经验告诉我们,选择一个适合的测评系统对于项目的成功至关重要。近年来,测评技术如雨后春笋般涌现,市场上涌现出众多测评系统,覆盖…

配置路由器实现互通

1.实验环境 实验用具包括两台路由器(或交换机),一根双绞线缆,一台PC,一条Console 线缆。 2.需求描述 如图6.14 所示,将两台路由器的F0/0 接口相连,通过一台PC 连接设备的 Console 端口并配置P地址(192.1…

计算机网络的七层模型

序 OSl(Open System Interconnect),即开放式系统互联。一般都叫OSI参考模型。在网络编程中最重要的模型就是OSI七层网络模型和TCP/IP四层网络模型 一、OSI七层参考模型以及功能概述 二、各层的具体职能以及实际应用 1.应用层: OSI参考模型中最接近用…

官方助力:SpringAI快速尝鲜体验(SpringBoot3+Gradle8+JDK17)

SpringAI 自从OpenAI的ChatGPT爆火之后,各种AI大模型开始席卷互联网,作为知名框架的Spring官方也是小小的顺应了一波潮流,就在不久前官方推出了针对AI的部分,称为SpringAI目前最新版本为0.8.1,下面是官网的截图。 直通车https:/…

实验一:配置IP地址

1.实验环境 主机A和主机B通过一根网线相连 2.需求描述 为两台主机配置IP地址,验证IP地址是否生效,验证 同一网段的两台主机可以互通,不同网段的主机不能 直接互通 3.推荐步骤 1. 为两台主机配置P地址,主机A为10.0.10.10&#…

开发工人员必备的XCheck代码检测工具

Xcheck(Application Security Development,应用安全开发),是一款由腾讯纯自研的静态代码分析工具,它是一款致力于检查 Web 类风险的 SAST(Static Application Security Testing,静态代码分析&am…

聚生态 智算兴,超聚变的行业生态之“变”

千帆竞发浪潮涌,独领风骚显英豪。当前,在算力基础设施市场,竞争正日趋白热化。一方面,企业数字化转型走向深入,对算力产生了更加迫切的需求;另一方面,以大模型为代表的AI技术的快速发展与落地应…

十大排序——7.希尔排序

下面我们来看一下希尔排序 目录 1.介绍 2.代码实现 3.总结与思考 1.介绍 希尔排序是插入排序的一种优化,可以理解为是一种分组的插入排序。 希尔排序的要点: 简单来说,就是分组实现插入,每组元素的间隙称为gap,…

【日常记录】【CSS】利用动画延迟实现复杂动画

文章目录 1、介绍2、原理3、代码4、参考链接 1、介绍 对于这个效果而言,最先想到的就是 监听滑块的input事件来做一些操作 ,但是会发现,对于某一个节点的时候,这个样式操作起来比较麻烦 只看这个代码的话,发现他用的是动画&#x…

Java工程师常见面试题:Java基础(一)

1、JDK 和 JRE 有什么区别? JDK是Java开发工具包,它包含了JRE和开发工具(如javac编译器和java程序运行工具等),主要用于Java程序的开发。而JRE是Java运行环境,它只包含了运行Java程序所必须的环境&#xf…

记【k8s】:访问 Prometheus UI界面:kubernetes-etcd (0/1 up) Error : out of bounds

记【k8s】:访问 Prometheus UI界面:kubernetes-etcd (0/1 up) Error : out of bounds 1、报错详情2、解决方法 💖The Begin💖点点关注,收藏不迷路💖 出现 “out of bound…

java正则表达式教程

什么是正则表达式: 正则表达式是一种用来描述字符串模式的语法。在 Java 中,正则表达式通常是一个字符串,它由普通字符(例如字母、数字、标点符号等)和特殊字符(称为元字符)组成。这些特殊字符可…

酷开科技将幸福放大,第一届酷开大使启程!

注意了!第一届酷开大使来了!无论年龄、性别、职业、地域……从来自五湖四海的近千名酷粉中,经过了层层筛选之后,终于迎来了65位第一届酷开大使! 他们来自我国54个不同的城市,他们中有能人巧匠,…