相信很多朋友都听说过配置中心这种东西,应用在运行的时候会从配置中心读取不同环境的配置信息,以达到相同的应用在不同环境运行的目的。这种低耦合的应用运行方式也在k8s中得到了应用。这一节我们就来学习k8s中的配置中心:ConfigMap。
我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。
文章目录
ConfigMap
ConfigMap是k8s集群中一个单独的资源,用来存储键值对形式的配置信息。通过将业务代码和配置信息隔离开来,可以减少容器的复杂度,同时让容器能动态部署到不同环境(开发,测试,生产),以及在不影响容器运行下进行配置的热更新。
但是因为ConfigMap中的数据都是用明文存储,不应该存放密码等私密信息。私密信息可以通过下一节要学习的Secret来进行存储。
下面这个动态图是一个很简单的ConfigMap工作原理的说明
- 首先,需要准备多个不同ConfigMap,这里是一个环境一份
- 然后,根据需要,将合适环境的ConfigMap加入到k8s集群中
- 最后,pod中的容器去ConfigMap中检索需要的内容
生成ConfigMap
这里分两种情况来看。如果是类似nginx.conf这种大篇的配置信息文件,考虑用文件或者文件夹去生成ConfigMap,方便后期维护,这时ConfigMap的key是文件名,value是文件内容;如果只是三两个环境变量,考虑用yaml文件或者直接命令行生成ConfigMap,简单快捷,这时ConfigMap是键值对和yaml文件或者命令行中的一致。
这里将这两种方式都演示一下。
根据文件或者文件夹生成ConfigMap
创建如下两个文件
[root@k8s-master Configs]# ll
total 8
-rw-r--r--. 1 root root 30 May 10 10:42 file-1
-rw-r--r--. 1 root root 30 May 10 10:42 file-2
[root@k8s-master Configs]# cat file-1
config1=value1
config2=value2
[root@k8s-master Configs]# cat file-2
config3=value3
config4=value4
然后通过下面的命令根据单个文件或者文件夹生成ConfigMap
kubectl create configmap NAME --from-file=xxx
例如单个文件
[root@k8s-master Configs]# kubectl create configmap test-cm-1 --from-file=file-1
configmap/test-cm-1 created
[root@k8s-master Configs]# kubectl get configmap
NAME DATA AGE
test-cm-1 1 12s
或者根据文件夹
[root@k8s-master Configs]# kubectl create configmap test-cm-2 --from-file=.
configmap/test-cm-2 created
[root@k8s-master Configs]# kubectl get configmap
NAME DATA AGE
test-cm-1 1 85s
test-cm-2 2 3s
之后就可以去查看ConfigMap的具体信息了,可以用describe命令
[root@k8s-master Configs]# kubectl describe cm test-cm-2
Name: test-cm-2
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
file-1:
----
config1=value1
config2=value2
file-2:
----
config3=value3
config4=value4
Events: <none>
或者是直接用yaml输出的方式
[root@k8s-master Configs]# kubectl get configmap test-cm-2 -o yaml
apiVersion: v1
data:
file-1: |
config1=value1
c