Apollo镜像服务

基于开源Apollo服务进行相关服务镜像打包,实际将分发apollo-adminserviceapollo-configserviceapollo-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

仅仅完成以上的配置还不足以,因为看板与其他adminconfig服务不一样,看板可以统一进心管理

而不需要根据环境进行独立部署,所以就需要配置对应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可以部署一个服务,然后根据实际开发的需求将其中的configmetaadmin服务各自

部署到对应环境的服务器中,当然对应的数据库也需要各自进行独立部署。对于存在更高部署要求的建议参考官网文档

为了方便开发者基于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的部署以及接入的更多相关文章

  1. 基于k8s集群部署prometheus监控ingress nginx

    目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...

  2. 基于k8s集群部署prometheus监控etcd

    目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控 ...

  3. 持续集成之应用k8s自动部署

    持续集成之应用k8s自动部署 Intro 上次我们提到了docker容器化及自动化部署,这仅仅适合个人项目或者开发环境部署,如果要部署到生产环境,必然就需要考虑很多因素,比如访问量大了如何调整部署,如 ...

  4. 如何基于 K8S 多租能力构建 Serverless Container

    当前 Kubernetes 已经成为名副其实的企业级容器编排规范,很多云平台都开始提供兼容 Kubernetes 接口的容器服务.而在多用户支持方面,多数平台选择直接提供专属虚机集群,用户需要花费大量 ...

  5. 基于 K8S 构建数据中心操作系统

    在 12 月 22 日 ECUG 的下午场 ,七牛云容器计算部技术总监袁晓沛为大家带来了主题为<基于 K8S 的 DCOS 之路>的精彩分享,向大家介绍了七牛容器云目前 K8S 的状况和产 ...

  6. ASP.NET Core基于K8S的微服务电商案例实践--学习笔记

    摘要 一个完整的电商项目微服务的实践过程,从选型.业务设计.架构设计到开发过程管理.以及上线运维的完整过程总结与剖析. 讲师介绍 产品需求介绍 纯线上商城 线上线下一体化 跨行业 跨商业模式 从0开始 ...

  7. 基于 K8s 做应用发布的工具那么多, 阿里为啥选择灰姑娘般的 Tekton ?

    作者 | 邓洪超,阿里云容器平台工程师, Kubernetes Operator 第二人,云原生应用标准交付与管理领域知名技术专家   导读:近年来,越来越多专门给 Kubernetes 做应用发布的 ...

  8. Prometheus K8S中部署Alertmanager

    Prometheus K8S中部署Alertmanager 设置告警和通知的主要步骤如下:一.部署Alertmanager二.配置Prometheus与Alertmanager通信三.配置告警 1. ...

  9. Kubernetes之在k8s中部署Java应用

    部署好了k8s以后 部署参考https://www.cnblogs.com/minseo/p/12055731.html 怎么在k8s部署应用 项目迁移到k8s平台是怎样的流程 1,制作镜像 2,控制 ...

随机推荐

  1. 如何把自己开发的项目上传到GitHub仓库或者码云仓库?

    首先你需要用你的邮箱去注册一个自己的GitHub仓库 or 码云仓库.然后确保你的电脑安装了git. 码云仓库:https://gitee.com/ GitHub:https://github.com ...

  2. [LeetCode]子串的最大出现次数(字符串)

    题目 给你一个字符串 s ,请你返回满足以下条件且出现次数最大的 任意 子串的出现次数: 子串中不同字母的数目必须小于等于 maxLetters . 子串的长度必须大于等于 minSize 且小于等于 ...

  3. [Spark快速大数据分析]阅读笔记

    第2章 Spark分布式执行涉及的组件 每个Spark应用都由一个驱动程序来发起集群上的各种并行操作,驱动程序通过一个SparkContext对象访问Spark:驱动程序管理多个执行器节点,可以用Sp ...

  4. nacos快速安装

    一 什么是 Nacos 服务注册中心和配置中心. 二 使用 下载和启动 使用有两种方式 1.自己下载源码编译 2.下载编译好的压缩包 我比较懒选择了第二种方式. 最新稳定版本 下载地址:https:/ ...

  5. 详尽的 Elasticsearch7.X 安装及集群搭建教程

    为了更好的阅读体验,欢迎访问 原文阅读链接 简介 首先引用 Elasticsearch (下文简称 ES)官网的一段描述: Elasticsearch 是一个分布式.RESTful 风格的搜索和数据分 ...

  6. 2020DASCTF八月浪漫七夕战

    安恒大学 注入点在邮箱注册那里,无法复现了,提一下 ezflask 源代码 #!/usr/bin/env python # -*- coding: utf-8 -*- from flask impor ...

  7. 一道Postgresql递归树题

    转载请注明出处: https://www.cnblogs.com/funnyzpc/p/13698249.html 也是偶然的一次,群友出了一道题考考大家,当时正值疫情最最严重的三月(借口...),披 ...

  8. MFC与QT区别

    转载  https://www.cnblogs.com/forever5325/p/9597649.html QT使用的编译器是MinGW,即Linux下的GCC移植到windows的版本:MFC使用 ...

  9. 实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令

    一.安装目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解调 ...

  10. python双向链表的实现

    python双向链表和单链表类似,只不过是增加了一个指向前面一个元素的指针,下面的代码实例了python双向链表的方法 示意图: python双向链表实现代码: # -*- coding: utf-8 ...