16-k8s-configMap配置管理中心

news2024/11/23 23:44:47

文章目录

    • 一、相关概念
    • 二、基于目录创建configMap
    • 三、基于文件创建configMap
    • 四、基于自定义参数创建configMap
    • 五、configMap使用
    • 六、configMap热更新

一、相关概念

  1. 简介

    为了解决传统容器中配置的挂载、变更、管理等问题,在k8s中引入了一个叫做configmap的资源对象,在configmap中,各个配置项都是以key-value的方式存在的,value的数据可以是一个配置文件的内容,这些配置项被保存在k8s使用的持久化存储etcd中。这样就形成了一个k8s中的配置中心,可以独立的对configmap中的数据进行修改,然后将configmap挂载到pod中进行使用,可以以env的方式,也可以以配置文件的方式在pod中进行引用。这样配置和pod就实现了解耦,都是k8s中独立的资源对象。

  2. 使用场景

    • 填充环境变量的值
    • 设置容器内的命令行参数
    • 填充卷的配置文件

  3. 常用创建方式

    • 基于目录创建
    • 基于文件创建
    • 基于自定义参数创建

  4. configMap指令查看:kubectl create configMap -h

二、基于目录创建configMap

  1. 创建文件夹:mkdir /opt/config

  2. 创建文件:vi /opt/config/t1.properties

    configmap1: 
      name: myConfigmap1
    
  3. 创建文件:vi /opt/config/t2.properties

    configmap2: 
      name: myConfigmap2
    
  4. 创建configMap:kubectl create configmap my-config --from-file=/opt/config/

  5. 查看:kubectl get cm
    在这里插入图片描述

  6. 查看详情:kubectl describe cm my-config
    在这里插入图片描述

三、基于文件创建configMap

  1. 创建configMap:kubectl create configmap t1-config --from-file=/opt/config/t1.properties

  2. 查看:kubectl get cm
    在这里插入图片描述

  3. 查看详情kubectl describe cm t1-config
    在这里插入图片描述

  4. 基于文件创建configMap并且修改文件名:kubectl create cm t2-config --from-file=new-t2.yml=/opt/config/t2.properties

  5. 查看:kubectl describe cm t2-config
    在这里插入图片描述

四、基于自定义参数创建configMap

  1. 创建:kubectl create cm t3-config --from-literal=username=root --from-literal=password=admin

  2. 查看详情(这种方式创建不会有文件名): kubectl describe cm t3-config
    在这里插入图片描述

五、configMap使用

  1. 创建一个pod,将configMap参数设置为环境变量并且打印出来

    1)vi /opt/env-test.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: env-test
    spec:
      containers:
      - name: env-test
        image: alpine
        command: ["/bin/sh", "-c", "env;sleep 3600"]
        imagePullPolicy: IfNotPresent
        env :
        - name: username
          valueFrom:
            configMapKeyRef:
              name: t3-config # configMap的名字
              key: username #表示从name的ConfigMap中获取名字为key 的 value,将其赋值给本地环境变量JAVA_YM_OPTS
        - name: password
          valueFrom:
            configMapKeyRef:
              name: t3-config
              key: password
      restartPolicy: Never
    
    

    2)创建pod:kubectl apply -f /opt/env-test.yaml

    3)查看:kubectl logs env-test
    在这里插入图片描述

  2. 创建一个pod,将configMap参数挂载到pod里面去

    1)创建ytaml文件:vi /opt/env-test-pod.yaml

    ps:该方式将会把需要挂载的目录底下的文件都清除掉,被挂载文件夹的文件替换掉

    apiVersion: v1
    kind: Pod
    metadata:
      name: env-test-pod
    spec:
      containers:
      - name: env-test
        image: alpine
        command: ["/bin/sh", "-c", "env;sleep 3600"]
        imagePullPolicy: IfNotPresent
        volumeMounts: #加载数据卷
        - name: t1-config #表示加载volumes属性中哪个数据卷
          mountPath: "/usr/local/mysql/conf" #想要将数据卷中的文件加载到哪个目录下
          readOnly: true #是否只读
      volumes: #数据卷挂载configmap. secret
        - name: t1-config  #数据卷的名字,随意设置
          configMap: #数据卷类型为CofngiMap
            name: t1-config  # configMap 的名字,必须跟想要加载的 configmap 相同
            items: #对configmap 中的 key进行映射,如果不指定,默认会讲configmap中所有 key全部转换为一个个同名的文件
            - key : "t1.properties" # configMap中的key
              path: "t1.properties" #将该 key的值转换为文件
      restartPolicy : Never
    

    2)创建pod:kubectl apply -f /opt/env-test-pod.yaml

    3)进入pod并且检查文件

    kubectl exec -it env-test-pod -- sh
    cd /usr/local/mysql/conf
    ls
    

在这里插入图片描述

  1. 我们可以使用subPath属性避免上面那种完全覆盖文件夹的情况

    1)编辑文件夹:vi /opt/env-subPath-pod.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: env-subpath-pod
    spec:
      containers:
      - name: testc
        image: busybox
        command: ["/bin/sleep","10000"]
        volumeMounts:
          - name: t1-config
            mountPath: /etc/config.ini   # 最终在容器中的文件名
            subPath: config.ini  #要挂载的confmap中的key的名称
      volumes:
        - name: t1-config
          configMap:
            name: t1-config
            items: #对configmap 中的 key进行映射,如果不指定,默认会讲configmap中所有 key全部转换为一个个同名的文件
            - key : "t1.properties" # configMap中的key
              path: "config.ini" #将该key的值转换为文件
    

    2)创建pod:kubectl apply -f /opt/env-subPath-pod.yaml

    3)验证

    kubectl exec -it env-subpath-pod  -- sh
    cd /etc
    ls
    

在这里插入图片描述

六、configMap热更新

  1. 热更新情况

    1) 默认方式(挂载configmap):会更新,更新周期是更新时间+缓存时间
    2) subPath:不会更新
    3) 变量形式:如果pod 中的一个变量是从 configmap或 secret中得到,同样也是不会更新的
    对于subPath 的方式,我们可以取消subPath 的使用,将配置文件挂载到一个不存在的目录,避免目录的要盖,然后再利用软连接的形式,将该文件牯持到目标位置
    
  2. 前面我们是以env-test-pod节点为默认方式启动的节点,所以直接拿env-test-pod节点测试

  3. 验证热更新

    1)查看节点内容

    kubectl exec -it env-test-pod -- sh
    cd /usr/local/mysql/conf
    ls
    

在这里插入图片描述

2)修改: kubectl edit cm t1-config

加上热更新三个字

data:
  t1.properties: "configmap1: \n  name: myConfigmap热更新\n"

3)需要稍等一会,然后重新访问:cat t1.properties
在这里插入图片描述

  1. 修改configMap文件的方式

    ps:除了直接修改kubectl edit cm以外,也可以使用replace

    1)修改配置文件:vi /opt/config/t1.properties

    configmap2: 
      name: myConfigmap2热更新replace
    

    2)刷新:kubectl create configmap t1-config --from-file=/opt/config/t1.properties --dry-run -o yaml | kubectl replace -f-

    3)需要稍等一会,然后重新访问:cat t1.properties
    在这里插入图片描述

  2. 对于一些敏感服务的配置文件,在线上有时是不允许修改的,此时在配置configmap时可以设置禁止修改:kubectl edit cm t1-config

    增加:immutable: true

    # Please edit the object below. Lines beginning with a '#' will be ignored,
    # and an empty file will abort the edit. If an error occurs while saving this file will be
    # reopened with the relevant failures.
    #
    apiVersion: v1
    data:
      t1.properties: "configmap1: \n  name: myConfigmap1热更新replace\n"
    immutable: true
    kind: ConfigMap
    metadata:
      creationTimestamp: "2023-07-21T14:32:47Z"
      name: t1-config
      namespace: default
      resourceVersion: "195897"
      uid: 683b2f51-a539-4486-8ee6-bf0b0a6eab11
    

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

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

相关文章

采用医疗AI、自然语言处理技术的java智能导诊导医系统源码

一套java智能导诊导医系统源码(演示自主版权商业项目应用) 随着人工智能技术的快速发展,语音识别与自然语言理解技术的成熟应用,基于人工智能的智能导诊导医逐渐出现在患者的生活视角中,智能导诊系统应用到医院就医场景…

同为科技TOWE智能PDU引领数据中心机房远控用电安全高效

随着数据中心的环境变得更加动态和复杂,许多数据中心都在对数据中心管理人员施加压力,要求提高可用性,同时降低成本,提升效率。新一代高密度服务器和网络设备的投入使用,增加了对更高密度机架的需求,并对整…

《持续交付:发布可靠软件的系统方法》- 读书笔记(五)

持续交付:发布可靠软件的系统方法(五) 第二部分——部署流水线第 5 章 部署流水线解析5.1 引言5.2 什么是部署流水线5.3 部署流水线的相关实践5.3.1 只生成一次二进制包5.3.2 对不同环境采用同一部署方式5.3.3 对部署进行冒烟测试5.3.4 向生产…

vcpkg manifest 的使用

最近项目上要使用 CMakeLists 管理,由于 Windows 版本有依赖到 vcpkg 提供的库,所以需要使用 vcpkg manifest 来统一设置库的版本,方便后续维护 推荐一个文章,介绍的可以说是非常全面了 VCPKG 特性 - Versioning 不过里面也有一些…

『C++ - STL』之优先级队列( priority_queue )

文章目录 前言优先级队列的结构优先级队列的模拟实现仿函数 最终代码 前言 什么是优先级队列,从该名中可以知道他一定有队列的一定属性,即先入先出(LILO),而这里的优先级则可以判断出它的另一个特点就是可以按照一定的条件将符合该条件的先进…

Debian衍生桌面项目SpiralLinux12.231001发布

导读SpiralLinux 是一个从 Debian 衍生出来的桌面项目,其重点是在所有主要桌面环境中实现简洁性和开箱即用的可用性。 spiral Linux 是为刚接触 Linux 世界的人们量身定制的发行版。这是 GeckoLinux 开发人员的创意,他更喜欢保持匿名。尽管他不愿透露姓…

图文详解!带你认识 ancert:硬件兼容性标准实现工具!| 龙蜥技术

编者按:大家都知道 OS 其实是硬件设备资源利用的抽象,所以 OS 和各个硬件设备之间是否兼容,对 OS 的稳定性是非常关键。今天,龙蜥社区硬件兼容性 SIG Maintainer 吴朝峰为大家介绍龙蜥社区硬件兼容性认证的步骤和流程&#xff0c…

python项目之大学生就业信息管理系统设计与实现

项目简介 大学生就业信息管理系统实现了以下功能: 管理员功能:权限认证,职位管理,企业管理,留言管理,用户管理,投递管理。用户功能:首页,招聘会,留言板&…

5.Vue-在Vue框架中实现Vue的增删改查

题记 在vue框架中实现vue的增删改查&#xff0c;以下是具体操作流程和代码 编写TestView.vue文件 TestView.vue文件如下&#xff1a; <template> <div id"app"> <h1>学生列表</h1> <input type"text" v-model"searchQue…

Nodejs原型链污染学习

文章目录 前置知识JavaScript数据类型prototype原型同步和异步child_process模块 原型链污染利用条件 前置知识 JavaScript数据类型 let和var关键字的区别 使用var或let关键字可以定义变量 let和var的区别如下&#xff1a; var是全局作用域&#xff0c;let 只在当前代码块内…

掌握Go编程中的错误处理和日志记录

构建稳健可靠应用的全面指南 错误处理是编写可靠和稳健软件应用的重要方面。在任何编程语言中&#xff0c;错误是不可避免的&#xff0c;如何处理错误会极大地影响代码的质量和稳定性。在本文中&#xff0c;我们将探索Go中的错误处理世界&#xff0c;理解其重要性&#xff0c;…

修炼k8s+flink+hdfs+dlink(五:安装dockers,cri-docker,harbor仓库)

一&#xff1a;安装docker。&#xff08;所有服务器都要安装&#xff09; 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2添加软件源信息 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/cent…

通过商品链接查询淘宝商品详情数据,可以拿到商品标题,商品价格,商品库存,商品销量,商品sku数据等,淘宝API接口

通过商品链接查询淘宝商品详情数据可以参考以下步骤&#xff1a; 打开手机淘宝或者PC端&#xff0c;复制需要查询的商品链接。打开浏览器&#xff0c;输入商品链接&#xff0c;点击搜索。点击搜索结果中的商品链接&#xff0c;进入商品详情页面。点击鼠标右键&#xff0c;选择…

【前段基础入门之】=>CSS3新特性 3D 变换

导语 在上一章节中&#xff0c;我们分享了2D 变换的效果&#xff0c;也分享了一些案例&#xff0c;同时&#xff0c;既然有2D 变换&#xff0c;那么也就肯定有 3D 变换 那么本章节&#xff0c;就为大家带来有关3D 变换的分享. 文章目录 开启3D空间设置景深透视点位置3D 位移3D …

职场中,如何更高效地分析和解决问题(一)

要在职场取得成功&#xff0c;必须掌握多种技能。这些技能大致可分为三类&#xff1a; 一是职能性技能&#xff0c;二是分析和解决问题的技能&#xff0c;三是处理人际关系的技能。 无论在生活中还是工作中&#xff0c;我们都会面临各种问题&#xff0c;有些问题可能简单易处…

Avalonia 实现跨平台的视频聊天、屏幕分享(源码,支持Win、银河麒麟、统信UOS)

现在最火的.NET跨平台UI框架莫过于Avalonia了。Avalonia 基于.NET Core&#xff0c;因此它可以运行在任何支持.NET Core的平台上。之前基于CPF跨平台UI框架写过一个视频聊天的demo&#xff0c;而现在看来Avalonia是大势所趋&#xff0c;于是&#xff0c;我再写一个Avalonia版本…

TP5.1 导出excel文件

在 ThinkPHP 5.1 中引入 PHPExcel&#xff08;现在已被官方弃用&#xff0c;推荐使用 PhpSpreadsheet&#xff09;时&#xff0c;可以按照以下步骤进行操作&#xff1a; 在 composer.json 文件中添加 PHPExcel&#xff08;PhpSpreadsheet&#xff09;的依赖项。找到 require 部…

告别单调的列表页,探索JVS低代码列表页设计的新思路

列表页是什么&#xff1f; 列表页是管理平台中的基础页面&#xff0c;核心的逻辑是实现数据的增删改查&#xff08;CRUD&#xff09;&#xff0c;列表页核心的几个要素&#xff1a;页面内容的数据展示、查询条件、页面按钮及按钮触发的逻辑。 列表页配置 具备应用配置权限的…

利用Python turtle绘制中国结附源码

一、中国结 01 平安喜乐 1&#xff09;效果图 import turtle turtle.screensize(600,800) turtle.pensize(10) turtle.pencolor("red") turtle.seth(-45) turtle.fd(102) turtle.circle(-6,180) turtle.fd(102) turtle.circle(6,180) turtle.fd(102) turtle.circle(…

5、函数式编程--方法引用

目录 6. 方法引用6.1 推荐用法6.2 基本格式6.3 语法详解(了解)6.3.1 引用类的静态方法格式使用前提 6.3.2 引用对象的实例方法格式使用前提 6.3.4 引用类的实例方法格式使用前提 6.3.5 构造器引用格式使用前提 6. 方法引用 ​ 我们在使用lambda时&#xff0c;如果方法体中只有…