k8s学习--ConfigMap详细解释与应用

文章目录

  • 一 什么是configmap
    • ConfigMap 的好处
    • ConfigMap 的限制
  • 二.创建ConfigMap的4种方式
    • 1.在命令行指定参数创建
    • 2.在命令行通过多个文件创建
    • 3.在命令行通过文件提供多个键值对创建
    • 4.YAML资源清单文件创建
  • 三 configmap的两种使用方法
    • 1.通过环境变量的方式传递给pod
    • 2.通过volume的方式挂载到pod内
    • 3.应用举例
  • ConfigMap的热更新


一 什么是configmap

简单理解
kubernetes集群可以使用ConfigMap来实现对容器中应用的配置进行管理
(就是可以把一些应用的conf文件内容写到里面)。
可以把ConfigMap看作是一个挂载到pod中的存储卷

详细解释
在 Kubernetes 中,ConfigMap 是一种 API 对象,用于存储非机密数据(如配置文件、环境变量、命令行参数等)。ConfigMap 允许您将应用程序的配置与容器化的应用程序分开管理,从而实现配置的灵活和动态管理。

ConfigMap 的核心概念

  1. Key-Value 存储:ConfigMap 以键值对的形式存储数据。每个键和值都是字符串,可以用来配置应用程序的各种参数。
  2. 数据来源:ConfigMap 的数据可以从多种来源创建,包括命令行参数、文件、目录或者现有的 ConfigMap。
  3. 非机密性:ConfigMap 专门用于存储非机密数据。对于机密数据(如密码、令牌),应使用 Kubernetes 的 Secret 对象。

组合使用
你可以将 ConfigMap 的数据同时作为环境变量和文件挂载,以灵活满足应用程序的需求。

ConfigMap 的好处

  1. 分离配置和代码:通过使用 ConfigMap,可以将配置数据与应用程序代码分离开来,便于管理和修改配置,而无需重建镜像或重新部署应用。
  2. 动态更新配置:在不重启 Pod 的情况下,更新 ConfigMap 可以立即反映在应用程序中(前提是应用程序支持热加载配置)。
  3. 简化管理:通过 Kubernetes 的 API,可以方便地创建、更新和删除 ConfigMap,从而简化配置管理。
  4. 增强安全性:将非机密配置与机密数据分开管理,增强了集群的安全性。对于机密数据,应该使用 Secret 对象。

ConfigMap 的限制

  1. 非机密性:ConfigMap 不适用于存储机密数据,因为它们以纯文本形式存储,任何有权限访问 ConfigMap 的人都可以读取其中的数据。
  2. 大小限制:单个 ConfigMap 的大小有限制(通常为 1MB),因此不适合存储大数据量的配置。
  3. 应用程序支持:应用程序需要具备从环境变量或文件读取配置的能力,否则无法利用 ConfigMap 的优势。

二.创建ConfigMap的4种方式

1.在命令行指定参数创建

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/45a71beb70394092bc0ed46ac50722ac.png
[root@master ~]# kubectl create configmap cm1 --from-literal=host=127.0.0.1 --from-literal=port=3306
[root@master ~]# kubectl describe cm cm1

在这里插入图片描述

2.在命令行通过多个文件创建

通过指定文件创建,即将一个配置文件创建为一个ConfigMap,–from-file=文件路径:
[root@master ~]# echo -n 127.0.0.1 > host
[root@master ~]# echo -n 3306 > port
[root@master ~]# kubectl create configmap cm2 --from-file=./host --from-file=./port
[root@master ~]# kubectl describe cm cm2

在这里插入图片描述

3.在命令行通过文件提供多个键值对创建

通过一个文件内多个键值对,–from-env-file=文件路径
[root@master ~]# vim env.txt
写入
host=127.0.0.1
port=3306

[root@master ~]# kubectl create configmap cm3 --from-env-file=env.txt
[root@master ~]# kubectl describe cm cm3
在这里插入图片描述

4.YAML资源清单文件创建

[root@master ~]# vim cm4.yaml

apiVersion: v1
kind: ConfigMap
metadata:name: cm4
data:host: 127.0.0.1port: "3306"[root@master ~]#  kubectl apply -f cm4.yml
configmap/cm4 created
[root@master ~]#  kubectl describe cm cm4
Name:         cm4
Namespace:    default
Labels:       <none>
Annotations:
Data
====
host:
----
127.0.0.1
port:
----
3306
Events:  <none>

三 configmap的两种使用方法

1.通过环境变量的方式传递给pod

[root@master ~]# vim pod-cm1.yaml

apiVersion: v1
kind: Pod
metadata:name: pod-cm1
spec:containers:- name: busyboximage: busyboxargs: [ "/bin/sh", "-c", "sleep 10000" ]envFrom:- configMapRef:name: cm1

[root@master ~]# kubectl apply -f pod-cm1.yml
[root@master ~]# kubectl get pod
[root@master ~]# kubectl exec pod-cm1 – env

在这里插入图片描述

2.通过volume的方式挂载到pod内

[root@master ~]# vim pod-cm2.yaml

apiVersion: v1
kind: Pod
metadata:name: pod-cm2
spec:containers:- name: busyboximage: busyboxargs: [ "/bin/sh", "-c", "sleep 10000" ]volumeMounts:- name: vol-cmmountPath: "/etc/mysql"readOnly: truevolumes:- name: vol-cmconfigMap:name: cm2

[root@master ~]# kubectl apply -f pod-cm2.yml
[root@master ~]# kubectl get pod
[root@master ~]# kubectl exec pod-cm2 – cat /etc/mysql/host
127.0.0.1
[root@master ~]# kubectl exec pod-cm2 – cat /etc/mysql/port
3306

可以看到内容

3.应用举例

[root@master ~]# echo “test-test” > nginx.conf #产生测试用的nginx.conf文件
[root@master ~]# kubectl create configmap nginxconf --from-file=/root/nginx.conf
[root@master ~]# kubectl describe cm nginxconf
[root@master ~]# vim pod-nginxconf.yaml

apiVersion: v1
kind: Pod
metadata:name: nginx
spec:containers:- name: nginximage: nginx:1.20volumeMounts:                               # 用volume挂载方式- name: vol-nginx                              # 对应下面的volume名mountPath: "/testdir"                   		# 挂载到容器内部的路径readOnly: true                            	# 只读volumes:- name: vol-nginx                                # 卷名称configMap:name: nginxconf                             # configmap的名称

[root@master ~]# kubectl apply -f pod-nginxconf.yaml
[root@master ~]# kubectl exec -it nginx – cat /testdir/nginx.conf

在这里插入图片描述

ConfigMap的热更新

如果修改了value, 那么容器内部会不会更新?
ConfigMap热更新方式
通过环境变量的方式传递给pod。这种方式不会热更新
通过volume的方式挂载到pod内。这种方式会热更新,大概需要半分钟左右。
[root@master ~]# kubectl edit cm nginxconf
修改test-test 为 test-page
[root@master ~]# kubectl exec -it nginx – cat /testdir/nginx.conf #等待一会
在这里插入图片描述

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

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

相关文章

提高LabVIEW程序员分析需求、写代码、测试能力的方法

分析需求 深入了解项目背景&#xff1a;在开始任何项目之前&#xff0c;程序员应该深入了解项目的背景和目标。这包括与客户或项目干系人进行详细讨论&#xff0c;理解他们的期望和需求。参加相关的行业研讨会和阅读技术文档也有助于更好地了解项目背景。 使用需求管理工具&am…

MySQL学习——影响选项文件处理的命令行选项和程序选项修改器

大多数支持选项文件的MySQL程序都处理以下选项。因为这些选项会影响选项文件的处理&#xff0c;所以必须在命令行上给出&#xff0c;而不是在选项文件中给出。为了正常工作&#xff0c;这些选项中的每一个都必须先于其他选项给出&#xff0c;但以下情况除外&#xff1a; -prin…

WLAN组网模型探究

目录 一、WLAN基本概念二、WLAN组网方式三、WLAN转发模型 随着信息技术的飞速发展&#xff0c;无线局域网&#xff08;WLAN&#xff09;已逐渐成为企业网络架构中不可或缺的一部分。不同的企业组织因其业务特性、规模大小及安全需求的不同&#xff0c;对WLAN的要求也各有侧重。…

物联网面试准备

volatile的作用 volatile关键字用于告诉编译器&#xff0c;该变量可能会在程序的执行过程中被意外更改&#xff0c;因此编译器不应该对该变量进行优化或者缓存。 这样可以确保每次访问该变量时都会从内存中读取最新的值&#xff0c;而不是使用缓存中的旧值。 在多线程编程中&…

C语言习题~day28

关于文本文件和二进制文件描述错误的是&#xff1f; A.文本文件是可以读懂的&#xff0c;二进制文件没办法直接读懂 B.数据在内存中以二进制的形式存储&#xff0c;如果不加转换的输出到外存&#xff0c;就是二进制文件 C.将内存中的数据转化成ASCII码值的形式&#xff0c;并…

Arduino IDE 2.3.2找不到端口解决方法

Arduino IDE 2.3.2找不到端口解决方法 问题描述 Arduino IDE 2.3.2 软件找不到端口(端口显示灰色)&#xff0c;Arduino开发板连接电脑后&#xff0c;设备管理器能够看到端口信息&#xff0c;Arduino IDE软件中看不到端口。 设备管理器中能够看到端口信息 Arduino IDE中端口显…

力扣5 最长回文子串

给你一个字符串 s&#xff0c;找到 s 中最长的 回文子串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba" 同样是符合题意的答案。示例 2&#xff1a; 输入&#xff1a;s "cbbd" 输…

植物大战僵尸杂交版(最新版)

杂交版1.0文件链接 链接&#xff1a;https://pan.baidu.com/s/1Ew6iTg0_d_Ut8N9_18KGLw 提取码&#xff1a;yspa 杂交版2.0文件链接 链接:https://pan.baidu.com/s/1tuchowb4C_oNT6EpqSvr_w?pwdy2fz 提取码:y2fz

HTML静态网页成品作业(HTML+CSS)—— 香奈儿香水介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

上位机图像处理和嵌入式模块部署(f407 mcu中tf卡模拟u盘)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在f407开发板上面&#xff0c;本身是有一个usb接口的。这个usb接口也不仅仅是作为电源使用的&#xff0c;它还可以用来做很多的事情。一方面&#…

pymupdf提取pdf表格及表格数据合并

pymupdf提取pdf表格非常快速&#xff0c;相比其他库是个更好的选择&#xff0e; 一个行列多的表格打印成pdf后会由于页宽分页原因变成多个表格&#xff0c;提取的多个表格需要合并为一个表格&#xff0c;再来处理数据&#xff0e; 下面代码中merge函数用于合并表格&#xff0…

label标签

01、label标签 概述 label标签页属于&#xff1a;form元素的成员之一&#xff0c;它有啥意义呢&#xff1f;它主要用来修饰文本和form元素的指向和体验问题。我们只需要把文本和form元素使用label标签包裹&#xff0c;就可以产生一个奇妙的化学反应。就是&#xff1a;我们点击…

在Spring中如何实现条件化Bean的创建?

在Spring中&#xff0c;实现条件化Bean的创建主要依靠Conditional注解&#xff0c;这个注解允许基于一定的条件来注册Bean。如果条件不满足&#xff0c;那么对应的Bean将不会被创建和注册到Spring的应用上下文中。 以下是如何使用Conditional注解来实现条件化Bean创建的步骤&a…

计算机网络错题答案汇总

王道学习 第1章 计算机网络体系结构 1.1 1.2

vue配置代理服务器解决跨域方法

一.vue配置代理服务器解决跨域方法一 过程如图&#xff1a; 1.在配置文件中设置代理服务器的地址 //vue.config.js module.exports{pages:{index:{// 入口entry:src/main.js,},},lintOnSave:false, //关闭语法检测// 开启代理服务器devServer:{proxy:http://localhost:8000//…

Java基础教程:算术运算符快速掌握

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

SD-WAN简介

一、SD-WAN 定义概念 SD-WAN&#xff08;Software-Defined Wide Area Network&#xff09;&#xff0c;即软件定义广域网&#xff0c;代表了一种具有深远变革意义的网络技术架构和理念。 在传统广域网基础上的创新性演进&#xff0c;融合了软件定义网络&#xff08;SDN&#…

操作系统之银行家算法

目录 前言 银行家算法 定义 举例 策略 思路 结束语 前言 今天是坚持写博客的第16天&#xff0c;已经超过半个月了&#xff0c;希望可以继续坚持&#xff0c;不断积累与回顾&#xff0c;夯实基础知识体系的基础。我们今天来讲讲操作系统当中的另一个重要知识点——银行家…

vue2组件传参方法

一、父传子 1、$refs方法 <template><div class"father"><h1>我是父亲</h1><button click"getHeight">获取身高</button><ChildView ref"childRef"></ChildView></div> </template&…

MATLAB中扩展卡尔曼滤波误差估计的关键点

在MATLAB中&#xff0c;对于扩展卡尔曼滤波&#xff08;EKF&#xff09;的误差估计&#xff0c;主要涉及对系统状态估计的准确性和精度的评估。EKF是一种适用于非线性系统的状态估计方法&#xff0c;它通过递归的方式&#xff0c;结合系统的动态模型和观测模型&#xff0c;来预…