【Kubernetes】配置管理(一):ConfigMap

news2024/11/19 20:23:51

配置管理(一):ConfigMap

  • 1.配置管理
  • 2.使用 ConfigMap 管理 Pod 的配置信息
    • 2.1 创建 ConfigMap
      • 2.1.1 在命令行中通过指定 ConfigMap 的参数进行创建
      • 2.1.2 通过指定的配置文件创建 ConfigMap
      • 2.1.3 通过一个文件内的多个键值对创建 ConfigMap
      • 2.1.4 通过 YAML 文件创建 ConfigMap
    • 2.2 使用 ConfigMap
      • 2.2.1 通过环境变量直接将 ConfigMap 的配置信息传递给 Pod
      • 2.2.2 通过数据卷 volume 将 ConfigMap 的配置信息挂载到 Pod 内
    • 2.3 ConfigMap 的动态更新

当镜像制作完成后被用来创建 Pod 时,如果需要修改镜像中的一些参数值则比较麻烦 —— 需要重新制作镜像。能否让镜像根据实际的需要,自动读取相应的配置信息呢?这时就需要使用到 Kubernetes 的配置管理。

1.配置管理

在实际的应用开发过程会遇到这样的情况:在开发 Web 应用时,在开发环境中需要连接 MySQL 数据库;而在生产环境中需要连接 Redis 数据库,这是两套相互独立的环境。这就需要为应用指定不同的参数来满足实际的要求。如果不能很好地管理这些配置信息,则运维工作将变得无比烦琐。

在这里插入图片描述

为了解决这样的问题,Kubernetes 提供了自己的解决方案,它将配置信息作为一种独立的资源存入配置中心,并将其以 注入 的方式提供给 Pod 使用。如果更新了配置中心中的配置信息,则 Pod 会自动加载更新后的配置信息。Kubernetes 主要通过 ConfigMapSecret 两种方式来实现配置信息的管理。
在这里插入图片描述

2.使用 ConfigMap 管理 Pod 的配置信息

ConfigMap 是用来 存储配置信息 的 Kubernetes 资源对象。ConfigMap 采用 明文 的方式将所有的配置信息都存储在 ETCD 中。在 ConfigMap 创建成功后,就可以在 Pod 中使用 ConfigMap了。

在这里插入图片描述

2.1 创建 ConfigMap

2.1.1 在命令行中通过指定 ConfigMap 的参数进行创建

  • 执行 kubectl create configmap 命令,并指定 --from-literal 参数。
kubectl create configmap demo-configmap1 \
--from-literal=db.host=192.168.1.2 \
--from-literal=db.port=3306 \
--from-literal=user=admin \
--from-literal=password=123456
  • 查看创建的 ConfigMap。
kubectl get configmap
kubectl get cm
  • 查看 demo-configmap1 的详细信息。
kubectl describe configmap demo-configmap1
Name:           demo-configmap1
Namespace:      default
Labels:         <none>
Annotations:    <none>

Data
====
db.host:
----
192.168.1.2
db.port:
----
3306
password:
----
123456
user:
----
admin

Events: <none>

2.1.2 通过指定的配置文件创建 ConfigMap

  • 创建一个存放配置文件的目录。
mkdir configmap
  • 编辑 configmap/redis.properties 文件,在其中输入以下内容。
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
  • 编辑 configmap/mysql.properties 文件,在其中输入以下内容。
mysql.host=127.0.0.1
mysql.port=3306
mysql.password=123456

🚀 这里创建了两个配置文件:redis.propertiesmysql.properties,可以把这两个配置文件中的配置信息保存在一个 ConfigMap 中。

  • 执行 kubectl create configmap 命令,通过指定 --from-file 参数创建 ConfigMap。
kubectl create configmap demo-configmap2 \
--from-file=./configmap/
  • 查看 demo-configmap2 的详细信息。
kubectl describe configmap demo-configmap2
Name:           demo-configmap2
Namespace:      default
Labels:         <none>
Annotations:    <none>

Data
====
mysql.properties:
----
mysql.host=127.0.0.1
mysql.port=3306
mysql.password=123456

redis.properties:
----
redis.host=127.0.0.1
redis.port=6379
redis.password=123456

Events: <none>

2.1.3 通过一个文件内的多个键值对创建 ConfigMap

  • 执行以下命令创建 env-config.txt 文件。
cat << EOF >> env-config.txt
db.host=192.168.0.1
db.port=3306
user=admin
password=123456
EOF
  • 执行 kubectl create configmap 命令,通过 --from-env-file 参数创建 ConfigMap。
kubectl create configmap demo-configmap3 --from-env-file=env-config.txt

2.1.4 通过 YAML 文件创建 ConfigMap

  • 创建 config.yaml 文件。
apiVersion: v1
kind: ConfigMap
metadata:
  name: demo-configmap4
data:
  db.host: 192.168.0.200
  db.port: "3306"
  user: "admin"
  password: "123456"
  • 执行 kubectl create -f 命令创建 ConfigMap。
kubectl create -f config.yaml

2.2 使用 ConfigMap

成功创建 ConfigMap 后,就可以在 Pod 中使用它来实现配置信息管理。具体可以通过两种方式:环境变量数据卷 volume

2.2.1 通过环境变量直接将 ConfigMap 的配置信息传递给 Pod

  • 创建 configmap-usage01.yaml 文件,使用环境变量将 demo-configmap4 中能 db.hostdb.port 分别映射到 Pod 容器中的 HOSTPORT 这两个环境变量中。
apiVersion: v1
kind: Pod
metadata:
  name: configmap-usage01
spec:
  containers:
    - name: busybox
      image: busybox
      imagePullPolicy: IfNotPresent
      command: [ "/bin/sh", "-c", "echo $(HOST) $(PORT)" ]
      env:
        - name: HOST
          valueFrom:
            configMapKeyRef:
              name: demo-configmap4
              key: db.host
        - name: PORT
          valueFrom:
            configMapKeyRef:
              name: demo-configmap4
              key: db.port
  restartPolicy: Never
  • 使用 kubectl apply -f 命令创建 Pod。
kubectl apply -f configmap-usage01.yaml
  • 查看 Pod 的标准输出日志。
kubectl logs configmap-usage01

输出的信息如下:

192.168.0.200 3306

2.2.2 通过数据卷 volume 将 ConfigMap 的配置信息挂载到 Pod 内

具体的做法是:将 ConfigMap 的配置信息 demo-configmap2 通过数据卷挂载到容器中的 /etc/config 目录下,根据 key 在挂载目录下创建 redis.properiesmysql.properties 文件,文件内容是对应的 values 值。

  • 创建 configmap-usage02.yaml 文件,并在其中输入以下内容。
apiVersion: v1
kind: Pod
metadata:
  name: configmap-usage02
spec:
  containers:
    - name: busybox
      image: busybox
      imagePullPolicy: IfNotPresent
      command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: demo-configmap2
  restartPolicy: Never
  • 使用 kubectl apply -f 命令创建 Pod。
kubectl apply -f configmap-usage02.yaml
  • 查看 Pod 的标准输出日志。
kubectl logs configmap-usage02

输出的信息如下:

redis.host=127.0.0.1
redis.port=6379
redis.password=123456

2.3 ConfigMap 的动态更新

在创建 ConfigMap 成功后,Kubernetes 支持动态更新 ConfigMap。ConfigMap 可以通过 环境变量数据卷 这两种方式来使用。

  • 如果通过 环境变量 使用 ConfigMap,则在配置信息更新后,环境变量不会同步更新
  • 如果通过 数据卷 使用 ConfigMap,则在配置信息更新后,数据卷中的配置信息会同步更新,但有一定的延迟

下面来演示 ConfigMap 的动态更新。

  • 这里以 demo-configmap2 为例。将 ConfigMap 导出为 YAML 文件。
kubectl get cm demo-configmap2 o yaml > demo-configmap2.yaml
  • demo-configmap2.yaml 文件中的 redis.host 的值从 127.0.0.1 修改为 localhost
apiVersion: v1
data:
  mysql.properties: |
    mysql.host=127.0.0.1
    mysql.port=3306
    mysql.password=123456
  redis.properties: |
    redis.host=localhost
    redis.port=6379
    redis.password=123456
kind: ConfigMap
metadata:
  creationTimestamp: "2022-01-28T04:00:31Z"
  name: demo-configmap2
  namespace: default
  resourceVersion: "64797"
  selfLink: /api/v1/namespaces/default/configmaps/demo-configmap2
  uid: c8382408-1b2c-4da3-b468-1ca5f88d3f02
  • 执行 kubectl apply -f 命令生效 demo-configmap2.yaml 文件。
kubectl apply -f demo-configmap2.yaml
  • 查看修改后的 demo-configmap2
kubectl describe cm demo-configmap2

🚀 如果 demo-configmap2 文件以数据卷方式被 Pod 使用,则 Pod 中挂载的配置信息在经过一段时间的延迟后会自动更新。

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

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

相关文章

C++数据结构重要知识点(3)(红黑树及其插入操作)

1.红黑树和AVL树的区别 红黑树和AVL树都是平衡树&#xff0c;都是为了解决二叉搜索树的劣势。其中&#xff0c;AVL树的左右子树的高度差不超过1&#xff0c;而红黑树的最长路径不超过最短路径的二倍&#xff0c;也就是说&#xff0c;红黑树是一种近似平衡&#xff0c;而AVL树是…

【设计模式】(万字总结)深入理解Java中的创建型设计模式

1. 前言 在软件开发的世界里&#xff0c;设计模式是一种被广泛接受并应用的解决方案。它们不仅仅是代码的设计&#xff0c;更是对问题的思考和解决的方法论。在Java开发中&#xff0c;特别是在面向对象的编程中&#xff0c;设计模式尤为重要。创建型设计模式&#xff0c;作为设…

JavaScript安全编程宝典【万字详解】

文章目录 简介基本说明特点两种使用方式在script中写使用script标签引入JS文件 数据类型介绍特殊值 运算符算数运算符赋值运算符逻辑运算符&#xff1a;条件运算符 数组的定义基本使用数组的遍历 函数含义函数定义方式基本语法代码示例 细节和注意事项 自定义对象Object形式{} …

解决mysql数据库表读取中文乱码问题

本文目录 0、省流1、问题出现2、问题排查3、结论 0、省流 在服务器上创建数据库服务时&#xff0c;使用的sql脚本加载的数据库表&#xff0c;其中脚本中有一些预设的测试数据包含中文汉字&#xff0c;由于linxu服务器控制台默认编码是lantin1&#xff0c;导致中文通过该编码方…

鸿蒙HarmonyOS开发:多种内置弹窗及自定义弹窗的详细使用指南

文章目录 一、消息提示框&#xff08;showToast&#xff09;1、导入模块2、语法3、参数4、示例5、效果 二、对话框&#xff08;showDialog&#xff09;1、导入模块2、语法3、参数4、示例5、效果 三、警告弹窗&#xff08;AlertDialog&#xff09;1、语法2、参数3、AlertDialogP…

JDBC(Java访问数据库)

Java Database Connectivity&#xff1a;Java访问数据库的解决方案 JDBC定义了一套标准接口&#xff0c;即访问数据库的通用API&#xff0c; 不同的数据库厂商根据各自数据库的特点去实现这些接口。 JDBC希望用相同的方式访问不同的数据库&#xff0c;让具体的数据库操作与数…

科普文:科普文:springcloud之-Hystrix服务容错

Hystrix概念 Hystrix 服务容错保护 的概念和说明 这就是大名鼎鼎的&#xff1a;豪猪 豪猪的英文就是&#xff1a;Hystrix&#xff0c;国外一些大牛的程序员在给自己的架构起名字的时候&#xff0c;往往就这么特别。哪天咱们中国人自己也能写出些架构&#xff0c;咱们就按照中…

⚒linux通过shell脚本上传文件至minio中

&#x1f534;大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 前言 之前数据库是备份到了七牛云上了&#xff0c;但是眼看着数据库文件越来越大&#xff0c;七牛云里面的余额越来越少&#xff0c;所以&#xff0c;转移阵地。 家里的nas&…

昇思25天学习打卡营第20天|munger85

GAN图像生成 生成对抗网络中是为了让我们生成的东西向期望的那样&#xff0c;就是为了让生成的东西很像&#xff0c;真的&#xff0c;例如用它来画画。就是描述整个网络的逻辑和目的&#xff0c;它有两部分组成&#xff0c;一个是生成器&#xff0c;一个是辨别器。他希望的是辨…

C++程序编程中的 SetWindowLong 函数的几个常见用途(附源码)

目录 1、API函数SetWindowLong说明 2、修改窗口风格 3、给窗口指定新的窗口消息处理函数,以拦截窗口消息 4、可以给窗口设置关联的UserData数据,方便在窗口内部使用这些数据 5、64位程序中需要使用SetWindowLongPtr 6、最后 C++软件异常排查从入门到精通系列教程(专栏…

Sping项目只能勾选17和21 (已解决) 导致的后续Invalid bound statement (not found):

问题发现 今天创建项目的时候发现 idea初始化spring的时候选择不了Java8 解决方案:替换URL为 https://start.aliyun.com/ 将IDEA页面创建Spring项目&#xff0c;其实是访问spring initializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。 将https://start.spr…

TortoiseSVN安装使用教程(超详细)

目录 前言1. 下载2. 安装2.1 安装TortoiseSVN&#xff08;看图操作&#xff09;2.2 安装语言包&#xff08;看图操作&#xff09; 3. 使用3.1 版本库浏览器3.2 其他教程 前言 TortoiseSVN&#xff1a;&#xff08;俗称小乌龟&#xff09;Subversion版本控制系统的一个免费开源客…

Pytorch基础:Tensor的view方法(非连续张量也可以使用view)

相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 在Pytorch中&#xff0c;view是Tensor的一个重要方法&#xff0c;用于返回一个改变了形状&#xff0c;但数据和数据的顺序与原来一致的新张量&#xff0c;但是新张…

夸克Android一面凉经(2024)

夸克Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《夸克Android一面凉经(2024)》。 面试职位: 智能信息-客户端开发工程师-夸克小说 技术一…

20240728 每日AI必读资讯

Google Gemini 聊天机器人更新 可以免费使用Gemini 1.5 Flash 1. 引入Gemini 1.5 Flash模型&#xff1a; • 提供更快和更高质量的响应。 • 提升推理和图像理解能力。 • 上下文窗口扩大到 32Ktokens&#xff0c;允许进行更长的对话和处理更复杂的问题。 • 即将支持通过 Goo…

【你也能从零基础学会网站开发】 SQL结构化查询语言应用基础-- SQL Server数据库开发创建表之FOREIGN KEY外键约束完全详解最详细!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 浅谈FOREIGN K…

故障诊断 | CNN-LSSVM卷积神经网络结合最小二乘支持向量机故障诊断(Matlab)

效果一览 文章概述 故障诊断 | CNN-LSSVM卷积神经网络结合最小二乘支持向量机故障诊断(Matlab) 模型描述 使用CNN进行特征提取: 使用CNN模型对数据进行训练,通常是图像数据。 通过CNN的卷积层和池化层提取图像的特征。 将提取到的特征作为输入,可以是全连接层的输出或者卷…

系统架构师考点--系统架构设计(上)

大家好。今天我来总结一下系统架构设计相关的考点。这块考点是重中之重&#xff0c;每年上午场客观题占20-25分左右&#xff0c;下午案例题也会考到&#xff0c;下午论文也会考到。大家要好好学学这部分内容。 一、软件架构概述 软件架构是指从需求分析到软件设计之间的过渡过…

机器学习 | 分类算法原理——逻辑回归

Hi&#xff0c;大家好&#xff0c;我是半亩花海。接着上次的线性可分继续更新《白话机器学习的数学》这本书的学习笔记&#xff0c;在此分享逻辑回归这一分类算法原理。本章的分类算法原理基于《基于图像大小进行分类》项目&#xff0c;欢迎大家交流学习&#xff01; 目录 一、…

【51CTO-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…