前言
最近,公司内的k8s集群逐渐完善,恰逢有一个不是非常紧急的新项目开始推进,与SA讨论后决定尝试在k8s集群中进行应用的部署,加强对服务的全面管理以及提升服务的灵活性。前段时间摸索完一些市面上常用的应用配置管理方案后,刚配合公司内的配置管理服务实现了一套JAVA SDK,自然而然的在讨论转型方案开始时第一个想到的问题就是,在k8s集群内我们是不是还需要用到这些嵌入在应用内的配置SDK呢?
其实,应用迁移到k8s集群中并不是非要做什么特殊改造,即便是最传统的进程部署的方式也只需要进行把应用容器化即可,关于配置上的改造其实可以原样保留。只不过,k8s提供了一种用于配置分离管理的模式,利用额外定义的configmap来实现应用的配置管理,应用的配置文件无需打包在应用代码中,也无需额外的部署例如nacos之类的配置管理服务。关于configmap的概念和使用,可以参考一下官方文档,文档还是描述的比较详细的,这里就不继续展开了。接下来主要围绕着两种不同的使用configmap的方式,来讨论Spring Cloud应用关于配置管理方面的改造
Spring Cloud Kubernetes
基本使用
Spring Cloud Kubernetes provides implementations of well known Spring Cloud interfaces allowing developers to build and run Spring Cloud applications on Kubernetes. While this project may be useful to you when building a cloud native application, it is also not a requirement in order to deploy a Spring Boot app on Kubernetes.
首先正如官方文档上面提到的,实际上对于Spring Boot应用而言,这并不是必须的。Spring Cloud K8s为Spring Cloud应用提供了一系列的k8s API Server的接口封装,那么我们可以利用API Server来做些什么呢?我相信大家应该都猜到了,获取分离部署的应用配置Configmap。除了Get,他还能做什么呢,那就是Watch(监听),Spring Cloud K8s实现了监听configmap的变更,使得应用程序在需要的时候可以更加方便快捷,而不需要费劲力气的去实现配置的获取并监听配置的变更。简单到开发者只需要引入如下的Maven配置,
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifa