k8s入门到实战(六)—— ConfigMap介绍

news2024/11/13 10:13:19

ConfigMap

configmap 是 k8s 中的资源对象,用于保存非机密性的配置的,数据可以用 kv 键值对的形式保存,也可通过文件的形式保存。

什么是 configmap

在 k8s 中,ConfigMap 是一种用于存储应用程序配置数据的对象。它允许将配置信息与应用程序分离,从而实现配置的解耦和管理的集中化。

ConfigMap 是以键值对的形式存储配置数据的,可以包含一个或多个键值对。这些配置数据可以包含环境变量、命令行参数、配置文件等。ConfigMap 的数据可以通过环境变量、命令行参数或挂载文件的方式注入到 Pod 中的容器中。

ConfigMap 可以通过 kubectl 命令行工具、YAML 文件或 API 进行创建和管理。可以在命名空间级别或集群级别创建 ConfigMap,并将其应用于特定的 Pod、Deployment、StatefulSet 等对象。

通过使用 ConfigMap,可以实现以下的优势:

  • 解耦配置和应用程序:将配置信息从应用程序中分离,使得应用程序更加灵活和可配置。
  • 集中化管理配置:通过创建和管理 ConfigMap 对象,可以集中管理应用程序的配置,而不需要修改容器镜像或重新部署应用程序。
  • 容器化配置:ConfigMap 中的配置数据可以以环境变量、命令行参数或挂载文件的方式注入到容器中,方便应用程序的使用。
  • 动态更新配置:通过更新 ConfigMap 对象,可以实现对应用程序配置的动态更新,而不需要重新启动或重新部署应用程序。

总之,ConfigMap 是 k8s 中用于存储和管理应用程序配置数据的一种机制,通过将配置与应用程序分离,实现了配置的解耦和集中化管理,提高了应用程序的灵活性和可维护性。

configmap 作用

我们在部署服务的时候,每个服务都有自己的配置文件,

如果一台服务器上部署多个服务:nginx、tomcat、apache 等,那么这些配置都存在这个节点上

假如一台服务器不能满足线上高并发的要求,需要对服务器扩容,扩容之后的服务器还是需要部署多个服务:nginx、tomcat、apache,新增加的服务器上还是要管理这些服务的配置

如果有一个服务出现问题,需要修改配置文件,每台物理节点上的配置都需要修改,这种方式肯定满足不了线上大批量的配置变更要求

所以,k8s 中引入了 Configmap 资源对象,可以当成 volume 挂载到 pod 中,实现统一的配置管理。

configmap 特点

  • Configmap 是 k8s 中的资源, 相当于配置文件,可以有一个或者多个 Configmap
  • Configmap 可以做成 Volume,k8s pod 启动之后,通过 volume 形式映射到容器内部指定目录上;
  • 容器中应用程序按照原有方式读取容器特定目录上的配置文件;
  • 在容器看来,配置文件就像是打包在容器内部特定目录,整个过程对应用没有任何侵入。

configmap 使用

一个项目的所有配置文件都是用一个 configmap 来统一管理!这里我们使用 redis 进行测试

  1. 编辑一个简单的 redis 配置文件,my-redis.conf,内容如下
appendonly yes
  1. 根据 redis 配置文件创建一个 configmap
kubectl create cm redis-cm --from-file=my-redis.conf
[root@k8s-master k8s]# kubectl create cm redis-cm --from-file=my-redis.conf
configmap/redis-cm created
[root@k8s-master k8s]# kubectl get cm
NAME               DATA   AGE
kube-root-ca.crt   1      2d4h
redis-cm           1      11s

这个 configmap 就保存在 k8s 的 etcd 中,这个 redis 配置文件 my-redis.conf 就可有可无了

可以以 yaml 格式查看这个 configmap

kubectl get cm redis-cm -o yaml
[root@k8s-master k8s]# kubectl get cm redis-cm -o yaml
apiVersion: v1
data:
  my-redis.conf: |
    appendonly yes
kind: ConfigMap
metadata:
  creationTimestamp: "2024-03-26T12:24:25Z"
  name: redis-cm
  namespace: default
  resourceVersion: "298281"
  uid: a472846b-e060-478a-8d37-f21300f975d8
  1. 创建一个 redis pod,编辑文件redis-cm.yaml
apiVersion: v1
kind: Pod
metadata:
  name: redis-cm
spec:
  containers:
    - name: redis01
      image: redis
      command:
        - redis-server
        - "/redis-master/redis.conf"
      ports:
        - containerPort: 6379
      volumeMounts:
        - mountPath: /data
          name: redis-data
        - mountPath: /redis-master
          name: config
  volumes:
    - name: redis-data
      emptyDir: {}
    - name: config
      configMap:
        name: redis-cm
        items:
          - key: my-redis.conf
            path: redis.conf

在 yaml 文件中,容器与 configmap 进行挂载的目录/redis-master是任意取的,自行设置即可

容器下 command 的第二个属性"/redis-master/redis.conf"是由容器与 configmap 挂载的目录加上最后一行的 path 构成,path 也是任意取名,是容器内生成的 redis 文件,内容是由上面的 key 映射到 configmap 里面对应的内容

  1. 根据 yaml 文件创建 pod
[root@k8s-master k8s]# vim redis-cm.yaml
[root@k8s-master k8s]# kubectl apply -f redis-cm.yaml 
pod/redis-cm created
[root@k8s-master k8s]# kubectl get pod
NAME                            READY   STATUS    RESTARTS   AGE
mysql-pod                       1/1     Running   0          3h37m
nginx-pod-pvc-967fcb547-rj5ll   1/1     Running   0          6h14m
nginx-pod-pvc-967fcb547-wbbh7   1/1     Running   0          6h14m
redis-cm                        1/1     Running   0          59s
  1. 进入 pod 容器内部,查看/redis-master下的 redis.conf 文件
[root@k8s-master k8s]# kubectl exec -it redis-cm /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@redis-cm:/data# cd /redis-master/
root@redis-cm:/redis-master# ls
redis.conf
root@redis-cm:/redis-master# cat redis.conf
appendonly yes

可以看到/redis-master下的 redis.conf 文件已经和 configmap 绑定好了

  1. 在外部修改 configmap,查看容器内部的 redis.conf 会不会发生变化
[root@k8s-master k8s]# kubectl edit cm redis-cm
configmap/redis-cm edited

在这里插入图片描述

在上面新增一行requirepass 123456,这是 redis 修改登录密码的属性

  1. 更改完成后等1-2分钟,进入容器查看redis.conf变化
[root@k8s-master k8s]# kubectl exec -it redis-cm /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@redis-cm:/data# cd /redis-master/
root@redis-cm:/redis-master# cat redis.conf 
appendonly yes
requirepass 123456

我们在容器中尝试获取这两个属性

root@redis-cm:/redis-master# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> config get appendonly
1) "appendonly"
2) "yes"
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""

发现我们新增加的 requirepass 属性是获取不到的,这是容器的问题,因为当前 pod 没有热更新的能力

关于 configmap 命令

kubectl create cm xxxx --from-file=文件名

    volumeMounts:
	  - name: xxx和voulmes的name对应
	    mountPath: 容器内加载配置文件的路径。
voulmes:
   - name: xxx和容器内要挂载目录的对应
     configMap: 
        name:
        items:
          key:
          path:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【python】Jupyter Notebook 修改默认路径

文章目录 一、修改前(一)问题(二)修改前的默认路径 二、修改配置文件、更改路径(一)找到配置文件并打开(二)创建目标文件夹、得到新的路径(三)修改配置文件 三…

小目标检测篇 | YOLOv8改进之GSConv + Slim Neck提升小目标检测效果

前言:Hello大家好,我是小哥谈。在文章中,作者提出了一种新方法GSConv来减轻模型的复杂度并保持准确性。GSConv可以更好地平衡模型的准确性和速度。并且,提供了一种设计范式Slim Neck,以实现检测器更高的计算成本效益。实验过程中,与原始网络相比,改进方法获得了最优秀的…

nginx--解决响应头带Set-Cookie导致的验证失败

解决响应头带Set-Cookie导致的验证失败 前言给nginx.conf 设置Secure配置完成后会发现cookie就不会发生变化了 前言 在用nginx做代理的时候,会发现nginx在访问不同ip请求的时候会带setCookie 导致后端就是放开cookie验证,在访问玩这个链接他更新了cooki…

成都爱尔胡建斌院长强调黄斑病变是眼睛哪儿出了问题

黄斑位于眼球内部的眼底的视网膜区域,处于人眼的光学中心区,是视力轴线的投影点。它是人眼视网膜中央视觉细胞最集中的部位。黄斑中心多为锥形细胞,对明暗不敏感,对色敏感。黄斑外围多为柱形细胞,对明暗敏感,对色几乎不…

javaWeb私人牙科诊所管理系统

一、摘要 随着科技的飞速发展,计算机已经广泛的应用于各个领域之中。在医学领域中,计算机主要应用于两个方面:一是医疗设备智能化,以硬件为主。另一种是病例信息管理系统(HIS)以软件建设为主,以…

深度学习pytorch——减少过拟合的几种方法(持续更新)

1、增加数据集 2、正则化(Regularization) 正则化:得到一个更加简单的模型的方法。 以一个多项式为例: 随着最高次的增加,会得到一个更加复杂模型,模型越复杂就会更好的拟合输入数据的模型(图-1)&#…

【数据结构与算法】用染色法判定二分图

问题描述 给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环。 请你判断这个图是否是二分图。 输入格式 第一行包含两个整数 n 和 m。 接下来 m 行,每行包含两个整数 u 和 v,表示点 u 和点 v 之间存在一条边。 输出格式 如果给定图…

js中如何用点击地图获取经纬度

要实现在地图上点击并获取被点击地址的经纬度,然后渲染至页面中的功能,你需要首先确保你使用的地图API支持点击事件,并且能够返回点击位置的经纬度。以高德地图(AMap)为例,你可以按照以下步骤实现这个功能&…

wma怎么转换成mp3?无损转换!

WMA(Windows Media Audio)文件格式诞生于微软公司的数字音频技术研发。由于其高压缩性能和较好的音质,在推出初期主要用于Windows Media Player等微软产品。然而,随着MP3格式的盛行,WMA的使用范围逐渐受到限制。 MP3文…

ES6 基础

文章目录 1. 初识 ES62. let 声明变量3. const 声明常量4. 解构赋值 1. 初识 ES6 ECMAScript6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得」JavaScript语言可以用来编写复杂的大型应用程序,成为…

MySQL 经典练习 50 题 (记录)

前言: 记录一下sql学习,仅供参考基本都对了,不排除有些我做的太快做错了。里面sql不存在任何sql优化操作,只以完成最后输出结果为目的,包含我做题过程和思路最后一行才是结果。 1.过程: 1.1.插入数据 /* SQLyog Ul…

3.学习前后端关联

目录 1.接口类型 2.错误状态码 3.如何定义路由 4.那如何要求前端传入一个JSON数据呢? 4.解决前后端口不同源,跨域问题 1.使用CrossOrigin 2.直接复制代码使用 5.用户登录校验 1.接口类型 POST(新增数据)、PUT(更新更改数据)、GET(查询)、DELET(删除数据) …

Vivado ECO Flow

Vivado ECO流量 重要!ECOs只在设计检查点上工作。ECO布局仅在设计后可用检查点已在Vivado IDE中打开。 工程变更单(ECOs)是对实施后网表的修改意图在对原始设计影响最小的情况下实施更改。Vivado提供ECO流,允许您修改设计检查点、…

Xshell连接虚拟机非常慢

问题: 打开虚拟机连接时发现过了几分钟依然卡着在,但是主机可以ping通虚拟机,虚拟机也可以ping通主机感觉很奇怪,查询后得知需要修改ssh设置 打开配置 vim /etc/ssh/sshd_config 修改配置 找到 UseDNS,去掉前面的#号…

大学宠物医疗试题及答案,分享几个实用搜题和学习工具 #学习方法#笔记#知识分享

大学开学,就意味着又回到了被线性代数、大学物理等测验题折磨的状态了……网站无法手动输入题干公式,初高中用过的搜题软件又都搜不到,想找个答案解析仿佛在大海捞针!不过不用怕,今天小林就把从大学攒到毕业工作都在使…

苍穹外卖项目-01(开发流程,介绍,开发环境搭建,nginx反向代理,Swagger)

目录 一、软件开发整体介绍 1. 软件开发流程 1 第1阶段: 需求分析 2 第2阶段: 设计 3 第3阶段: 编码 4 第4阶段: 测试 5 第5阶段: 上线运维 2. 角色分工 3. 软件环境 1 开发环境(development) 2 测试环境(testing) 3 生产环境(production) 二、苍穹外卖项目介绍 …

ES 进阶知识

索引Index 一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母),并且当我们…

LeetCode 309—— 买卖股票的最佳时机含冷冻期

阅读目录 1. 题目2.解题思路3. 代码实现 1. 题目 2.解题思路 根据题意,每一天有这样几个状态:买入股票、卖出股票、冷冻期、持有股票,因此,我们假设 f 为每天这几个状态下对应的最大收益,由于持有股票时不知道是哪天买…

3.26日总结

1.Fliptile Sample Input 4 4 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 Sample Output 0 0 0 0 1 0 0 1 1 0 0 1 0 0 0 0 题意:在题目输入的矩阵,在这个矩阵的基础上,通过最少基础反转,可以将矩阵元素全部变为0,如果不能达…

dbgpt部署教程,纯小白教程

1.打开git下载zip文件 下载地址: GitHub - eosphoros-ai/DB-GPT at v0.5.0 2.容器部署 2.1 先启动python3.10环境 docker run -itd --name dbgpt1 --gpus all --shm-size"32g" -p 60035:5000 -p 60037:7860 -p 60038:8000 \ -v /home/tmn/OAPD/jiayq/…