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,控制 ...
随机推荐
- Oracle闪回flashback
参考资料:Using Oracle Flashback Technology Oracle 11g的新特性闪回操作 闪回查询 闪回查询 闪回版本查询 闪回事务查询 闪回数据 闪回表 闪回删除 闪回数据 ...
- SSM框架整合核心内容
所需要的jar包及其版本 Spring 版本:4.3.18 tx.aop.beans.core.web.web-mvc.context.expression.jdbc MyBatis:3.4.6 ...
- Netty之ChannelOption的各种参数之EpollChannelOption.SO_REUSEPORT
socket选项 SO_REUSEPORT 转 miffa 发布于 2015/03/24 17:21 字数 3383 阅读 6076 收藏 6 点赞 1 评论 0 开发十年,就只剩下这套Java开发体 ...
- URL及日期等特殊数据格式处理-JSON框架Jackson精解第2篇
Jackson是Spring Boot默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制.它提供了很 ...
- ASP.NET实现企业微信接入应用实现身份认证
目录 #需求场景 #参考 #具体步骤 1.获取access_token 2.构造网页授权链接 3.获取访问用户身份 #.Net具体代码 1.Web首页服务端代码 2.帮助类代码 #需求场景 一个.ne ...
- 神作!阿里首发并发编程神仙笔记,Github已星标92K
Qzone 微信 神作!阿里首发并发编程神仙笔记,Github已星标92K JAVA超神编程 2020-09-23 21:04:06 JVM 无论什么级别的Java从业者,JVM都是进阶时必须迈过的坎 ...
- 深入了解Redis(6)-持久化原理
Redis是一个内存数据库,数据保存在内存中.但我们都知道存储在内存中的数据会因为外部因素而丢失,所以Redis会把数据持久化到磁盘中,至于是如何持久化呢? 一.RDB 1.手动触发 save:该命令 ...
- PCA基本原理
降维问题的优化目标:将一组N维向量降维k维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后, 选择然数据点之间方差最大的方向作为坐标轴 各字段两两间协方差为0, ...
- HTML & CSS & JavaScript 从一个表格到一个灰阶颜色表 01
工具1:HBuilder X 1.9.9.20190522 工具2:火狐浏览器 67.0.4 (64 位) 在开始之前,你需要了解一些基本的知识,不要求你能掌握,但是了解一下还是有益的: HTML 简 ...
- Eclipse 设置Tab键为4个空格
参考:java编程规范之eclipse设置tab键为四个空格 Eclipse版本 1.点击菜单Window > Preference 2.在Preferences窗口中,展开General &g ...