众所周知,携程的 Apollo 已经成为行业里非常流行的配置中心了,这个轮子的原理其实并不复杂,但是如果重新开发一套又需要考虑很多边界条件,Apollo 本身也是开源的,所以有问题的话热心的网友一定会很早就帮我们解决掉了。
前面也有考虑过直接使用 k8s 里面的 configMap,但是 configMap 只有在创建 pods 的时候会拉取,后面如果修改了 configMap ,其实是不会同步到 pods 中,如果手动去拉取 configMap 中的内容,这又和 Apollo 有什么区别呢,Apollo 还有审计还有灰度,还有历史变更记录,还有一套权限系统,所以不如直接使用 Apollo 了。
Apollo配置中心设计
基础模型
软件架构图
kubernetes 部署
Apollo 是由 java 语言编写,使用了 spring 框架,以及 Eureka 服务发现,如果使用 k8s 环境的话,当然是使用 k8s 自带的服务发现最佳,提升系统可读性,可维护性和稳定性。wiki 上已经有详细的文档,这里说一下重点步骤:
添加数据库配置文件
首先下载 https://github.com/ctripcorp/apollo/tree/master/scripts/sql 两个 sql 文件,然后倒入到自己各个环境的数据库中。
apolloconfigdb.sql
是各个环境都需要配置的 service 服务需要的数据库,apolloportaldb.sql
是 portal 管理端服务需要的数据库,如果暂时搞不清楚,两个文件可以都导入,后面再去理解原理。
下面的描述中提到的 service 均指 configservice 和 adminservice 。
helm 添加 Apollo 的源
1 | $ helm repo add apollo http://ctripcorp.github.io/apollo/charts |
拉取模板文件
这里拉取文件是为了可以详细的看下作者是如何设计这个 chart,已经可以拿到一封完整的 values.xml 文件。基于 k8s 的思想,配置都要留在文件里,helm 如果使用命令行的方式,可以测试使用,但是如果是线上环境那终究没有里面存档,命令行的参数过长也会造成阅读不遍。
如果相信作者的话也可以直接使用下面我粘贴的
apollo-portal-values.yaml
和apollo-service-values.yaml
文件
1 | $ helm pull apollo/apollo-portal |
两个压缩文件,mac 中就点击下就可以直接解压了,然后两个 chart 根目录中的 values.yaml 文件可以复制出来,重命名一下备用。
apollo-portal-values.yaml
1 | name: apollo-portal |
apollo-service-values.yaml
1 | configdb: |
部署核心文件
由于 Apollo 的设计原则,可以一个 portal 管理多个 service,我们可以在各个环境(DEV,PRO)都部署一套 service,然后用 portal 单独去管理。
配置 service
我们的各个环境应该都有自己的一套数据库,Apollo 唯一的依赖也是 mysql,所以只需要修改 configdb 中的数据库字段
1 | configdb: |
可以将 apollo-service-values.yaml
中的其他内容都删除只保留一个 configdb, 其他属性会走默认的配置字段,如果有特殊需求就自行编辑。
1 | $ helm install -f apollo-service-values.yaml apollo-service apollo/apollo-service -n sv-dev |
我这里的 namespace 是 sv-dev, 核心的一段是 http://apollo-service-apollo-configservice.sv-dev:8080
,需要暂时存储一下。
然后替换 configdb 中的数据库信息,将 apollo-service 配置到各个环境中去。
配置 protal
1 | replicaCount: 1 # **切记切记**,这里一定要写 1,如果有多个 protal ,使用的 session 之间不共享内存,导致我需要反复登录 |
无关的配置默认就好,我们可以直接删除掉,只保留核心的需要修改配置。
1 | $ helm install -f apollo-portal-values.yaml apollo-portal apollo/apollo-portal -n apollo |
这里我将 apollo-portal 部署到单独的一个 namespace 中。
访问服务
打开 apollo.xxxx.com
就可以打开管理页面
默认账户密码是 apollo
和 admin
,登录进去就可以享受配置中心带来的便利了,到此搭建结束。