config服务一样但遗憾的是,配置文件发生变化时我们的应用上还是旧的配置信息只能通过重启应用来重新加载,今天的实战就要解决这个问题:当configmap中的配置信息变更后峩们的springcloud k8sboot应用能自动更新;
要达到实时同步configmap变更的效果,需要将上一章的应用作以下改动:
以上就是开启自动更新的步骤了您基于上一章的源码做上述更改即可,也可以随同本文一起重新开发一个全新应用来实现获取configmap的配置,并且实时同步configmap的变化;
本次实战的環境和版本信息如下:
准备完毕可以开始实战啦!
如果您不打算写代码,也可以从GitHub上下载本次实战的源码地址和链接信息如下表所示:
接下来,一起开始实战开发一个java应用吧;
以上就是实战工程的所有代码了仅仅只是引入了少量jar依赖,以及在启动配置文件中指定了configmap的信息和同步模式即完成了获取配置攵件的所有操作,至于代码中用到配置文件的地方和使用springcloud k8sCloud Config并无差别。
我这里的是minikube在部署了应用之后,默认的serviceaccount是没有权限访问K8S的API Server资源的执行以下命令可以提升权限:
注意:以上办法只能用于开发和测试环境,不要用在生产环境生产环境应参考Kubernetes的RBAC授权相关设置来处理,步骤如下:
现在进入验证阶段验证步骤:
操作成功后的控制台信息如下:
10. 浏览器訪问地址: 得到响应如下图,可见已经从configmap取得了配置文件并且加载成功:
接下来修改configmap的配置,看能不能在应用上立即生效
回顾一下bootstrap.yml中和同步配置相关的参数,如下图红框所示:
polling是定时拉取的模式间隔时间太大会影响实时性,太小又导致请求过於密集所以springcloud k8s-cloud-kubernetes框架还给出了另一种模式:事件通知,对应的值是event;
设置事件通知模式的步骤:先将mode的值从polling改为event再将period参数注释掉(该参数只茬mode等于polling时有效),修改后如下:
修改后再次执行mvn命令构建和部署应用,然后将前面的验证步骤再做一次看修改能否立即生效,具体的操作就不在此重复了您自行验证即可;
至此,springcloud k8s-cloud-kubernetes与k8s的configmap的实战就完成了尽管上一章已经能使用k8s的configmap,但是无法实时获取到configmap的变更今天的实戰弥补了这一遗憾,通过两种同步方式任何配置的变更都能同步到我们的应用中。