Apollo基于K8S的部署以及接入
Apollo镜像服务
基于开源Apollo服务进行相关服务镜像打包,实际将分发apollo-adminservice、apollo-configservice和apollo-portal
这三个镜像安装包。
一、 部署安装
1. config服务
首先我们需要提供对应的配置文件并将其映射到对应的镜像的目录下,首先我们
编写对应的配置文件(application-github.properties):
spring.datasource.url = jdbc:mysql://fill-in-the-correct-server:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = FillInCorrectUser
spring.datasource.password = FillInCorrectPassword
其中需要我们指定对应服务的数据库,数据库的初始化语句见根本目录sql下的apolloconfigdb.sql文件。并
需要在最终的映射中将对应文件映射到容器内的/apollo-configservice/config/application-github.properties。
对应的启动脚本如下所示:
docker run -d -p 8080:8080 --name dev-configservice -v /home/apollo/application-github.properties:/apollo-configservice/config/application-github.properties harbor.vip56.cn/common/apollo-configservice:1.6.2
由于我们这里是采用Docker环境进行部署,如果开发者需要通过外部网络请求并测试需要设置EUREKA_INSTANCE_IP_ADDRESS固定注册到eurake中的
服务IP地址或采用EUREKA_INSTANCE_HOME_PAGE_URL固定注册的IP地址与端口,否则将以Docker内部的地址进行注册,客户端将无法进行连接。
2. admin服务
同config服务,我们也需要编写对应的配置文件连接到数据库(application-github.properties):
# DataSource
spring.datasource.url = jdbc:mysql://fill-in-the-correct-server:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = FillInCorrectUser
spring.datasource.password = FillInCorrectPassword
完成以上配置文件的编写后就需要将其映射到对应镜像的路径下
/apollo-adminservice/config/application-github.properties,最终我们启动该服务的脚本类似如下所示:
docker run -d -p 8090:8090 --name dev-adminservice -v /home/apollo/application-github.properties:/apollo-adminservice/config/application-github.properties harbor.vip56.cn/common/apollo-adminservice:1.6.2
由于config本身自带了eureka服务,所以默认的localhost只有config服务可以注册进去,而admin服务无法注册,
所以我们需要打开ApolloConfigDB.ServerConfig设置value为eureka.service.url的值为其他服务可以访问的地址。
除以上的可设置参数外,用户也可以根据实际需要调整该表的其他字段值,主要有以下几个配置:
namespace.lock.switch:是否限制只能一人修改配置一人发布;
config-service.cache.enabled:是否缓存已被读取过的配置,从而加快后续配置读取;
item.key.length.limit:限制Key最长长度,默认128;
item.value.length.limit:限制Value最长长度,默认20000;
3. portal服务
同理也需要配置对应的数据库连接地址,只是其数据库的是独立的需要单独使用
sql/apolloportaldb.sql文件进行初始化,然后对配置文件application-github.properties
进行修改即可,对应配置文件内容如下:
# DataSource
spring.datasource.url = jdbc:mysql://fill-in-the-correct-server:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = FillInCorrectUser
spring.datasource.password = FillInCorrectPassword
并且依然需要映射到容器内对应的路径下/apollo-portal/config/application-github.properties
仅仅完成以上的配置还不足以,因为看板与其他admin和config服务不一样,看板可以统一进心管理
而不需要根据环境进行独立部署,所以就需要配置对应meta服务的地址到配置文件apollo-env.properties
中,对应配置文件的内容如下:
local.meta=http://localhost:8080
dev.meta=http://fill-in-dev-meta-server:8080
fat.meta=http://fill-in-fat-meta-server:8080
uat.meta=http://fill-in-uat-meta-server:8080
lpt.meta=${lpt_meta}
pro.meta=http://fill-in-pro-meta-server:8080
用户根据自己实际需要的环境进行配置即可,完成以上配置后就可以启动服务了:
docker run -d -p 8070:8070 --name portal -v /home/apollo/application-github.properties:/apollo-portal/config/application-github.properties -v /home/apollo/apollo-env.properties:/apollo-portal/config/apollo-env.properties harbor.vip56.cn/common/apollo-portal:1.6.2
完成以上服务启动后,我们就可以进入portal进行进一步的参数设置,当然这里可以通过直接操作
数据库ApolloPortalDB.ServerConfig表也可以通过其中自带的管理员工具-系统参数进行设置:
apollo.portal.envs:可支持的环境列表,默认只有Dev,如果要开启其他的可以以逗号分隔进行设置(DEV,FAT,UAT,PRO);
apollo.portal.meta.servers:各环境的Meta服务地址,一般配置文件都已经设置,当然也可以通过这里修改;
organizations:部门列表,新建的App都需要归属具体部门,可以通过这里进行增加;
consumer.token.salt:用于开放Api的令牌盐值;
wiki.address:看板中帮助指向的地址;
role.create-application.enabled:是否开启创建项目权限控制,开启后只有拥有权限的人可以创建项目;
4. 集群架构部署
如果需要集群架构部署建议portal可以部署一个服务,然后根据实际开发的需求将其中的config、meta和admin服务各自
部署到对应环境的服务器中,当然对应的数据库也需要各自进行独立部署。对于存在更高部署要求的建议参考官网文档
为了方便开发者基于Docker进行集群开发这里将准备对应指令,首先我们需要创建3个ApolloConfigDB数据库,名字需要各自不一样。
然后我们接着进行三个独立环境的服务开发:
- Dev环境
docker run -d -p 8080:8080 --name dev-configservice -v F://dockermap/application-github.properties:/apollo-configservice/config/application-github.properties -e EUREKA_INSTANCE_HOME_PAGE_URL=192.168.3.6:8080 harbor.vip56.cn/common/apollo-configservice:1.6.2
docker run -d -p 8090:8090 --name dev-adminservice -v F://dockermap//application-github.properties:/apollo-adminservice/config/application-github.properties harbor.vip56.cn/common/apollo-adminservice:1.6.2
docker run -d -p 18080:8080 --name fat-configservice -v F://dockermap/application-github-fat.properties:/apollo-configservice/config/application-github.properties -e EUREKA_INSTANCE_HOME_PAGE_URL=192.168.3.6:18080 harbor.vip56.cn/common/apollo-configservice:1.6.2
docker run -d -p 18090:8090 --name fat-adminservice -v F://dockermap//application-github-fat.properties:/apollo-adminservice/config/application-github.properties harbor.vip56.cn/common/apollo-adminservice:1.6.2
docker run -d -p 28080:8080 --name pro-configservice -v F://dockermap/application-github-pro.properties:/apollo-configservice/config/application-github.properties -e EUREKA_INSTANCE_HOME_PAGE_URL=192.168.3.6:28080 harbor.vip56.cn/common/apollo-configservice:1.6.2
docker run -d -p 28090:8090 --name pro-adminservice -v F://dockermap//application-github-pro.properties:/apollo-adminservice/config/application-github.properties harbor.vip56.cn/common/apollo-adminservice:1.6.2
二、 .Net Core SDK使用
1. 引用类库
Install-Package Com.Ctrip.Framework.Apollo.Configuration -Version 2.4.0
2. 配置服务地址
首先我们打开对应环境的appsettings.json文件然后输入以下配置内容:
{
"apollo": {
"AppId": "SampleApp",
"Env": "DEV",
"Meta": {
"DEV": "http://192.168.153.156:8080/",
"FAT": "http://192.168.153.156:18080/",
"PRO": "http://192.168.153.156:28080/"
}
}
}
其中Meta可以根据实际需要的环境进行设置,具体会根据Env进行切换,从而确保能够读取
到正确环境下的参数变量。
3. 代码初始化
完成以上配置后我们就需要进行代码初始化操作,首先我们打开Program.cs文件将方法CreateWebHostBuilder
进行修改,具体修改如下:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder => builder
.AddApollo(builder.Build().GetSection("apollo"))
.AddDefault(ConfigFileFormat.Json)
.AddDefault())
.UseStartup<Startup>();
完成以上配置后我们就可以通过注入IConfiguration接口实现读取配置信息,当然实际开发过程中
往往我们需要监听配置是否发生变化从而使对应服务进行重新注入,这里我们可以直接使用本身自带的
方式进行监听,以下是一个代码示例:
private void ChangeConfig(object x)
{
if (x is IConfiguration subConfig)
{
subConfig.GetReloadToken().RegisterChangeCallback(ChangeConfig, subConfig);
}
Console.WriteLine("config change");
}
var config = context.RequestServices.GetRequiredService<IConfiguration>();
var reloadtoken = config.GetReloadToken();
config.GetReloadToken().RegisterChangeCallback(ChangeConfig, config);
完成以上操作之后我们就可以实现配置从Apollo中进行读取并且实现根据配置变更进行ReLoad了。
三、 Java SDK使用
尽请期待
Apollo基于K8S的部署以及接入的更多相关文章
- 基于k8s集群部署prometheus监控ingress nginx
目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...
- 基于k8s集群部署prometheus监控etcd
目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控 ...
- 持续集成之应用k8s自动部署
持续集成之应用k8s自动部署 Intro 上次我们提到了docker容器化及自动化部署,这仅仅适合个人项目或者开发环境部署,如果要部署到生产环境,必然就需要考虑很多因素,比如访问量大了如何调整部署,如 ...
- 如何基于 K8S 多租能力构建 Serverless Container
当前 Kubernetes 已经成为名副其实的企业级容器编排规范,很多云平台都开始提供兼容 Kubernetes 接口的容器服务.而在多用户支持方面,多数平台选择直接提供专属虚机集群,用户需要花费大量 ...
- 基于 K8S 构建数据中心操作系统
在 12 月 22 日 ECUG 的下午场 ,七牛云容器计算部技术总监袁晓沛为大家带来了主题为<基于 K8S 的 DCOS 之路>的精彩分享,向大家介绍了七牛容器云目前 K8S 的状况和产 ...
- ASP.NET Core基于K8S的微服务电商案例实践--学习笔记
摘要 一个完整的电商项目微服务的实践过程,从选型.业务设计.架构设计到开发过程管理.以及上线运维的完整过程总结与剖析. 讲师介绍 产品需求介绍 纯线上商城 线上线下一体化 跨行业 跨商业模式 从0开始 ...
- 基于 K8s 做应用发布的工具那么多, 阿里为啥选择灰姑娘般的 Tekton ?
作者 | 邓洪超,阿里云容器平台工程师, Kubernetes Operator 第二人,云原生应用标准交付与管理领域知名技术专家 导读:近年来,越来越多专门给 Kubernetes 做应用发布的 ...
- Prometheus K8S中部署Alertmanager
Prometheus K8S中部署Alertmanager 设置告警和通知的主要步骤如下:一.部署Alertmanager二.配置Prometheus与Alertmanager通信三.配置告警 1. ...
- Kubernetes之在k8s中部署Java应用
部署好了k8s以后 部署参考https://www.cnblogs.com/minseo/p/12055731.html 怎么在k8s部署应用 项目迁移到k8s平台是怎样的流程 1,制作镜像 2,控制 ...
随机推荐
- pip更新命令
python -m pip install --upgrade pip 更新时如果报错'NoneType' object has no attribute 'bytes', 解决办法:easy_ins ...
- pytest文档3-pytest+Allure+jenkins+邮箱发送
前言: 虽然网上有很多邮件配置的文章,但还是想自己写一下配置的过程,因为在中间也碰到了不同坑.按照这个文档配置的话,99%都可以成功. 一.jenkins 配置邮箱 1.打开jenkins后进入点 ...
- vue | 基于vue的城市选择器和搜索城市对应的小区
城市选择器应该是比较常用的一个组件,用户可以去选择自己的城市,选择城市后返回,又根据自己选择的城市搜索小区. 功能展示 这是选择结果 这是选择城市 这是搜索小区 这是搜索小区接口,key为城市名字,i ...
- 重磅来袭 Vue 3.0 One Piece 正式发布
代号为One Piece 的Vue3.0 在9月19日凌晨正式发布!! 此次vue3.0 为用户提供了全新的 composition-api 以及更小的包大小,和更好的 TypeScript 支持. ...
- netty学习心得1
也不是系统学习,工作需求,一点点抠的,需要自己笼统学习下. 首先功能实现: serverBootstrap.group(boss, work).channel(NioServerSocketChann ...
- hystrix文档翻译之工作原理
流程图 下面的图片显示了一个请求在hystrix中的流程图. 1.构造一个HystrixCommand或者HystrixObservableCommand对象 第一步是创建一个HystrixComma ...
- chrome插件: yapi 接口TypeScript代码生成器
前言 2020-09-12 天气晴,蓝天白云,微风,甚好. 前端Jser一枚,在公司的电脑前,浏览器打开着yapi的接口文档,那密密麻麻的接口数据,要一个一个的去敲打成为TypeScript的inte ...
- MyBatis常用实现方式
MyBatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动.创建连接.创建 statement 等繁杂的过程 ...
- Druid实现数据库连接用户密码加密
使用ConfigFilter ConfigFilter的作用包括: 从配置文件中读取配置 从远程http文件中读取配置 为数据库密码提供加密功能 1 配置ConfigFilter 1.1 配置文件从本 ...
- ERP与EHR系统的恩怨纠葛--开源软件诞生13
ERP中需要EHR的存在吗--第13篇 用日志记录"开源软件"的诞生 [点亮星标]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redragon ...