k8s 配置管理中心Configmap详解

🐇明明跟你说过:个人主页

🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅

🔖行路有良友,便是天堂🔖

目录

一、前言

1、k8s简介

2、ConfigMap简介

二、ConfigMap基本概念

1、ConfigMap的用途

2、ConfigMap与Secret的区别

三、创建与管理ConfigMap

1、通过命令行创建ConfigMap

2、通过YAML文件创建ConfigMap

3、ConfigMap的更新

4、ConfigMap的删除与清理


一、前言

1、k8s简介

Kubernetes单词起源于希腊语, 是"舵手"或者"领航员、飞行员"的意思。

Kubernetes(简称K8s)的前世今生可以追溯到谷歌(Google)内部的一个项目,它起源于2003年,当时谷歌正面临着不断增长的应用程序和服务的管理挑战。这个项目最初被称为"Borg",是一个早期的容器编排系统。Borg 的成功经验成为 Kubernetes 开发的契机。

有关k8s起源的介绍,请参考《初识K8s之前世今生、架构、组件、前景》这篇文章

Kubernetes的优点包括可移植性、可伸缩性和扩展性。它使用轻型的YAML清单文件实现声明性部署方法,对于应用程序更新,无需重新构建基础结构。管理员可以计划和部署容器,根据需要扩展容器并管理其生命周期。借助Kubernetes的开放源代码API,用户可以通过首选编程语言、操作系统、库和消息传递总线来构建应用程序,还可以将现有持续集成和持续交付(CI/CD)工具集成。

2、ConfigMap简介

K8s的ConfigMap是一种用于存储配置数据的API对象,属于Kubernetes中的核心对象。它用于将应用程序的配置信息与容器镜像分离,以便在不重新构建镜像的情况下进行配置的修改和更新。ConfigMap可以存储键值对、文本文件或者以特定格式组织的配置文件,例如环境变量、命令行参数等。

ConfigMap的主要作用是提供一个集中管理和传递配置信息的机制,让应用程序能够从ConfigMap中获取配置数据。这样,在不修改容器镜像的前提下,可以根据需要动态地修改应用程序的配置参数。通过kubectl命令行工具或Kubernetes API,可以创建、更新和删除ConfigMap。

在使用K8s部署应用时,将配置信息写入代码会导致一个问题,即每次更新配置时都需要重新打包镜像。而ConfigMap则可以将配置信息和Docker镜像解耦,解决了这个问题。此外,在微服务架构中,多个服务可能共享相同的配置,使用ConfigMap可以方便地实现配置共享。

二、ConfigMap基本概念

1、ConfigMap的用途

ConfigMap 是 Kubernetes 中的一种资源类型,用于存储配置数据,如键值对、文件或者整个配置文件。

它的主要用途包括以下几个方面:

  1. **配置数据的集中管理:**ConfigMap 可以存储应用程序所需的配置信息,如数据库连接字符串、环境变量、日志级别等,使得配置数据能够集中管理。
  2. **应用配置注入:**通过将 ConfigMap 挂载到容器中,应用程序可以从 ConfigMap 中读取配置数据,并动态地应用到应用程序中。这样,可以在不修改容器镜像的情况下,更新应用程序的配置。
  3. **环境变量注入:**ConfigMap 中的数据可以以环境变量的形式注入到容器中,方便应用程序在运行时使用。
  4. **卷挂载:**ConfigMap 可以作为卷挂载到 Pod 中,使得容器可以直接读取 ConfigMap 中的配置文件,这样应用程序可以根据需要读取配置文件中的配置信息。

总之,ConfigMap 提供了一种灵活的方式来管理和使用配置数据,能够提高应用程序的可移植性、灵活性和可维护性。

2、ConfigMap与Secret的区别

ConfigMap 和 Secret 是 Kubernetes 中两种不同的资源类型,它们都用于存储敏感数据或配置信息,但在用途和特性上有一些区别:

用途:

  • **ConfigMap:**主要用于存储非敏感的配置数据,如应用程序的配置文件、环境变量、命令行参数等。
  • **Secret:**主要用于存储敏感的数据,如密码、证书、密钥等。

数据加密:

  • **ConfigMap:**ConfigMap 中的数据是明文存储的,不提供加密功能。
  • **Secret:**Secret 中的数据是经过 Base64 编码的,并且 Kubernetes 会将其存储在 etcd 中加密,提供一定程度的数据安全保护。

访问控制:

  • **ConfigMap:**通常可以由任何具有权限的用户访问,适用于存储不敏感的配置数据。
  • **Secret:**Secret 有更严格的访问控制机制,只有具有对应权限的用户才能访问,适用于存储敏感数据。

更新策略:

  • **ConfigMap:**可以通过重新创建或更新 ConfigMap 来更新其中的配置数据,对应用程序无需重启即可生效。
  • **Secret:**更新 Secret 的过程较为复杂,需要谨慎处理,因为 Secret 的更新可能会影响到正在运行的应用程序。

用途场景:

  • **ConfigMap:**适用于存储应用程序的配置信息、环境变量等非敏感数据。
  • **Secret:**适用于存储敏感数据,如密码、证书、密钥等。

总的来说,ConfigMap 主要用于存储非敏感的配置数据,而 Secret 则用于存储敏感的数据,同时 Secret 具有更高的安全性和访问控制机制。

三、创建与管理ConfigMap

1、通过命令行创建ConfigMap

要通过命令行创建 ConfigMap,可以使用 kubectl create configmap 命令。

以下是一个示例:

kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2

这个命令会创建一个名为 my-config 的 ConfigMap,并将两个键值对 key1=value1 和 key2=value2 添加到其中。

我们还可以从文件或目录创建 ConfigMap。例如,如果有一个名为 config.txt 的文件包含了配置信息,可以使用 --from-file 标志来创建:

kubectl create configmap my-config --from-file=config.txt

或者,如果有一个名为 config 的目录,包含了多个配置文件,我们可以使用 --from-file 标志来创建:

kubectl create configmap my-config --from-file=config/

这样就会将 config 目录中的所有文件添加到 ConfigMap 中,其中文件名将成为 ConfigMap 中的键,文件内容将成为对应键的值。

2、通过YAML文件创建ConfigMap

要通过 YAML 文件创建 ConfigMap,我们可以编写一个包含 ConfigMap 定义的 YAML 文件,然后使用 kubectl apply -f 命令应用该文件。

以下是一个示例 YAML 文件的结构:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  key1: value1
  key2: value2

在这个示例中,我们定义了一个名为 my-config 的 ConfigMap,并指定了两个键值对 key1: value1key2: value2。

我们可以将上述 YAML 内容保存到一个文件(例如 my-config.yaml),然后运行以下命令来创建

kubectl apply -f my-config.yaml

这将在 Kubernetes 集群中创建一个名为 my-config 的 ConfigMap,并将其中的数据添加到其中。

3、ConfigMap的更新

ConfigMap 可以通过多种方式进行更新:

**1.直接修改 ConfigMap 对象:**可以使用 kubectl edit 命令直接编辑 ConfigMap 对象,然后保存修改。这将更新 ConfigMap 中的数据,并在所有使用该 ConfigMap 的 Pod 中自动生效。

kubectl edit configmap <configmap-name>

2. 使用 kubectl apply 命令更新 ConfigMap: 可以通过修改 ConfigMap 的 YAML 文件,然后再次应用它来更新 ConfigMap。

kubectl apply -f configmap.yaml

3. 通过 kubectl create configmap 命令创建新的 ConfigMap: 如果想创建一个新的 ConfigMap,并且希望它覆盖已存在的同名 ConfigMap,可以使用 --dry-run 选项和 -o yaml 输出选项来生成新的 ConfigMap YAML 文件,然后将其应用。

kubectl create configmap <configmap-name> --dry-run=client -o yaml --from-file=<path-to-file>

无论使用哪种方式,更新后的 ConfigMap 中的数据将自动在使用该 ConfigMap 的 Pod 中生效。

4、ConfigMap的删除与清理

要删除 ConfigMap,可以使用以下命令:

kubectl delete configmap <configmap-name>

如果 ConfigMap 被用作 Volume 或环境变量,在删除之前需要确保没有 Pod 在使用它。否则,删除操作将失败并显示相关的错误消息。

要强制删除 ConfigMap(即使它正在被使用),可以添加 --ignore-not-found=true 选项:

kubectl delete configmap <configmap-name> --ignore-not-found=true

使用上述命令删除单个 ConfigMap。如果要删除整个命名空间中的所有 ConfigMap,可以使用以下命令:

kubectl delete configmap --all

这些命令将删除 ConfigMap 对象本身,但不会删除与之关联的任何数据卷或环境变量。要删除与 ConfigMap 关联的数据卷或环境变量,需要手动修改使用该 ConfigMap 的 Pod 配置文件并重新部署 Pod。

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Kubernetes的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

相关推荐
会掉头发27 分钟前
Linux进程通信之共享内存
linux·运维·共享内存·进程通信
我言秋日胜春朝★30 分钟前
【Linux】冯诺依曼体系、再谈操作系统
linux·运维·服务器
全能全知者1 小时前
docker快速安装与配置mongoDB
mongodb·docker·容器
饮啦冰美式1 小时前
22.04Ubuntu---ROS2使用rclcpp编写节点
linux·运维·ubuntu
wowocpp1 小时前
ubuntu 22.04 server 安装 和 初始化 LTS
linux·运维·ubuntu
Huaqiwill1 小时前
Ubuntun搭建并行计算环境
linux·云计算
wclass-zhengge1 小时前
Netty篇(入门编程)
java·linux·服务器
Lign173141 小时前
ubuntu unrar解压 中文文件名异常问题解决
linux·运维·ubuntu
vip4512 小时前
Linux 经典面试八股文
linux