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

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:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM(三)——字节码技术

三、字节码技术 1、类文件结构 一个简单的 HelloWorld.java package com.mysite.jvm.t5; // HelloWorld 示例 public class HelloWorld {public static void main(String[] args) {System.out.println("hello world");} }执行 javac -parameters -d . HellowWorld.…

家用洗地机什么牌子好?2024四款家用洗地机良心推荐

洗地机集合了吸拖扫为一体的清洁设备,可以吸走灰尘,吸走污渍,还能杀菌等等,高效清洁又省力!对于工作忙的上班族,带娃的宝妈,还有体弱的老人都非常适合。但是说到选购产品这方面,很多…

leetcode mt simple

Leetcode-MT-Simple 文章实际写于2021年,那个炎热的夏天。 Leet Code 美团题库简单类总结,题目按照解法可大致分为数学法、计数法、位运算、双指针法、字符串、哈希表、栈、递归/迭代、排序法、匹配法、记忆化法、二分法、分治法、摩尔投票法、前缀和、…

头条网盘如何快速获取授权推广

近期可以说是网盘拉新的一个盛宴,好几家网盘为了抢夺用户,都在付费拉新用户,而如今头条网盘也需要开拓市场,方式也很简单粗暴,就是拿钱砸,而对于普通用户来说,只要获得授权,正是赚钱…

NVIDIA A100 NVLink 和 NVIDIA A100 PCIe的区别?

NVIDIA A100 NVLink 和 NVIDIA A100 PCIe 是两种不同连接方式的 NVIDIA A100 GPU。 NVIDIA A100 NVLink: 这种版本的 A100 GPU 使用 NVLink 连接方式,可以实现更高的带宽和更低的延迟。NVLink 是 NVIDIA 的一种专有连接技术,用于连接多个 GPU&#xff0c…

方案功能开发:智能机器人玩具

玩具电动趣萌机器人方案开发定制,东莞市酷得智能科技有限公司是研发型芯片贸易公司,可为制造厂商朋友定制软件底层方案。下面介绍一下机器人方案可实现的功能: 基础功能: 方向:前进,后退,左转&a…

10分钟搭建一套代码质量监控平台

01、jenkins安装部署 01、Jenkins下载 中文官网地址:https://www.jenkins.io/zh/ 02、Jenkins环境安装 安装jdk,上传jenkins安装包,启动jenkins,耐心等待启动完成(第一次需要个几分钟) java -jar jenkins.war 执行日志里一定…

JAVA面试大全之集合IO篇

目录 1、集合 1.1、Collection 1.1.1、集合有哪些类? 1.1.2、ArrayList的底层? 1.1.3、ArrayList自动扩容? 1.1.4、ArrayList的Fail-Fast机制? 1.2、MAP 1.2.1、Map有哪些类? 1.2.2、JDK7 HashMap如何实现…

基于springboot的交通管理在线服务系统的开发

传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装交通管理在线服务系统软件来发挥其高效地信息处理的作用&#xff0…

人工智能的春天:改变已然发生

以下文章来源:青岛日报 某种意义上说,这个春天属于人工智能(AI)。 继一年多前ChatGPT惊艳全球后,OpenAI再次放出“王炸”成果——视频大模型Sora;苹果放弃布局多年的造车计划,将ALL in AI&#…

Leetcode第66题:加一

题目描述 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。 代码实现 class Solution:def plusOne(s…

Temple of Doom靶场nodejs获取shellss-manager漏洞tcpdump提权

下载链接: Temple of Doom: 1 ~ VulnHub 下载完成后直接在vxbox中导入即可,网络链接模式根据自身情况而定(我采用的桥接模式) 正文: 先用nmap进行扫描靶机ip nmap -sn 192.168.1.1/24 对192.168.1.5进行端口探测&a…

解决华为云服务器宝塔面板无法访问显示“此站点的连接不安全”问题

已经配置好安全组以及初始化宝塔面板,还是无法访问镜像管理页面,提示此站点的连接不安全。 解决方案 将地址https改为http即可进入。 成功登录后,开启面板SSL即可。

商家店铺如何批量抓取淘宝、天猫、1688主图视频并下载保存

当前,大多的平台商品越来越多都有主图视频、评论视频、详情视频、然而,在一定程度上就意味着,这也是引流渠道的一步重要环节,如果自己的店铺商品没有相应的主图视频,很可以会严重流失客源。小编就为大家来介绍批量抓取…

图解MySQL目录

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 一 .图解MySQL介绍 重点突击 MySQL 索引、事务、锁、日志等面试常问知识。 二 . 基础篇 执行一条 select 语句,期间发生了什么? : 执行一条 select 语句,期间发生了什…

3.26学习总结java初步实现学生管理系统

(该项目通过视频讲解过程中完成,其中将一些操作进行了修改和完善,其目的是为了巩固前面学习java的一些用法,熟悉写项目的过程) 一.项目要求 学生类: 属性:id、姓名、年龄、家庭住址 添加功能: 键盘录入每一个学生信息并添加,需要满足以下要求: ID唯一 删除功能…

mmocr安装和使用

https://github.com/open-mmlab/mmocr/blob/main/README_zh-CN.md https://mmocr.readthedocs.io/en/dev-1.x/get_started/quick_run.html 介绍 MMOCR 是基于 PyTorch 和 mmdetection 的开源工具箱,专注于文本检测,文本识别以及相应的下游任务&#xf…

window平台C#实现软件更新功能

一 实现程序更新思路 程序实现自我升级,一般有两种方式: 1. 独立的更新程序 开发一个独立的更新程序如Update.exe,用于检查主程序是否有新版本,并下载和安装新版本。 实现步骤: 主程序启动完后,调用一下…

C++引用学习day2

思维导图 定义一个矩形类(Rectangle),包含私有成员:长(length)、宽(width), 定义成员函数: 设置长度:void set_l(int l) 设置宽度:void set_w(int w) 获取长度&#…

Vue 2 组件发布到 npm 的常见问题解决

按照 Vue 2 组件打包并发布到 npm 的方法配置项目后,项目在实际开发过程中,随着代码写法的多样性增加而遇到的各种打包问题,本文将予以逐一解决: 本文目录 同时导出多个组件 样式表 import 问题解决 Json 文件 import 问题解决…