当前位置: 首页 > 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.xdnf.cn/news/1184563.html

相关文章:

  • Axios基本使用
  • GUI界面已经移植完,添加欠缺字,微调GUI界面说明
  • Kafka运维实战 15 - kafka 重设消费者组位移入门和实战【实战】
  • 时间和空间复杂度
  • 八股文之JVM
  • DNS 服务正反向解析与 Web 集成实战:从配置到验证全流程
  • Day 21: 常见的降维算法
  • 专题:2025电商增长新势力洞察报告:区域裂变、平台垄断与银发平权|附260+报告PDF、原数据表汇总下载
  • 小米8(dipper)刷入kernelSU内核root定制rom系统教程以及安装LSPosed模块
  • Windows-WSL-Docker端口开放
  • FunASR实时多人对话语音识别、分析、端点检测
  • NLP验证自动化脚本优化
  • 从热点到刚需:SmartMediaKit为何聚焦B端视频系统建设?
  • 【lucene】AttributeSource概述
  • Ethereum:Geth + Clef 本地开发环境,如何优雅地签名并发送一笔以太坊交易?
  • Linux 内存深度剖析:栈与堆的底层机制与实战指南
  • 汽车免拆诊断案例 | 2010款奔驰E200 CGI车EPS OFF灯异常点亮
  • MCP 与传统集成方案深度对决:REST API、GraphQL、gRPC 全方位技术解析
  • Linux725 磁盘阵列RAID0 RAID1
  • Linux库——库的制作和原理(1)_回顾动静态库、制作使用库
  • docker-compose:未找到命令的检查步骤和修复
  • 从数据孤岛到融合共生:KES V9 2025 构建 AI 时代数据基础设施
  • 65.第二阶段x64游戏实战-替换游戏lua打印可接任务
  • 【论文阅读】-《GenAttack: Practical Black-box Attacks with Gradient-Free Optimization》
  • 人工智能概述
  • 智慧电视:开启养老新时代
  • Linux 设备驱动模型
  • LLM:Day3
  • 计算机算术4-整形乘法
  • UE5多人MOBA+GAS 30、技能升级机制