目录1、什么是 ConfigMap?2、ConfigMap 能带来什么好处?3、ConfigMap 三种创建方式4、ConfigMap 作为环境变量三种使用方式单个引用多个引用args 方式传递环境变量5、挂载 volume6、Secret 使用7、应用程序怎么做到不重启情况下读取最新配置总结
1、什么是 ConfigMap?
ConfigMap 是用来存储配置文件的 Kubernetes 资源对象,配置对象存储在 Etcd 中,配置的形式可以是完整的配置文件、key/value 等形式。
2、ConfigMap 能带来什么好处?
传统的应用服务,每个服务都有自己的配置文件,各自配置文件存储在服务所在节点,对于单体应用,这种存储没有任何问题,但是随着用户数量的激增,一个节点不能满足线上用户使用,故服务可能从一个节点扩展到十个节点,这就导致,如果有一个配置出现变更,就需要对应修改十次配置文件。
这种人肉处理,显然不能满足线上部署要求,故引入了各种类似于 ZooKeeper 中间件实现的配置中心,但配置中心属于 “侵入式” 设计,需要修改引入第三方类库,它要求每个业务都调用特定的配置接口,破坏了系统本身的完整性,而Kubernetes 利用了 Volume 功能,完整设计了一套配置中心,其核心对象就是ConfigMap,使用过程不用修改任何原有设计,即可无缝对 ConfigMap;为什么呢?
如图(1)所示,
ConfigMap 相当于放入原生应用的配置文件,可以是一个或者多个;容器启动之后,到宿主机中拉取 ConfigMap 的内容,生成本地文件,通过 volume 形式映射到容器内部指定目录上;容器中应用程序按照原有方式读取容器特定目录上的配置文件。
在容器看来,配置文件就像是打包在容器内部特定目录,整个过程对应用没有任何侵入。
3、ConfigMap 三种创建方式
指定字面量进行创建,创建命令如下所示:
kubectl create configmap configmaptest –from-literal=foo=bar –from-literal=one=two
创建完成后通过如下方式查看:
[root@k8s-master k8s]# kubectl get configmap configmaptest -o yaml
apiVersion: v1
data:
foo: bar
one: two
kind: ConfigMap
metadata:
creationTimestamp: “2020-04-14T13:53:42Z”
name: configmaptest
namespace: default
resourceVersion: “613402”
selfLink: /api/v1/namespaces/default/configmaps/configmaptest
uid: 59b91eb4-7e57-11ea-83c7-509a4c36e19d
指定特定文件进行创建
kubectl create configmap config-files –from-file=/home/conf/db.properties
可以通过如下方式进行查看,(内容过长,影响阅读,省略 ConfigMap 元信息。)
[root@k8s-master k8s]# kubectl get configmap test-config -o yaml
apiVersion: v1
data:
db.properties: |
driverClassName=com.mysql.jdbc.Driver
……
指定特定文件夹进行创建
kubectl create configmap config-dir –from-file=/home/conf/config-test
通过如下方式进行查看
[root@k8s-master k8s]# kubectl get configmap config-test -o yaml
apiVersion: v1
data:
db.properties: |
# 数据源配置
driverClassName=com.mysql.jdbc.Driver
……
logback.xml: “
暂无评论内容