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,控制 ...
随机推荐
- HBase启用压缩
1. 压缩算法的比较 算法 压缩比 压缩 解压 GZIP 13.4% 21MB/s 118MB/s LZO 20.5% 135MB/s 410MB/s Snappy/Zippy 22.2% 172MB ...
- 第一次软件工程与UML作业
这个作业属于哪个课程 https://url.cn/IMQa18Jo 这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy/2018SE1/homework/ ...
- 集群实战(1):swarm安装记述
查看主机名 hostnamectl 修改主机名 hostnamectl set-hostname xxx 关闭selinux sed -i 's/SELINUX=enforcing/#SELINUX= ...
- nginx异步访问mysql
nginx中有一个模块有这个功能,(以前的文章中扩展,这里叫模块,以后统一叫模块,模块可能准确点,因为扩展是单独的文件,而模块是嵌入到主文件中的),这个模块叫drizzle-nginx-module, ...
- spring-dao.xml通常写法
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- 【大数据】深入源码解析Map Reduce的架构
这几天学习了MapReduce,我参照资料,自己又画了两张MapReduce的架构图. 这里我根据架构图以及对应的源码,来解释一次分布式MapReduce的计算到底是怎么工作的. 话不多说,开始! ...
- Metasploit之后渗透攻击(信息收集、权限提升)
利用永恒之蓝漏洞入侵Windows7 流程参考https://www.jianshu.com/p/03a1c13f963a,实在是太棒啦!!! 目标主机为win7(IP:192.168.1.102): ...
- python_购物车
流程图 实现方式 #!/usr/bin/python3 __author__ = 'beimenchuixue' __blog__ = 'http://www.cnblogs.com/2bjiuji ...
- 利用rtklib处理GPS以及北斗数据详解
利用rtklib开源代码处理GPS以及北斗数据详解 在GNSS领域最基础的工作是这些GNSS系统的定位工作,对于绝大多数研究者,自己着手完成这些工作是一个"鸡肋":完全独立设计的话 ...
- Jmeter5.3源码编译
下载源码 https://jmeter.apache.org/download_jmeter.cgi 配置网络环境(重要) 下载 Proxifier 配置上网条件 导入Idea 通过 Idea 的 O ...