Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >上篇:一文了解K8S的ConfigMap

上篇:一文了解K8S的ConfigMap

作者头像
不背锅运维
发布于 2023-05-05 14:14:00
发布于 2023-05-05 14:14:00
4310
举报
文章被收录于专栏:监控监控

写在开篇

什么是 ConfigMap?

Kubernetes 中,ConfigMap 是一种 API 资源对象,用于存储非密钥/值数据,例如配置文件、环境变量和命令行参数等。

ConfigMap 允许将这些数据与应用程序的容器进行解耦,从而使应用程序更加可移植和可配置。通过将配置数据存储在 ConfigMap 中,可以在不修改应用程序容器镜像的情况下,灵活地管理应用程序的配置。

ConfigMap 可以通过 kubectl 命令或 YAML 文件进行创建、更新和删除。应用程序容器可以通过挂载 ConfigMap,从而访问其中存储的配置数据,也可以将 ConfigMap 中的数据作为环境变量或命令行参数注入到容器中。

官方文档可参考:https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/

总之,ConfigMap 是 Kubernetes 中一种重要的配置管理方式,它可以帮助我们更好地管理应用程序的配置和数据。

ConfigMap 的作用是什么?

ConfigMap 的主要作用是存储应用程序的配置和数据。在 Kubernetes 中,应用程序的配置和数据通常是存储在容器镜像中的文件或环境变量中。但是,将配置和数据硬编码到容器镜像中会导致以下问题:

  1. 缺乏灵活性:在不重新构建和部署容器镜像的情况下,无法更改应用程序的配置和数据。
  2. 安全问题:在容器镜像中存储敏感信息,如密码和密钥,可能会导致信息泄露的风险。
  3. 环境差异:由于在不同的环境中使用不同的配置和数据,因此在部署到不同的环境时,容器镜像中的配置和数据可能不适用于该环境。

ConfigMap 解决了上述问题。通过使用 ConfigMap,可以将应用程序的配置和数据与容器镜像分离,并将其存储在 Kubernetes 集群中。这使得在不修改容器镜像的情况下,可以轻松更改应用程序的配置和数据,提高了灵活性和可移植性。此外,通过将敏感信息存储在 ConfigMap 中,而不是在容器镜像中,可以提高应用程序的安全性。最后,通过使用不同的 ConfigMap 来适应不同的环境,可以确保应用程序在不同的环境中具有一致的行为。

创建 ConfigMap

使用 kubectl 命令创建 ConfigMap

  1. 使用kubectl命令行工具创建一个名为“testcm”的ConfigMap资源
代码语言:txt
AI代码解释
复制
[root@k8s-b-master configmap-test]# kubectl create configmap testcm --from-literal=ip=10.1.1.16 --from-literal=hostname=web01
configmap/testcm created

包含两个键值对:

  • “ip”键的值为“10.1.1.16”
  • “hostname”键的值为“web01”
  1. 从文件中创建 ConfigMap:
代码语言:txt
AI代码解释
复制
# config-files目录下有如下两个配置文件:
[root@k8s-b-master configmap-test]# ls -l config-files/
total 8
-rw-r--r-- 1 root root 45 May  1 22:48 config.yaml
-rw-r--r-- 1 root root 42 May  1 22:47 default.yaml

# 创建名为 my-config 的 ConfigMap,并将 config-files/ 目录中的所有文件添加到其中:
[root@k8s-b-master configmap-test]# kubectl create configmap my-config --from-file=config-files/
configmap/my-config created
  1. 从环境变量文件中创建 ConfigMap:
代码语言:txt
AI代码解释
复制
# 准备env-vars.env环境变量文件:
[root@k8s-b-master configmap-test]# cat env-vars.env 
MY_K8S_MASTER_IP=192.168.11.100
MY_K8S_MASTER_HOSTNAME=k8s-b-master

# 从名为 env-vars.env 的环境变量文件中创建名为 my-cf 的 ConfigMap。
[root@k8s-b-master configmap-test]# kubectl create cm my-cf --from-env-file=env-vars.env 
configmap/my-cf created

使用 YAML 文件创建 ConfigMap

  1. 下面的 ConfigMap 资源有两个数据项,分别是 "db.yaml" 和 "default.yaml":
代码语言:txt
AI代码解释
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-cm01
data:
  db.yaml: |
    db:
      dbname: cmdb
      dbhost: 10.1.1.19
  default.yaml: |
    web:
      domain: test.noblameops.local
      ip: 10.1.1.10
代码语言:txt
AI代码解释
复制
kubectl create -f my-cm01.yaml 

这些数据项本质上是键值对,其中键是文件名,值是一个 YAML 格式的字符串,其中包含了应用程序所需的配置信息。

  1. 下面的文件指定了两个键值对,分别是 MY_K8S_MASTER_HOSTNAME 和 MY_K8S_MASTER_IP:
代码语言:txt
AI代码解释
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-cm02
data:
  MY_K8S_MASTER_HOSTNAME: k8s-b-master
  MY_K8S_MASTER_IP: 192.168.11.100
代码语言:txt
AI代码解释
复制
kubectl create -f my-cm02.yaml 

查看 ConfigMap

使用 kubectl 命令查看 ConfigMap

代码语言:txt
AI代码解释
复制
[root@k8s-b-master configmap-test]# kubectl get configmap
NAME               DATA   AGE
kube-root-ca.crt   1      47h
my-cm01            2      96s
my-cm02            2      9m47s

字段解释:

  • NAME:ConfigMap 的名称。
  • DATA:ConfigMap 中包含的数据项数量。
  • AGE:ConfigMap 创建以来的时间,格式为 d天 h小时 m分钟 s秒。

查看 ConfigMap 的详细信息

代码语言:txt
AI代码解释
复制
[root@k8s-b-master configmap-test]# kubectl describe configmap my-cm02
Name:         my-cm02
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
MY_K8S_MASTER_HOSTNAME:
----
k8s-b-master
MY_K8S_MASTER_IP:
----
192.168.11.100

BinaryData
====

Events:  <none>
[root@k8s-b-master configmap-test]# 

部分解释:

  • Name: my-cm02:ConfigMap 的名称为 my-cm02。
  • Namespace: default:ConfigMap 所在的命名空间为 default。
  • Labels::ConfigMap 没有标签。
  • Annotations::ConfigMap 没有注释。
  • Data:ConfigMap 包含的数据项如下:
    • MY_K8S_MASTER_HOSTNAME: k8s-b-master:键名为 MY_K8S_MASTER_HOSTNAME,对应的值为 k8s-b-master。
    • MY_K8S_MASTER_IP: 192.168.11.100:键名为 MY_K8S_MASTER_IP,对应的值为 192.168.11.100。
  • BinaryData:ConfigMap 中没有二进制数据。
  • Events::ConfigMap 没有事件。

删除 ConfigMap

在生产环境中,删除ConfigMap是一件比较危险的事情,需要考虑清楚以下问题:

  • 检查 ConfigMap 是否仍在使用
  • 检查删除操作是否会影响应用程序的运行
  • 确定 ConfigMap 是否存在备份
  • 确定 ConfigMap 是否在版本控制系统

删除操作很简单,但往往简单的背后都暗藏着“背锅的可能性”,正所谓三思而后行:

代码语言:txt
AI代码解释
复制
[root@k8s-b-master configmap-test]# kubectl delete cm my-cm01
configmap "my-cm01" deleted
[root@k8s-b-master configmap-test]# kubectl delete cm my-cm02
configmap "my-cm02" deleted
[root@k8s-b-master configmap-test]# kubectl delete cm testcm
configmap "testcm" deleted

总之,删除操作在上产环境中是不能随便执行的。那么在删除 ConfigMap 之前,请确保你已经检查过所有相关的事项,并且明确了它们对应用程序和系统的影响。否则,就是有你背锅的时候。

如果你已经很清楚自己在干什么,且已经删除了ConfigMap, 那删除之后建议您:

  • 修改应用程序配置:删除后,需要考虑更新应用程序配置以删除对 ConfigMap 的依赖。可以使用 kubectl edit 命令修改 Pod 或其他 Kubernetes 对象的配置,以将它们与 ConfigMap 分离。
  • 跟踪删除 ConfigMap 的影响:如果删除了 ConfigMap,您需要跟踪应用程序是否会受到影响。可以通过查看应用程序的日志来查找任何错误或异常,并使用 kubectl describe 命令查看 Pod 或其他 Kubernetes 对象的详细信息,以确定它们是否正在使用 ConfigMap。

关于下篇

内容太长,担心很多朋友会没有耐心看下去。因此,关于使用ConfigMap的实战内容,我计划放在下篇。 那么,下篇的内容我将会分享官方提到的4种使用姿势。

关于使用ConfigMap的更多详情,可提前参考官方文档:https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/#using-configmaps

以下是官方文档中提到的4种方式:

  • 在容器命令和参数内:可以将 ConfigMap 的值直接传递给容器的命令和参数。
  • 容器的环境变量:可以将 ConfigMap 的值注入到容器的环境变量中。
  • 在只读卷里面添加一个文件:可以将 ConfigMap 的值作为文件添加到 Pod 中
  • 编写代码在 Pod 中运行,使用 Kubernetes API 来读取 ConfigMap:可以使用 Kubernetes API 在 Pod 中读取 ConfigMap 的值。

本文转载于WX公众号:不背锅运维(喜欢的盆友关注我们):https://mp.weixin.qq.com/s/7K8S2ebSYKJYxQS47u5iFw

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
再战 k8s(8):ConfigMap
在部署应用程序时,我们都会涉及到应用的配置,在容器中,如Docker容器中,如果将配置文件打入容器镜像,这种行为等同于写死配置,每次修改完配置,镜像就得重新构建。当然,我们也可以通过挂载包含该文件的卷进行配置管理和修改。而在k8s中,我们要讲一种更好的方式,即ConfigMap,这种资源对象的出现,更是极大的方便了应用程序的配置管理。   ConfigMap是一个或多个key/value的形式保存在k8s中,内部可以管理变量也可以管理完整的配置文件内容。
看、未来
2022/05/06
7530
再战 k8s(8):ConfigMap
人生苦短,我用k8s--------------secret和configmap的配置管理
Secret解决了密码、token、密钥等敏感数据的配置问题,将加密数据存放在etcd中,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。
不吃小白菜
2020/10/26
1.2K0
k8s 实践经验(九)配置存储之 Configmap & secret
这篇比较轻松,上一篇也比较轻松,因为我这会儿的时间被称之为“碎片时间”。
看、未来
2022/05/09
6270
k8s 实践经验(九)配置存储之 Configmap & secret
K8S学习笔记之Kubernetes 配置管理 ConfigMap
很多情况下我们为某一应用做好镜像,当我们想修改其中的一些参数的时候,就变得比较麻烦,又要重新制作镜像,我们是不是有一种方式,让镜像根据不同的场景调用我们不同的配置文件呢,那我们就需要用到 k8s 的另外一种资源,那就是 ConfigMap。
Jetpropelledsnake21
2019/07/01
2K0
Kubernetes(k8s)-ConfigMap使用
我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
运维小路
2025/01/02
1350
Kubernetes(k8s)-ConfigMap使用
深入探究 K8S ConfigMap 和 Secret
ConfigMap 是用来存储配置文件的 Kubernetes 资源对象,配置对象存储在 Etcd 中,配置的形式可以是完整的配置文件、key/value 等形式。
用户5166556
2020/04/22
3.1K0
深入探究 K8S ConfigMap 和 Secret
k8s之ConfigMap和Secret
具体的体现在于,使用kubectl describe时,ConfigMap可以看到配置信息,而Secret是看不到具体内容的。
编程黑洞
2023/03/06
2770
Kubernetes(k8s)-ConfigMap介绍
我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
运维小路
2024/12/31
1650
Kubernetes(k8s)-ConfigMap介绍
k8s env、configmap、secret外部数据加载配置
K8s提供了多种外部数据注入容器的方式,今天我们主要学习环境变量、ConfigMap以及Secret的使用和配置。
你大哥
2022/01/10
1.9K0
k8s env、configmap、secret外部数据加载配置
k8s 资源管理之 Pod
Kubernetes 的本质就是一个集群系统,用户可以在集群中部署各种服务。所谓的部署服务,其实就是在 Kubernetes 集群中运行一个个的容器,并将指定的程序跑在容器中。 Kubernetes 的最小管理单元是 Pod 而不是容器,所以只能将容器放在 Pod 中,而 Kubernetes 一般也不会直接管理 Pod ,而是通过 Pod 控制器来管理 Pod 的。 Pod 提供服务之后,就需要考虑如何访问 Pod 中的服务,Kubernetes 提供了 Service 资源实现这个功能。 当然,如果 Pod 中程序的数据需要持久化,Kubernetes 还提供了各种存储系统。
看、未来
2022/08/11
5460
k8s 资源管理之 Pod
K8S Configmap和Secret热更新之Reloader
在云原生中配置中心,例如:Configmap和Secret对象,虽然可以进行直接更新资源对象
YP小站
2021/08/10
5.3K0
k8s实践(八):ConfigMap and Secret
  在实际的应用部署中, 经常需要为各种应用/中间件配置各种参数, 如数据库地址、 用户名、 密码等, 而且大多数生产环境中的应用程序配置较为复杂, 可能是多个 Config 文件、 命令行参数和环境变量的组合。 要完成这样的任务有很多种方案, 比如:
loong576
2019/09/18
1.9K0
k8s实践(八):ConfigMap and Secret
k8s系列(5)-Configmap和Secret
完整系列k8s系列(1)-腾讯云CVM手动部署K8S_Dashboard安装1k8s系列(1)-腾讯云CVM手动部署K8S_Dashboard安装2k8s系列(2)-Servicek8s系列(3)-StatefulSet的MongoDB实战k8s系列(4)-MongoDB数据持久化k8s系列(5)-Configmap和Secretk8s系列(6)-Helmk8s系列(7)-命名空间k8s系列(8)-Ingressk8s系列(9)-容忍、污点、亲和一. configmap访问时,如果直接使用 Service
爽朗地狮子
2022/10/20
4560
K8S ConfigMap使用
configmap是k8s的一个配置管理组件,可以将配置以key-value的形式传递,通常用来保存不需要加密的配置信息,加密信息则需用到Secret,主要用来应对以下场景:
oYabea
2020/09/07
3.6K0
k8s配置管理
https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/
用户9184480
2024/12/07
800
k8s配置管理
【K8s】专题十五:Kubernetes 控制器之 ConfigMap
在 Kubernetes 中,ConfigMap 是一种用于存储非敏感信息的资源对象,提供了向 Pod 注入配置信息的能力。
行者Sun
2024/09/02
2840
【K8s】专题十五:Kubernetes 控制器之 ConfigMap
Kubernetes K8S之通过yaml文件创建Pod与Pod常用字段详解
K8S 里所有的资源或者配置都可以用 yaml 或 Json 定义。YAML 是一个 JSON 的超集,任何有效的 JSON 文件也都是一个有效的YAML文件。
踏歌行
2020/10/15
4.3K0
.NET Core 使用 K8S ConfigMap的正确姿势
ASP.NET Core默认的配置文件定义在appsetings.json和appsettings.{Environment}.json文件中。 这里面有一个问题就是,在使用容器部署时,每次修改配置文件都需要重新构建镜像。当然你也可能会说,我的配置文件很稳定不需要修改,但你又如何确保配置文件中一些机密配置的安全问题呢?比如暴露了你的远程数据库的连接信息,哪天被员工不小心删库跑路了呢? 那接下来就来讲解下如何在.NET Core 中正确使用ConfigMap。
圣杰
2019/09/12
1.6K0
.NET Core 使用 K8S ConfigMap的正确姿势
自从上了K8S,项目更新都不带停机的!
ReplicaSet确保任何时间都有指定数量的Pod副本在运行。通常用来保证给定数量的、完全相同的Pod的可用性。建议使用Deployment来管理ReplicaSet,而不是直接使用ReplicaSet。
macrozheng
2021/02/05
1.7K0
自从上了K8S,项目更新都不带停机的!
不背锅运维:耗时1周整理:分享K8S Pod知识点,带你一文打尽
下面来个小例子,设置自定义变量,使用env给pod里的容器设置环境变量,本例子中,设置了环境变量有SAVE_TIME、MAX_CONN、DNS_ADDR。
不背锅运维
2023/02/02
1.2K0
相关推荐
再战 k8s(8):ConfigMap
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档