当前位置: 首页 > news >正文

Kubernetes配置管理

目录

  • 什么是ConfigMap
  • 创建ConfigMap
      • 1:基于目录创建ConfigMap
        • 1.创建conf目录,放置文件
        • 2.基于目录下的所有文件创建ConfigMap
        • 3.查看当前创建的ConfigMap
      • 2:基于文件创建ConfigMap
        • 1.单个文件创建ConfigMap
        • 2.使用带有key的命令创建ConfigMap
        • 3.多个文件创建ConfigMap
      • 3:基于ENV文件创建ConfigMap
        • 1.创建测试用的key-value文件
        • 2.创建ConfigMap
      • 4:基于字符值创建ConfigMap
      • 5:删除创建的ConfigMap
  • ConfigMap实践
      • 1:使用valueFrom定义容器的环境变量
        • 1.先以字符集的形式创建ConfigMap
        • 2.使用valueFrom从ConfigMap中定义变量
        • 3.创建此pod
      • 2:使用envFrom定义容器的环境变量
        • 1.使用envFrom从ConfigMap中定义变量
        • 2.创建此pod
      • 3:以文件形式挂载ConfigMap
        • 1.使用带有key的命令创建ConfigMap
        • 2.编写文件,将名为spec-config的ConfigMap挂载到容器的/etc/conf目录下
        • 3.登录容器
      • 4:自定义文件名挂载ConfigMap
        • 1.编写pod文件
        • 2.创建此pod
        • 3.登录容器
      • 5:指定挂载文件权限
        • 1.编写pod文件
        • 2.创建此pod
        • 3.登录容器
      • 6:利用SubPath解决挂载覆盖的问题
        • 1.创建配置文件
        • 2.使用带有key的命令创建ConfigMap
        • 3.创建pod文件,挂载文件
        • 4.登录容器
  • 加密数据管理
      • 1:创建secret
        • 1.使用kubectl命令创建secret
        • 2.通过yaml文件创建secret
      • 2:解码secret
      • 3:在pod中应用secret

什么是ConfigMap

在传统架构中,配置文件往往被保存在宿主机上,程序启动是可以指定某个配置文件,但是使用容器部署时,容器所在的节点并不固定,所以不能使用这种方式,此处在构建镜像时,如果把配置文件也放在容器里面,那么配置文件一旦有更改的话,也是一件非常麻烦的事情。所以k8s 抽象了一个configMap的概念,将配置与 pod 和组件分开,这有助于保持工作负载的可移植性,使配置更易于更改和管理。比如在生产环境中,可以将 Nginx、Redis 等应用的配置文件存储在 configMap 上,然后将其挂载即可使用。
相对于 secret,ConfigMap 更倾向于存储和共享非敏感、未加密的配置信息,假如是集群中使用敏感信息,最好使用 secret。
ConfigMap 用来在键值对数据库(etcd)中保存非加密数据。一般用来保存配置文件。
ConfigMap 可以用作环境变量、命令行参数或者存储卷。
ConfigMap 将环境配置信息与 容器镜像 解耦,便于配置的修改。
ConfigMap 在设计上不是用来保存大量数据的。
ConfigMap中保存的数据不可超过1mb。

创建ConfigMap

ConfigMap 可以用目录(目录下有多个文件)、单个文件或字符值的方式创建,使用 kubect1 创建一个 ConfigMap 的命令格式如下:

kubectl create configmap <map-name><data-source>

map-name:ConfigMap 的名称
data-source:数据源,可以使数据的目录、文件或字符值
ConfigMap 中的数据是以键值对(key-value pair)的形式保存的,其中🔑文件名或秘钥
value:文件内容或字符值

1:基于目录创建ConfigMap

假如一次性需要多个文件来创建 ConfigMap,可以使用 kubectl create configmap 命令从同一个
目录中的多个文件创建 configMap。

1.创建conf目录,放置文件

在这里插入图片描述

2.基于目录下的所有文件创建ConfigMap

在这里插入图片描述
注意:
ConfigMap 是按namespace 隔离的,不同的namespace 之间的configMap 的名称可以相同,但是不能跨namespace 进行访问,创建ConfigMap 时,可以使用-n选项指定资源所在的namespace。

3.查看当前创建的ConfigMap

在这里插入图片描述
注意:
由于该 ConfigMap 是直接基于目录创建的,没有指定 ConfigMap 中的 key 名,因此默认是按照目录下的文件名作为 ConfigMap 数据中的 key 名。

2:基于文件创建ConfigMap

1.单个文件创建ConfigMap

在这里插入图片描述
注意:
由于没有指定 ConfigMap 的 key,因此使用文件名作为 key。

2.使用带有key的命令创建ConfigMap

在这里插入图片描述

3.多个文件创建ConfigMap

在这里插入图片描述

3:基于ENV文件创建ConfigMap

假如有一个文件 game-env-file.cfg,里面存储的 key=value 形式的数据,此类文件可以当做某个应用的环境变量配置,此时可以使用–from-env-file 从 ENV 文件创建 configMap。

1.创建测试用的key-value文件

在这里插入图片描述

2.创建ConfigMap

在这里插入图片描述

4:基于字符值创建ConfigMap

利用字符值创建ConfigMap
在这里插入图片描述

5:删除创建的ConfigMap

在这里插入图片描述

ConfigMap实践

本实践案例将 CM 创建的变量引入到 pod 内。
在 kubernetes 中,用户可以使用环境变量引用 ConfigMap 中的数据,当容器启动时,kubernetes会将 configMap 数据作为环境变量注入到容器的进程中。为了使用 configMap 中的数据,用户需要在 pod的规范(spec)中定义一个 env 字段,并指定 configMap 中的“键值对”

1:使用valueFrom定义容器的环境变量

1.先以字符集的形式创建ConfigMap

在这里插入图片描述

2.使用valueFrom从ConfigMap中定义变量

在这里插入图片描述
在此案例中,env 用于定义环境变量,valueFrom 指定了环境变量的值来源于ConfigMap。“name:my-name01”用于定义容器中用的变量名,其值来自于 CM 中的 name1 的值。“name1”是在 CM 中定义的 key。
用 valueFrom 的方式引入 pod 中的变量名,可以在定义 pod 的之后指定成另一个名称。相当于在 pod中起了一个新的名字,但是值还是原来 ConfigMap 中给定的值。

3.创建此pod

在这里插入图片描述

2:使用envFrom定义容器的环境变量

k8s 从 1.6的版本开始,引入了一个新的字段 envFrom,实现了在 Pod 中将 configMap 中所有定义的key=value 自动生成为环境变量。
使用 envFrom 时,环境变量的名字是 configMap 中数据的 key 名。

备注:valueFrom 和envfrom的区别
通过 valueFrom 来配置环境变量,Pod 的环境变量名与 configMap 中定义的变量名不必相同valueFrom 是指定变量进行映射。
通过 envFrom 会把 configMap 的所有键值对都映射到 Pod 的环境变量中去envFrom 配置的环境变量和 Pod 的环境变量名是相同的

1.使用envFrom从ConfigMap中定义变量

在这里插入图片描述

2.创建此pod

在这里插入图片描述
在这里插入图片描述

3:以文件形式挂载ConfigMap

大部分情况下,ConfigMap 定义的都是配置文件,而不是环境变量,因此需要将 ConfigMap 的文件挂载到 Pod 中,然后 Pod 中的容器就可以引用,此时可以通过 Pod 的 volume 字段进行挂载。

1.使用带有key的命令创建ConfigMap

在这里插入图片描述

2.编写文件,将名为spec-config的ConfigMap挂载到容器的/etc/conf目录下

在这里插入图片描述
在这里插入图片描述注意:
容器的/etc/config 目录会被覆盖掉

3.登录容器

在这里插入图片描述

4:自定义文件名挂载ConfigMap

很多情况下,需要更改挂载的文件名,可以使用 path 字段指定 ConfigMap 挂载的文件名,比如将文件 app2.conf 挂载到/etc/conf 下,并重命名为 app2.cfg。

1.编写pod文件

在这里插入图片描述

2.创建此pod

在这里插入图片描述

3.登录容器

在这里插入图片描述

5:指定挂载文件权限

1.编写pod文件

在这里插入图片描述
备注:
defaultMode:0666
没有设置权限的其他文件默认的权限

2.创建此pod

在这里插入图片描述

3.登录容器

在这里插入图片描述

6:利用SubPath解决挂载覆盖的问题

当挂载 ConfigMap 或 Secret 到容器内部时,会覆盖容器中的目录,也就是是说,在容器中的对应的目录中,就只剩下我们挂载进去的文件,此目录中其他的文件都会丢失。从而导致容器无法正常运行。为了解决挂载覆盖的问题,需要使用 subPath 的方式进行挂载。

1.创建配置文件

在这里插入图片描述

2.使用带有key的命令创建ConfigMap

在这里插入图片描述
在这里插入图片描述

3.创建pod文件,挂载文件

在这里插入图片描述
备注:
mountPath 表示容器中目录
subPath 表示configMap 中文件的key 名
items::这部分定义了如何将 configMap 中的键值对映射到文件系统中。
key: nginx.conf:这个键(key)是指 ConfigMap 中的一个键值对的键名,这里的键名是nginx.conf.
path:nginx.conf:这指定了当这个键被注入到容器的文件系统时,它将被写入的具体路径和文件名

在这里插入图片描述

4.登录容器

在这里插入图片描述

加密数据管理

上一节讲解的 ConfigMap 主要用于非安全的数据,与其对应的是 Secret 对象类型,用来保存敏感信息,例如密码、令牌或 SSH Key,将这些信息放在 Serret 中比较安全和灵活。用户可以创建 Secret 并且引用到 Pod 中,比如使用 Secre 初始化 Redres、MySQL 密码等。

1:创建secret

1.使用kubectl命令创建secret

创建账户信息
在这里插入图片描述
备注:
generic:通用类型
user-pass:创建的secret 的名字

查看Secret:
在这里插入图片描述
备注:
Opaque:不透明的,表示 secret是加密的形式保存数据的
在这里插入图片描述

在这里插入图片描述
默认情况下,get 和 describe 命令都不会显示文件的内容,这是为了防止 Secret 中的内容被意外暴露。所以,显示出来的信息中 Data字段没有对应的值,只显示了文件的名字。

2.通过yaml文件创建secret

手动创建 Secret 时,每一项内容必须是 base64 编码的,所以要先对明文进行编码:
在这里插入图片描述
在这里插入图片描述
创建一个secret
在这里插入图片描述

2:解码secret

在这里插入图片描述
在这里插入图片描述

3:在pod中应用secret

secret 和 ConfigMap 的用法类似,也可以作为数据卷挂载,或作为环境变量以供 Pod 的容器使用。
和 configMap 一样,可以在 Pod 的 volume 中使用 Secret:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/599570.html

相关文章:

  • k8s 中的 deployment,statefulset,daemonset 控制器的区别
  • k8s的service、deployment、探针详解
  • 算法训练营day31 贪心算法⑤56. 合并区间、738.单调递增的数字 、968.监控二叉树
  • Python常用医疗AI库以及案例解析(场景化进阶版)
  • 【小沐学GIS】基于Unity3d绘制三维数字地球Earth(Unity3d、OpenGL、GIS)
  • 10BASE-T1S核心机制——PLCA参数详解
  • Nginx 替换 SSL 证书后的正确操作及常见问题排查
  • go语言基础教程:【2】基础语法:基本数据类型(整形和浮点型)
  • JAVA知识点(四):SpringBoot与分布式、微服务架构
  • yarn在macOS上的安装与镜像源配置:全方位指南
  • 【MAC的VSCode使用】
  • 管理 GitHub Pages 站点的自定义域(Windows)
  • 【ARM】ARM微架构
  • 基坑渗压数据不准?选对渗压计能实现自动化精准监测吗?
  • 电厂液压执行器自动化升级:Modbus TCP与DeviceNet的协议贯通实践
  • pytest-html 优势及与其他插件对比
  • Cartographer安装测试与模块开发(三)--Cartographer在Gazebo仿真环境下的建图以及建图与定位阶段问题(实车也可参考)
  • Java 单元测试详解:从入门到实战,彻底掌握 JUnit 5 + Mockito + Spring Boot 测试技巧
  • git 连接GitHub仓库
  • 安全、架构与 AI 的碰撞
  • 深入解析Hadoop MapReduce中Reduce阶段排序的必要性
  • 自然语言处理技术应用领域深度解析:从理论到实践的全面探索
  • linux 进程信号
  • 苍穹外卖笔记集锦
  • 图像梯度处理与边缘检测
  • 储粮温度预测新方案!FEBL模型用代码实现:LSTM+注意力+岭回归的完整流程
  • 剖析 Web3 与传统网络模型的安全框架
  • Idefics3:构建和更好地理解视觉-语言模型:洞察与未来方向
  • 使用 FFmpeg 实现 RTP 音频传输与播放
  • 视频质量检测效率提升28%!陌讯多模态融合方案在流媒体场景的技术实践