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.1
  port: "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: busybox
   image: busybox
   args: [ "/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: busybox
    image: busybox
    args: [ "/bin/sh", "-c", "sleep 10000" ]
    volumeMounts:
    - name: vol-cm
      mountPath: "/etc/mysql"
      readOnly: true

  volumes:
  - name: vol-cm
    configMap:
      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: nginx
    image: nginx:1.20
    volumeMounts:                               # 用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 #等待一会
在这里插入图片描述

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

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

相关文章

Java(十二)---认识异常

文章目录 前言1. 异常的概念与体系结构1.1.异常的概念1.异常的体系1.3 异常的分类 2. 异常的处理2.1 防御式编程2.2 异常的抛出2.3 异常的捕获2.3.1 异常声明throws2.3.2 try-catch捕获并处理2.3.3 finally 2.4 异常的处理流程 3. 自定义异常类 前言 这一篇就是咱们学习JavaSE…

学习笔记——网络参考模型——TCP/IP模型(传输层)

四、TCP/IP模型-传输层 一、TCP 1、TCP定义 TCP(Transmission Control Protocol&#xff0c;传输控制协议)∶为应用程序提供可靠的面向连接的通信服务。目前&#xff0c;许多流行的应用程序都使用TCP。 连接&#xff1a;正式发送数据之前&#xff0c;提前建立好一种虚拟的&…

String常用操作

String常用方法 构造字符串 常用的构造字符串有3种&#xff1a; 1.直接赋值String s "abcd"; 2.实例化调用构造方法String s new String("abcd"); 3.实例化传字符数组 char[] ch {a,b,c,d}; String s new String(ch);字符串比较 比较 比较的是两个…

40.8K开源交流社区平台:Discourse

Discourse&#xff1a; 开放源代码&#xff0c;打造社区讨论的自由家园- 精选真开源&#xff0c;释放新价值。 概览 Discourse是一个完全开源的社区平台&#xff0c;为那些希望完全控制自己网站运行方式和地点的组织和个人提供服务。经过十多年的实战考验&#xff0c;Discours…

索引 ---- mysql

目录 1. 索引 1.1 概念 1.2 作用 1.3 使用场景 1.4 使用 1.4.1查看索引 1.4.2 创建索引 1.4.3 删除索引 1.5 注意事项 1.6 索引底层的数据结构 (面试经典问题) 1. 索引 1.1 概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的…

数据库(18)——DCL权限控制

MySQL常用权限 权限说明ALL,ALL PRIVILEGES所有权限SELECT查询数据INSERT插入数据UPDATE修改数据DELETE删除数据ALTER修改表DROP删除数据库/表/视图CREATE创建数据库/表 DCL语法 查询权限 SHOW GRANTS FOR 用户名主机名; 查询hello的权限 SHOW GRANTS FOR hellolocalhost; 授…

方法重写

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 基类的成员都会被派生类继承&#xff0c;当基类中的某个方法不完全适用于派生类时&#xff0c;就需要在派生类中重写父类的这个方法&#xff0c;这和…

pycharm链接auto al服务器

研0提前进组&#xff0c;最近阻力需求是把一个大模型复现&#xff0c;笔者电脑18年老机子&#xff0c;无法满足相应的需求。因此租用auto dl服务器。本文记录自己使用pycharm&#xff08;专业版&#xff09;链接auto dl期间踩过的坑。 1.下载pycharm专业版 这一步不解释了&am…

ESP32 WSL环境搭建

克隆代码 代码链接&#xff1a;https://gitee.com/EspressifSystems/esp-idf 克隆代码&#xff1a; git clone https://gitee.com/EspressifSystems/esp-idf 安装环境 cd esp32 /usr/bin/python3 ./esp-idf/tools/idf_tools.py 这里可能需要安装比较久&#xff0c; 有些需要…

基于51单片机的俄罗斯方块

一.硬件方案 本设计采用STC89C52RC单片机作为系统的芯片&#xff0c;实现人机交互、娱乐等功能。选用LCD12864实现俄罗斯方块游戏界面、图形显示&#xff1b;选用独立按键实现游戏控制。本设计实现的基本功能是&#xff1a;用按键控制目标方块的变换与移动&#xff1b;消除一行…

Java 多线程创建:三种主要方法

多线程编程是Java中一个重要的技术点&#xff0c;它允许程序并行执行多个任务&#xff0c;从而提高程序的执行效率。本文将详细介绍在Java中创建多线程的三种主要方法&#xff1a;继承Thread类、实现Runnable接口以及使用Callable和Future接口。 1. 继承 Thread 类 继承Threa…

python_将二维列表转换成HTML格式_邮件相关

python_将二维列表转换成HTML_邮件相关 data[["理想","2"],["理想2","3"]]def list_to_html_table(data):"""将二维列表转换为HTML表格格式的字符串。参数:data -- 二维列表&#xff0c;表示表格的数据。返回:一个字符…

最新国内AI工具(ChatGPT4.0、GPTs、AI绘画、文档分析使用教程)

如何利用AI提高内容生产效率&#xff1f; AI&#xff08;人工智能&#xff09;正以惊人的速度改变我们的生活方式&#xff0c;尤其是在内容生产领域。作为一名创作者&#xff0c;你可能会发现自己在面对海量信息时无从下手&#xff0c;或者在紧迫的截止日期前感觉力不从心。这时…

汽车数据应用构想(二)

一直说数据价值场景&#xff0c;啥叫有价值&#xff1f;啥样的场景有价值&#xff1f;按互联网的价值观来看&#xff0c;用户的高频需求就是价值。用户也许不会付费&#xff0c;但只要他天天用&#xff0c;那就是流量&#xff0c;就是用户黏性&#xff0c;就是价值&#xff01;…

【Qt】对话框

文章目录 1 :peach:对话框介绍:peach:2 :peach:对话框的分类:peach:2.1 :apple:模态对话框:apple:2.2 :apple:非模态对话框:apple:2.3 :apple:混合属性对话框:apple: 3 :peach:Qt 内置对话框:peach:3.1 :apple:消息对话框 QMessageBox:apple: 1 &#x1f351;对话框介绍&#x…

【一刷《剑指Offer》】面试题 29:数组中出现次数超过一半的数字

力扣对应题目链接&#xff1a;169. 多数元素 - 力扣&#xff08;LeetCode&#xff09; 牛客对应题目链接&#xff1a;数组中出现次数超过一半的数字_牛客题霸_牛客网 (nowcoder.com) 核心考点 &#xff1a; 数组使用&#xff0c;简单算法的设计。 一、《剑指Offer》对应内容 二…

计算机网络学习实践:模拟PPP协议验证虚拟局域网(VLAN)

计算机网络实践&#xff1a;模拟PPP协议&&验证虚拟局域网&#xff08;VLAN&#xff09; 挺有意思的大家可以跟着做一做&#xff0c;我是跟着韩志刚老师的视频做的 https://www.bilibili.com/video/BV1Qr4y1N7cH?p31&vd_source7831c5b97cfc5c745eb48ff04f6515e7 …

GCB | 基于36年5个生态系统观测数据发现表层土壤深度提高生态系统的生产力和稳定性

陆地生态系统生产力对全球粮食安全和促进碳固存至关重要&#xff0c;但生产力受到气候变化以及火灾、干旱、洪水、霜冻频率增加和生物多样性减少的压力。了解控制生态系统初级生产力变异的不同因素和机制&#xff0c;为维持生态系统初级生产力和增强生态系统恢复力提供了科学依…

文件系统和日志分析

文件系统 概述 文件是存储在硬盘上的。硬盘上的最小存储单位是扇区&#xff0c;每个扇区的大小是512字节。 inode号&#xff1a;又叫索引号&#xff0c;保存的是元信息&#xff08;主要有文件的属性 &#xff1a;包括权限&#xff0c;创建者&#xff0c;创建日期等&#xff…

Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…