【云原生】K8S-ConfigMap 实现应用和配置分离
文章目录
- 前言
- ConfigMap 背景
- ConfigMap 创建方式
- ConfigMap 的使用
- 使用 ConfigMap 的注意事项
- 总结
前言
Kubernetes 是目前最流行的容器编排系统之一,它提供了丰富的功能来支持容器化应用程序的管理和部署。
ConfigMap 是 Kubernetes 中重要的资源对象,用于存储不敏感的配置信息并将其注入到 Pod 中。本文将介绍 ConfigMap 的创建方式和使用方法,并讨论其注意事项。
ConfigMap 背景
应用程序的运行可能会依赖一些配置,而这些配置又是可能会随着需求产生变化的,如果我们的应用程序架构不是应用和配置分离的,那么就会存在当我们需要去修改某些配置项的属性时需要重新构建镜像文件的窘境。
现在,ConfigMap组件可以很好的帮助我们实现应用和配置分离,避免因为修改配置项而重新构建镜像。 ConfigMap 用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。ConfigMap 跟 Secret 很类似,但它可以更方便地处理不包含敏感信息的字符串。
ConfigMap 创建方式
ConfigMap 可以通过多种方式创建,包括:
-
命令行工具 kubectl
可以使用 kubectl create configmap 命令从文件或文本创建 ConfigMap。
例如,以下命令将名为 my-config 的 ConfigMap 从文件创建:kubectl create configmap my-config --from-file=config.properties -
声明式 YAML 文件
可以使用声明式 YAML 文件定义 ConfigMap 对象。
例如,以下 YAML 定义了一个名为 my-config 的 ConfigMap:apiVersion: v1 kind: ConfigMap metadata:name: my-config data:DB_USERNAME: adminDB_PASSWORD: password123 -
配置自动加载
在 Kubernetes 中,可以使用特定的挂载点来自动加载 ConfigMap 作为环境变量或卷。
这可以通过 Pod 中的 Volume 和环境变量实现。例如:apiVersion: v1 kind: Pod metadata:name: my-pod spec:containers:- name: my-containerimage: my-imagevolumeMounts:- name: config-volumemountPath: /etc/configenv:- name: DB_USERNAMEvalueFrom:configMapKeyRef:name: my-configkey: DB_USERNAMEvolumes:- name: config-volumeconfigMap:name: my-config
ConfigMap 的使用
在 Kubernetes 中,有三种主要方式可以将 ConfigMap 注入到 Pod 中。
-
定义成环境变量
在 Pod 中,可以将 ConfigMap 数据注入到容器的环境变量中。假设已经创建了一个名为 my-config 的 ConfigMap,包含以下数据:
DB_USERNAME=admin DB_PASSWORD=password123可以通过定义环境变量引用 ConfigMap 的键来将该数据注入到容器中。例如:
apiVersion: v1 kind: Pod metadata:name: my-pod spec:containers:- name: my-containerimage: my-imageenv:- name: DB_USERNAMEvalueFrom:configMapKeyRef:name: my-configkey: DB_USERNAME- name: DB_PASSWORDvalueFrom:configMapKeyRef:name: my-configkey: DB_PASSWORD -
使用卷
另一种常见的方法是将 ConfigMap 数据作为文件或目录挂载到容器中。假设已经创建了一个名为 my-config 的 ConfigMap,包含以下数据:
config.properties:server.port=8080database.url=jdbc:mysql://localhost/mydb则可以使用以下 YAML 定义一个 Pod,将 ConfigMap 作为 Volume 挂载到容器中:
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-config在容器内,可以使用与卷相同的路径来访问 ConfigMap 中的数据。
-
自定义全局参数
还可以将 ConfigMap 数据作为自定义全局参数传递给 Kubernetes 对象,如 Deployment。
例如,以下 YAML 定义了一个 Deployment,其中参数可以通过 ConfigMap 设置:
apiVersion: apps/v1kind: Deploymentmetadata:name: my-deploymentspec:replicas: 1selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: my-imagecommand: ["/bin/myapp"]args: ["--config=/etc/myapp/config.json"]env:- name: MY_APP_ENVvalue: "production"volumeMounts:- name: config-volumemountPath: /etc/myapp/volumes:- name: config-volumeconfigMap:name: my-config
在此示例中,我们通过 ConfigMap 将 myapp 的配置文件传递给容器,并将环境设置为 production。
使用 ConfigMap 的注意事项
ConfigMap 是 Kubernetes 中非常有用的功能,但要正确使用它需要注意以下几点:
-
避免包含敏感信息
由于 ConfigMap 存储在明文中,因此不应该将其中包含敏感信息,例如密码或密钥等。这些信息应该以其他安全方式存储和管理,例如 Kubernetes 的 Secret 对象。
-
注意 ConfigMap 与容器之间的同步性
如果在 ConfigMap 中更改了数据,Pod 中的容器可能无法及时获得更改的信息。这可以通过将 Pod 设置为重新启动或在运行时重新加载 ConfigMap 来解决。
-
指定必须存在的键
如果在容器中引用 ConfigMap 的不存在密钥,则容器将无法启动。因此,建议在 YAML 文件中定义 ConfigMap 时指定必须存在的键。
-
存储 ConfigMap 在默认 namespace 下可能会产生问题
如果 ConfigMap 存储在默认命名空间中,则在另一个命名空间中使用 ConfigMap 时可能会出现问题。因此,建议将 ConfigMap 存储在自己的命名空间中。
总结
ConfigMap 是 Kubernetes 中重要的资源对象,可以存储不敏感的配置信息并将其注入到 Pod 中。
本文介绍了 ConfigMap 的创建方式和使用方法,并讨论了其注意事项。正确地使用 ConfigMap 可以大大简化应用程序的管理和部署,提高可靠性和安全性。
相关文章:
【云原生】K8S-ConfigMap 实现应用和配置分离
文章目录前言ConfigMap 背景ConfigMap 创建方式ConfigMap 的使用使用 ConfigMap 的注意事项总结前言 Kubernetes 是目前最流行的容器编排系统之一,它提供了丰富的功能来支持容器化应用程序的管理和部署。 ConfigMap 是 Kubernetes 中重要的资源对象,用…...
java -测距工具(经纬度)
代码 /*** 测距工具* author qb*/ public class DistanceUtils {/*** 赤道半径*/private static final double EARTH_RADIUS 6378.137;private static double rad(double d) {return d * Math.PI / 180.0;}/*** Description : 通过经纬度获取距离(单位:米)* Group…...
postgres分区表的创建-基于继承
参考文档: http://postgres.cn/docs/12/ddl-partitioning.html 创建基于继承的分区表的步骤 1 创建父表 2 创建子表,从父表继承过来 3 创建函数及触发器,使插入的数据根据规则,插入到对应的子表中 -- 创建父表 CREATE TABLE a…...
Docker应用部署
文章目录Docker 应用部署一、部署MySQL二、部署Tomcat三、部署Nginx四、部署RedisDocker 应用部署 一、部署MySQL 搜索mysql镜像 docker search mysql拉取mysql镜像 docker pull mysql:5.6创建容器,设置端口映射、目录映射 # 在/root目录下创建mysql目录用于存…...
使用golang实现日志收集系统的logagent
整体架构 参考 七米老师的日志收集项目 主要用go实现logagent的部分,logagent的作用主要是实时监控日志追加的变化,并将变化发送到kafka中。 之前我们已经实现了 用go连接kafka并向其中发送数据,也实现了使用tail库监控日志追加操作。 我们…...
小红书点赞不显示怎么回事?小红书笔记评论被吞怎么办
小红书作为一个互联网产品,是一个软件。既然是软件就会有一定的程序漏洞,这是无法避免的。但是很多时候其实并不一定是漏洞的问题。今天就来和大家谈谈小红书点赞不显示怎么回事,小红书评论被吞又是怎么一回事,这些难道都是程序性…...
地址变换和缺页置换习题
1.设某进程页面的访问序列为4,3,2,1,4,3,5,4,3,2,1,5,当分配给该进程的内存页框数分别为3和4时,对于先进先出,最近最少使用,最佳页面置换算法,分别发生多少次缺页中断? 答: 分配的…...
PAT 乙级 1010 一元多项式求导(解题思路+AC代码)
题目: 设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分…...
一维河流污染持续排放模拟(水污染扩散)
一、处理河道转换为geojson数据 以淮河为例处理示例数据: {"type": "FeatureCollection","features": [{"geometry": {"coordinates": [[[115.5803,34.4982],[115.5922,34.498],[115.6061,34.4994],[115.6203,…...
数据优化 | CnOpenDataA股上市公司招聘数据
就业是经济的“晴雨表”,更是社会的“稳定器”。稳定和扩大就业一直是国家宏观调控的重要目标,2021年中央经济工作会议八次提到“就业”这一关键词。在新冠肺炎疫情蔓延、世界经济下行及人口老龄化加快等多重因素的叠加之下,稳就业保民生成为…...
nacos和eureka的区别
nacos和eureka的区别 Eureka是什么 Eureka详解Nacos是什么 Nacos详解Nacos和Eureka的区别 CAP理论连接方式服务异常剔除操作实例方式自我保护机制 Eureka是什么 Eureka 是Spring Cloud 微服务框架默认的也是推荐的服务注册中心,由Netflix公司与2012将其开源出来,Eureka基于RE…...
canvas.toDataURL生成图片报错的解决方案
问题原因: toDataURL方法存在跨域限制,如果执行时dom内含有跨域的图片则浏览器执行时会报错。 这个根据不同的系统有不同的表现,例如:生成完毕但控制台有warning类型的警告,或者直接异常报error。 解决思路ÿ…...
电容笔和Apple pencil的区别是什么?好用电容笔推荐
Apple Pencil与目前市场上常见的电容笔最大的不同之处在于,普通电容笔并不具备苹果Pencil特有的重力压感,而仅仅是一种倾斜的压感。不过,其在其它方面的表现也很出色,与Apple Pencil相似,而且价格仅为200元。现在&…...
关于onnx 转ncnn 的问题
文章目录修改模型Detect层设计转换后处理优质文章由于有些操作是没法支持的 如5维的操作: Unsupported slice axes ! Unsupported slice axes ! Unsupported slice axes ! Unsupported slice axes ! Unsupported slice axes ! Unsupported slice axes !参考&#…...
设计模式之《责任链模式》
------《责任链模式》责任链模式的概念为什么用责任链模式工作中用在哪里设计思路代码实现总结责任链模式的概念 责任链模式是一种行为型设计模式,它允许你将请求沿着处理链传递,直到有一个处理者能够处理该请求为止。 在责任链模式中,每个…...
Android Studio实现多功能日记本
项目目录一、项目概述二、系统特点三、开发环境四、详细设计1、E-R图2、数据库3、系统设置五、运行演示一、项目概述 本次实现了功能实用且齐全的日记本,界面友好,使用便捷,采用MVC架构设计。使用SQLite数据库存储数据,数据表有主…...
只依赖Tensorrt和opencv的yolov5源代码
simple_yolo.hpp #ifndef SIMPLE_YOLO_HPP #define SIMPLE_YOLO_HPP/*简单的yolo接口,容易集成但是高性能 */#include <vector> #include <memory> #include <string> #include <future> #include <opencv2/opencv.hpp>namespace Si…...
多路I/O转接 poll(了解)
poll() 的机制与 select() 类似,与 select() 在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是 poll() 没有最大文件描述符数量的限制(但是数量过大后性能也是会下降)。 p…...
听说你也在为配置tomcat server而烦恼,看我这一篇,让你醍醐灌顶!
一.通过maven创建项目 二.下载tomcat服务器 我们一般在tomcat官网中进行tomcat的下载 Apache Tomcat - Welcome! 三.添加配置:我们点击下图中的文件配置 四.测试配置的tomcat 我们在文件的body中输入 测试内容: 在控制台中显式tomcat运行的信息&#…...
【从零开始学Skynet】工具篇(二):虚拟机文件的复制粘贴
大家在Linux系统下开发的时候肯定会遇到虚拟机与主机间无法复制粘贴的问题,现在我们就来解决这样的问题,方便我们的开发。 1、打开设置 我们可以系统界面的菜单栏点击“控制”,然后打开“设置”; 也可以在VirtualBox界面打开“设…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
