在 Kubernetes 中,ConfigMap 是一种 API 资源对象,用于存储非密钥/值数据,例如配置文件、环境变量和命令行参数等。
ConfigMap 允许将这些数据与应用程序的容器进行解耦,从而使应用程序更加可移植和可配置。通过将配置数据存储在 ConfigMap 中,可以在不修改应用程序容器镜像的情况下,灵活地管理应用程序的配置。
ConfigMap 可以通过 kubectl 命令或 YAML 文件进行创建、更新和删除。应用程序容器可以通过挂载 ConfigMap,从而访问其中存储的配置数据,也可以将 ConfigMap 中的数据作为环境变量或命令行参数注入到容器中。
官方文档可参考:https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/
❝
总之,ConfigMap 是 Kubernetes 中一种重要的配置管理方式,它可以帮助我们更好地管理应用程序的配置和数据。
❞
ConfigMap 的主要作用是存储应用程序的配置和数据。在 Kubernetes 中,应用程序的配置和数据通常是存储在容器镜像中的文件或环境变量中。但是,将配置和数据硬编码到容器镜像中会导致以下问题:
ConfigMap 解决了上述问题。通过使用 ConfigMap,可以将应用程序的配置和数据与容器镜像分离,并将其存储在 Kubernetes 集群中。这使得在不修改容器镜像的情况下,可以轻松更改应用程序的配置和数据,提高了灵活性和可移植性。此外,通过将敏感信息存储在 ConfigMap 中,而不是在容器镜像中,可以提高应用程序的安全性。最后,通过使用不同的 ConfigMap 来适应不同的环境,可以确保应用程序在不同的环境中具有一致的行为。
[root@k8s-b-master configmap-test]# kubectl create configmap testcm --from-literal=ip=10.1.1.16 --from-literal=hostname=web01
configmap/testcm created
包含两个键值对:
# 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
# 准备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
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
kubectl create -f my-cm01.yaml
❝
这些数据项本质上是键值对,其中键是文件名,值是一个 YAML 格式的字符串,其中包含了应用程序所需的配置信息。
❞
apiVersion: v1
kind: ConfigMap
metadata:
name: my-cm02
data:
MY_K8S_MASTER_HOSTNAME: k8s-b-master
MY_K8S_MASTER_IP: 192.168.11.100
kubectl create -f my-cm02.yaml
[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
字段解释:
[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]#
部分解释:
在生产环境中,删除ConfigMap是一件比较危险的事情,需要考虑清楚以下问题:
删除操作很简单,但往往简单的背后都暗藏着“背锅的可能性”,正所谓三思而后行:
[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的实战内容,我计划放在下篇。 那么,下篇的内容我将会分享官方提到的4种使用姿势。
❞
关于使用ConfigMap的更多详情,可提前参考官方文档:https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/#using-configmaps
以下是官方文档中提到的4种方式:
本文转载于WX公众号:不背锅运维(喜欢的盆友关注我们):https://mp.weixin.qq.com/s/7K8S2ebSYKJYxQS47u5iFw
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有