当前位置: 首页 > news >正文

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

一,介绍

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 左右)才能同步更新(见下图)。
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用左右指针方法解决最长无重复字符子串问题
  • 网络学习-eNSP配置路由器
  • 再遇“类和对象”
  • 杰发科技Bootloader(3)—— 基于7801的APP切到Boot
  • java设计模式day03--(结构型模式:代理模式、适配器模式、装饰者模式、桥接模式、外观模式、组合模式、享元模式)
  • 常用 Excel 笔记
  • shell的使用sed处理数据
  • 链表专题(Golang)
  • SpringBoot集成MyBatis-Plus
  • 如何在多台电脑上同步 VSCode配置和插件
  • N-152基于java贪吃蛇游戏5
  • 【论文阅读】视觉分割新SOTA: Segment Anything(SAM)
  • 【ABAP】ole2 excel多sheet导入导出
  • MySQL 解决时区相关问题
  • Map(HashMap)
  • 「译」Node.js Streams 基础
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • HashMap ConcurrentHashMap
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • maven工程打包jar以及java jar命令的classpath使用
  • PAT A1092
  • PHP 7 修改了什么呢 -- 2
  • spring-boot List转Page
  • Vue UI框架库开发介绍
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 力扣(LeetCode)22
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 人脸识别最新开发经验demo
  • 首页查询功能的一次实现过程
  • 微信小程序--------语音识别(前端自己也能玩)
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 学习使用ExpressJS 4.0中的新Router
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​如何在iOS手机上查看应用日志
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (七)Activiti-modeler中文支持
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • .JPG图片,各种压缩率下的文件尺寸
  • .NET Micro Framework初体验(二)
  • .net 使用ajax控件后如何调用前端脚本
  • .NET中使用Redis (二)
  • [<死锁专题>]
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [CSS]CSS 的背景
  • [C语言]编译和链接