如何将.NET Core、K8S和Apollo完美结合玩转配置中心?
摘要:本文接将主要来介绍如何基于Helm快速部署Apollo集群至K8S,并与.NET Core应用进行集成,同时介绍下如何平滑迁移配置到Apollo。
1.引言
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
如官网所述:Apollo 是携程打造的开源配置中心,GitHub的星星也快点满22K,因此足见它的成熟度和社区活跃度。因此最近在做配置中心选型的时候,经过一番预演,最终敲定Apollo。
Apollo作为微服务体系中必不可少的基础服务,其架构设计和基本使用我们不得不有所了解。
因此本文接下来将主要来介绍如何基于Helm快速部署Apollo集群至K8S,并与.NET Core应用进行集成,同时介绍下如何平滑迁移配置到Apollo。
本文具有详细的部署步骤,建议动手实操。
部署Chart包和Demo已上传至GitHub:K8S.NET.Apollo,可收藏备用。
2. Apollo 架构一览
在部署之前,需要了解Apollo的基础架构,以便在后续部署工作的展开。
关于其的解读,我这里就不再详细展开,但以下几点还是要有所了解,感兴趣的可以直接看官网详细介绍:Apollo配置中心设计。
Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端
Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
Config Service和Admin Service都是多实例、无状态部署,需要通过注册中心进行服务注册和发现
注册中心默认采用的是Eureka,在K8S中由Service充当
Apollo客户端通过注册中心获取Config Service服务列表进行配置读取
Apollo Portal通过注册中心获取Admin Service服务列表进行配置管理
基于上面对Apollo的介绍,其物理架构总结起来就是:
每一套环境都必须拥有自己独立的Config Service 和 Admin Service 以及独立ConfigDB。
多套环境可以公用一套Apollo Portal 进行管理,Portal拥有独立PortalDB。
3. 基于Helm部署到K8S
因为Apollo 1.7.0版本增加了基于Kubernetes原生服务发现的部署模式,来替换内置的Eureka,所以在整体部署上有很大简化,同时官方也提供了Helm Charts,让Apollo更加易于开箱即用。下面就以部署一套测试环境为例讲解一下Apollo的部署要点。(部署至本机Docker Desktop Local K8S环境)。
环境要求: Kubernetes 1.10+,Helm 3
3.1 搭建 Apollo Config&Portal DB
从上图的物理架构上来看,首先要部署好Config DB和PortalDB。关于DB的搭建,建议直接使用bitnami/mysqlchart搭建。搭建步骤如下:
> helm repo add bitnami https://charts.bitnami.com/bitnami
> helm repo list
> helm repo update
> helm search repo bitnami/mysql
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/mysql 6.14.8 8.0.21 Chart to create a Highly available MySQL cluster
执行helm包的安装,需要自定义配置文件,也就是values.yaml。我们可以先行下载 mysql chart包。
之所以选择将chart包下载到本地,是为了确保后续维护能够基于一致的chart包版本。避免因为执行helm repo update导致chart包版本自动升级,而不自知。
