【kubernetes】配置管理中心Configmap运用

news/2024/9/17 7:49:20/ 标签: kubernetes, 容器, 云原生

一,介绍

Configmap(简写 cm)是k8s中的资源对象,用于保存非机密性的配置的,数据可以用key/value键值对的形式保存,也可通过文件的形式保存。

【局限性】:在ConfigMap不是用来保存大量数据的,其数据量不可超过1 MiB。

kubectl get cm

二,功能

Configmap资源对象,可以有一个或者多个Configmap,通过 volume 形式映射到容器内部指定目录上,容器中应用程序按照原有方式读取容器特定目录上的配置文件,最总实现统一的配置管理。

三,两种方式

configmap注入方式有两:

  • 一种是将configMap做为存储卷
  • 一种是将configMap通过env中configMapKeyRef,注入到容器中。

四,应用场景

  • 1、当需要将应用配置写进代码中,更新配置也需要打包镜像时。
    configmap可以将配置信息和docker镜像解耦,以便实现镜像的可移植性和可复用性,因为一个configMap其实就是一系列配置信息的集合,可直接注入到Pod中给容器使用。
  • 2、当搭建使用微服务架构,在多个服务共用配置时。
    如果每个服务中单独一份配置的话,那么更新配置就很麻烦,使用configmap可以友好的进行配置共享。

五,创建方法

1,指定"key/value"创建

直接在命令行中,通过--from-literal指定参数,创建configmap。更为常用!

# 指定key1=config1和key2=config2来创建
kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2

在这里插入图片描述

2,指定“配置文件”创建

key1和key2 分别指定一个配置文件,可以连续多个–from-file使用。

kubectl create configmap my-config --from-file=key1=/path/config-dir/file1.txt --from-file=key2=/path/config-dir/file2.txt

在这里插入图片描述

3,指定“目录”创建

目录path/config-dir/下,存放所有配置文件

kubectl create configmap my-config --from-file=path/config-dir/

4,编写“configmap清单”创建

# cat mysql-configmap.yaml apiVersion: v1
kind: ConfigMap     # 指定cm类型
metadata:name: mysql       # 指定名称labels:app: mysql      # 指定cm的标签
data:               # 指定cm数据master.cnf: |     # 具体数据名称1[mysqld]log-binlog_bin_trust_function_creators=1lower_case_table_names=1slave.cnf: |      # 具体数据名称2[mysqld]super-read-onlylog_bin_trust_function_creators=1

【注意】

  • 符合| 表示,以下内容按“行” 显示。

六,使用

下面以configmap名为mdy-cm为例。做如下进入pod操作:
在这里插入图片描述

1,通过环境变量引入,使用valueFrom.configMapKeyRef

# cat mdy-pod.yamlapiVersion: v1
kind: Pod
metadata:name: mdy-pod-configmap
spec:containers:- name: mdy-pod-tep-configmapimage: busyboxcommand: ["/bin/sh","-c","sleep 3600"]imagePullPolicy: IfNotPresentenv:                       # 引用变量- name: mysql-user         # 该名称 定义的是容器内的变量valueFrom:               # 数据来源configMapKeyRef:       # 通过valueFrom.configMapKeyRef加载 configmapname: mdy-cm         # 指定之前定义的 configmap资源名称key: mysql.com       # 指定之前定义的 configmap资源中的key, 将value赋值给上面容器内定义的变量- name: mysql-pwd          # 同上valueFrom:configMapKeyRef:name: mdy-cmkey: nginx.confrestartPolicy: Never

在这里插入图片描述

2,通过环境变量引入:使用envfrom

# cat mdy-pod-envFrom.yaml 
apiVersion: v1
kind: Pod
metadata:name: mdy-pod-configmap-envfrom
spec:containers:- name: mdy-pod-tep-configmap-envfromimage: busyboxcommand: ["/bin/sh","-c","sleep 3600"]imagePullPolicy: IfNotPresentenvFrom:                      # 引入变量- configMapRef:               # 定义数据来源configmapname: mdy-cm              # 明确configmap的资源名称restartPolicy: Never

在这里插入图片描述

3,把configmap做成volume,挂载到pod 【常用方式】

该种方式类似与持久化存储。以文件形式挂载到容器内部。

# cat mdy-pod-volume.yaml apiVersion: v1
kind: Pod
metadata:name: mdy-pod-configmap-volume
spec:containers:- name: mdy-pod-tep-configmap-volumeimage: busyboxcommand: ["/bin/sh","-c","sleep 3600"]imagePullPolicy: IfNotPresentvolumeMounts:                         # 容器内部挂载引入         - name: configmap-volume              # 指定挂载卷的名字mountPath: /tmp/config              # 容器内挂载指定路径目录volumes:                                # 挂载卷- name: configmap-volume                # 挂载卷名称,必须在上面指定configMap:                            # 采用configmap形式挂载name: mdy-cm                        # 之前生成configmap的名称restartPolicy: Never

在这里插入图片描述

以上三种方式不同:

  • 第一种:通过给容器定义变量名A,然后将configmap中 B=C的值C,赋值给A。即 A = C
  • 第二种:不在定义变量A,直接将configmap中 B=C,作为变量 加载到容器内。即 B = C
  • 第三章:以挂载卷的形式,加载到容器内部。此种方式更为常用

七,Configmap热更新

更新 ConfigMap 的值以后:
1,使用该 ConfigMap 挂载的 "Env"是不会同步更新的。

2,使用该 ConfigMap 挂载的" Volume" 中的数据需要一段时间(大概10s 左右)才能同步更新。


http://www.ppmy.cn/news/1522103.html

相关文章

什么是银行挤兑

银行挤兑是指大量银行客户因为对银行失去信心,担心银行可能无法满足其提款需求,而纷纷在短时间内集中到银行提取现金或转账的行为。这种情况可能会导致银行现金储备迅速减少,进而影响银行的正常运营和金融市场的稳定。 银行挤兑通常发生在以下…

中秋将至,邮寄中秋礼品怎么才安心?

中秋节,是中华民族的传统佳节,承载着人们对团圆的期盼和对亲人的思念。在这个温馨的节日里,中秋礼品成为了许多人传递情感的方式。 在这个数字化的时代,虽然一通电话、一个视频就能拉近人与人之间的距离,但一份实实在在…

Oracle中关于not in的替代方案

Oracle优化连接查询速度 样例exists模式Left join模式 今天在使用dblink的时候,多表关联时发现条件中使用 not in 作为条件,会极大的影响查询速度,尤其是not in中的表数据量很大时,简直是一种灾难;经过翻阅资料&#…

opencv学习:形态学操作和边缘检测算子

cv2.morphologyEx() 是 OpenCV 库中的一个函数,用于执行更复杂的形态学操作。这个函数可以执行开运算、闭运算、梯度运算、膨胀、腐蚀以及顶帽和黑帽转换等。这些操作通常用于图像预处理,如去除噪声、平滑边界、突出特征等。 dst cv2.morphologyEx(src…

构建现代前端应用的利器:深入解析Webpack与Vite的差异与优势

Webpack与Vite概述 在现代前端开发中,构建工具是不可或缺的,它们帮助我们打包、优化和管理项目中的资源。Webpack和Vite是当前流行的两个构建工具,它们各自有着独特的优势和工作机制。 Webpack详解 1. Webpack是什么? Webpack…

数据结构基本知识

一、什么是数据结构 1.1、组织存储数据 ---------》内存(存储) 1.2、研究目的 如何存储数据(变量,数组....)程序数据结构算法 1.3、常见保存数据的方法 数组:保存自己的数据指针:是间接访问已经存在的…

2.2ceph集群部署准备-软件准备上

系统的选择 操作系统的选取,除了要考虑ceph本身的运行,一般情况下还需要考虑的因素有如下几点 系统本身的稳定性 目前稳定可靠的系统主要是基于x86和arm的linux系统,ceph并不能安装到windows上,分支上,debian和redhat…

Java后端分布式系统的服务降级:优雅降级与服务熔断

Java后端分布式系统的服务降级:优雅降级与服务熔断 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在分布式系统中,服务降级是一种应对高负载或服务不稳定情况的策略&am…

第十章 【后端】环境准备(10.4)——Vagrant

10.4 Vagrant Vagrant 官网 Vagrant 镜像仓库 下载 安装 直接 install。 设置环境变量 Vagrant 默认将镜像保存在用户文件夹的 .vagrant.d 目录下,若用户文件夹在C盘,下载的镜像文件会大量占用C盘空间。设置环境变量 VAGRANT_HOME 后,Vagrant 会将镜像保存到环境变量指定…

Python 的语法元素(容易忘记的)

文章目录 同步赋值同步赋值的相关操作同步赋值的原理 同步赋值 同步赋值是 Python 语言的一个强大功能,它让代码更加紧凑和高效,尤其是在处理多个变量时。 同步赋值的相关操作 简单同步赋值: 如果你想同时初始化多个变量到不同的值&#x…

bash反弹shell分析

目录 介绍步骤 介绍 与目标主机建立连接的原理是利用漏洞执行ShellCode。 GetShell的实质是:执行ShellCode,将目标主机的Shell重定向到攻击机。拿到Shell利于后续的渗透。 所谓的反弹Shell是指GetShell的过程由目标主机主动发起(反向连接&a…

vue2和vue3响应式原理的区别

vue2和vue3响应式原理的区别 目录 一、速度差距二、各自底层原理1. Vue2的响应式原理2. Vue3的响应式原理3. 响应式性能对比 三、扩展与高级技巧1. Vue2中的 s e t 和 set和 set和delete2. Vue3中的ref和reactive3. 响应式数据的深度监听 四、优点与缺点1. Vue2的优点与缺点2. …

.iso文件怎么打开?

在日常使用电脑的过程中,很多用户都会遇到.iso文件,尤其是在安装软件、操作系统或者备份光盘内容时。那么,什么是.iso文件?该如何打开它?本文将为大家详细解答这些问题,帮助大家轻松处理.iso文件。 什么是.…

目标检测-YOLOv10

YOLOv10 是 YOLO 系列的最新版本,进一步推动了目标检测技术的发展。它在前代(YOLOv9)的基础上进行了更多优化和改进,使得模型在复杂场景、实时性以及精度方面取得了更高的突破。YOLOv10 将高效的架构设计与新颖的技术结合&#xf…

Jenkins构建CI/CD

CI/CD 软件开发的连续方法基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性。从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预。 它涉及在每次小迭代中不断构建,测试和部署代码更改,从而减少…

SpringCloud开发实战(三):集成Eureka注册中心

目录 SpringCloud开发实战(一):搭建SpringCloud框架 SpringCloud开发实战(二):通过RestTemplate实现远程调用 Eureka简介 Eureka 是一个基于 Java 的开源技术,最广为人知的是作为 Netflix 开发…

【Python 学习】Numpy的基础和应用

目录 1 数组基础1.1 Numpy简介1.2 Numpy数组基础1.3 创建数组1.3.1 使用np.array()函数生成数组1.3.2 利用内置函数产生特定形式的数组1.3.2.1 简单内置函数1.3.2.2 特殊内置函数 1.3.3 生成随机数组 1.4 数组的数据类型1.5 数组的迭代1.6数组的索引和切片1.6.1 一维数组的索引…

ueditor视频上传

修改video.js中uploadBeforeSend方法 位置: 修改为: uploader.on(uploadBeforeSend, function (file, data, header) {//这里可以通过data对象添加POST参数const token =******//根据各自项目情况,获取到存储的tokenheader[X_Requested_With] = XMLHttpRequestheader[Aut…

机械学习—零基础学习日志(概率论总笔记4)

引言 概率论的很多用途和思想方法,但是大多数结论和方法都是从经验出发得到的。数学并不依赖于经验,这也是早期概率论所面临的一种尴尬局面。 定义是概率论的最大漏洞 拉普拉斯的古典概率论里,他对概率定义的方法是有漏洞的,发…

Android应用开发项目式教程——序

Android技术 Android是重要的客户端技术,因其开源开放的特点,Android在其初期就迅速成长为智能手机的主流操作系统,近年来更进一步成为智能电视、智能车载终端等智能设备的主流操作系统,其活跃设备数量已经超过30亿台&#xff0c…