Apollo 携程框架 开源配置

携程Apollo配置管理系统使用 Apollo是携程开源的分布式配置管理中心,支持多环境、多集群配置管理,具有实时推送、灰度发布、权限审计等特性。系统包含Portal(管理界面)、Config/Admin Service(配置服务)、Eureka(服务注册)和Client(客户端)四大模块。部署时需创建PortalDB和ConfigDB数据库,配置不同环境的数据源和端口。本文详细介绍了双节点部署方案,包括数据库配置、服务端口修改等步骤,适用于微服务架构下的配置管理需求。通过Apollo可以实现配置的集中化管理、动态更新和高可用性。 阅读详情

1. 基本概念

由于 Apollo 概念比较多,刚开始使用比较复杂,最好先过一遍概念再动手实践尝试使用。

1、背景

随着程序功能的日益复杂,程序的配置日益增多,各种功能的开关、参数的配置、服务器的地址……对程序配置的期望值也越来越高,配置修改后实时生效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制…… 在这样的大环境下,传统的通过配置文件、数据库等方式已经越来越无法满足开发人员对配置管理的需求。因此 Apollo 配置中心应运而生!

2、简介

Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。

3、特点

  • 部署简单

  • 灰度发布

  • 版本发布管理

  • 提供开放平台API

  • 客户端配置信息监控

  • 提供Java和.Net原生客户端

  • 配置修改实时生效(热发布)

  • 权限管理、发布审核、操作审计

  • 统一管理不同环境、不同集群的配置

4、基础模型

如下即是 Apollo 的基础模型:

  • (1)、用户在配置中心对配置进行修改并发布

  • (2)、配置中心通知Apollo客户端有配置更新

  • (3)、Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用

5、Apollo 的四个维度

Apollo支持4个维度管理Key-Value格式的配置:

  • application (应用)

  • environment (环境)

  • cluster (集群)

  • namespace (命名空间)

(1)、application

  • Apollo 客户端在运行时需要知道当前应用是谁,从而可以根据不同的应用来获取对应应用的配置。

  • 每个应用都需要有唯一的身份标识,可以在代码中配置 app.id 参数来标识当前应用,Apollo 会根据此指来辨别当前应用。

(2)、environment

在实际开发中,我们的应用经常要部署在不同的环境中,一般情况下分为开发、测试、生产等等不同环境,不同环境中的配置也是不同的,在 Apollo 中默认提供了四种环境:

  • FAT(Feature Acceptance Test):功能测试环境

  • UAT(User Acceptance Test):集成测试环境

  • DEV(Develop):开发环境

  • PRO(Produce):生产环境

在程序中如果想指定使用哪个环境,可以配置变量 env 的值为对应环境名称即可。

(3)、cluster

  • 一个应用下不同实例的分组,比如典型的可以按照数据中心分,把上海机房的应用实例分为一个集群,把北京机房的应用实例分为另一个集群。

  • 对不同的集群,同一个配置可以有不一样的值,比如说上面所指的两个北京、上海两个机房设置两个集群,两个集群中都有 mysql 配置参数,其中参数中配置的地址是不一样的。

(4)、namespace

一个应用中不同配置的分组,可以简单地把 namespace 类比为不同的配置文件,不同类型的配置存放在不同的文件中,如数据库配置文件,RPC 配置文件,应用自身的配置文件等。

熟悉 SpringBoot 的都知道,SpringBoot 项目都有一个默认配置文件 application.yml,如果还想用多个配置,可以创建多个配置文件来存放不同的配置信息,通过指定 spring.profiles.active 参数指定应用不同的配置文件。这里的 namespace 概念与其类似,将不同的配置放到不同的配置 namespace 中。

Namespace 分为两种权限,分别为:

  • public(公共的): public权限的 Namespace,能被任何应用获取。

  • private(私有的): 只能被所属的应用获取到。一个应用尝试获取其它应用 private 的 Namespace,Apollo 会报 "404" 异常。

Namespace 分为三种类型,分别为:

  • 私有类型: 私有类型的 Namespace 具有 private 权限。例如 application Namespace 为私有类型。

  • 公共类型: 公共类型的 Namespace 具有 public 权限。公共类型的N amespace 相当于游离于应用之外的配置,且通过 Namespace 的名称去标识公共 Namespace,所以公共的 Namespace 的名称必须全局唯一。

  • 关联类型(继承类型): 关联类型又可称为继承类型,关联类型具有 private 权限。关联类型的 Namespace 继承于公共类型的 Namespace,将里面的配置全部继承,并且可以用于覆盖公共 Namespace 的某些配置。

6、本地缓存

Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。

本地缓存路径默认位于以下路径,所以请确保/opt/data或C:\opt\data\目录存在,且应用有读写权限。

  • Mac/Linux: /opt/data/{appId}/config-cache

  • Windows: C:\opt\data{appId}\config-cache

本地配置文件会以下面的文件名格式放置于本地缓存路径下:

{appId}+{cluster}+{namespace}.properties

7、客户端设计

上图简要描述了Apollo客户端的实现原理

  • 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。

  • 客户端还会定时从 Apollo 配置中心服务端拉取应用的最新配置。

    • 这是一个 fallback 机制,为了防止推送机制失效导致配置不更新

    • 客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回 304 - Not Modified

    • 定时频率默认为每 5 分钟拉取一次,客户端也可以通过在运行时指定 apollo.refreshInterval 来覆盖,单位为分钟。

  • 客户端从 Apollo 配置中心服务端获取到应用的最新配置后,会保存在内存中。

  • 客户端会把从服务端获取到的配置在本地文件系统缓存一份 在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置。

  • 应用程序从 Apollo 客户端获取最新的配置、订阅配置更新通知。

配置更新推送实现

前面提到了 Apollo 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。长连接实际上我们是通过 Http Long Polling 实现的,具体而言:

  • 客户端发起一个 Http 请求到服务端

  • 服务端会保持住这个连接 60 秒

    • 如果在 60 秒内有客户端关心的配置变化,被保持住的客户端请求会立即返回,并告知客户端有配置变化的 namespace 信息,客户端会据此拉取对应 namespace 的最新配置

    • 如果在 60 秒内没有客户端关心的配置变化,那么会返回 Http 状态码 304 给客户端

  • 客户端在收到服务端请求后会立即重新发起连接,回到第一步

  • 考虑到会有数万客户端向服务端发起长连,在服务端我们使用了 async servlet(Spring DeferredResult) 来服务 Http Long Polling 请求。

8、总体设计

上图简要描述了Apollo的总体设计,我们可以从下往上看:

  • Config Service 提供配置的读取、推送等功能,服务对象是 Apollo 客户端

  • Admin Service 提供配置的修改、发布等功能,服务对象是 Apollo Portal(管理界面)

  • Config Service 和 Admin Service 都是多实例、无状态部署,所以需要将自己注册到 Eureka 中并保持心跳

  • 在 Eureka 之上我们架了一层 Meta Server 用于封装Eureka的服务发现接口

  • Client 通过域名访问 Meta Server 获取Config Service服务列表(IP+Port),而后直接通过 IP+Port 访问服务,同时在 Client 侧会做 load balance 错误重试

  • Portal 通过域名访问 Meta Server 获取 Admin Service 服务列表(IP+Port),而后直接通过 IP+Port 访问服务,同时在 Portal 侧会做 load balance、错误重试

  • 为了简化部署,我们实际上会把 Config Service、Eureka 和 Meta Server 三个逻辑角色部署在同一个 JVM 进程中

9、可用性考虑

配置中心作为基础服务,可用性要求非常高,下面的表格描述了不同场景下Apollo的可用性:

场景影响降级原因
某台 config service 下线无影响Config service无状态,客户端重连其它config service
所有 config service 下线客户端无法读取最新配置,Portal无影响客户端重启时,可以读取本地缓存配置文件
某台 admin service 下线无影响Admin service无状态,Portal重连其它 admin service
所有 admin service 下线客户端无影响,portal无法更新配置
某台 portal 下线无影响Portal域名通过slb绑定多台服务器,重试后指向可用的服务器
全部 portal 下线客户端无影响,portal无法更新配置
某个数据中心下线无影响多数据中心部署,数据完全同步,Meta Server/Portal 域名通过 slb 自动切换到其它存活的数据中心

2. Apollo 配置中心创建项目与配置

接下来我们将创建一个 Apollo 的客户端项目,引用 Apollo 来实现配置动态更新,不过在此之前我们需要提前进入 Apollo Portal 界面,在里面提前创建一个项目并在其配置一个参数,方便后续客户端引入该配置参数,测试是否能动态变化。

1、登录 Apollo

我这里是部署到 Kubernetes 中,通过 NodePort 方式暴露出一个端口,打开这个地址登录 Apollo:

  • 用户名:apollo

  • 密  码:admin

2、修改与增加部门数据

在登录后创建项目时,选择部门默认只能选择 Apollo 自带的 测试部门1与测试部门2两个选项。

开始这真让人迷糊,原来 Apoloo 没有修改或新增部门信息的管理节目,只能通过修改数据库,来新增或者修改数据,这里打开 Portal 对月的数据库中的表 ApolloPortalDB 修改 key 为 organizations 的 value 的 json 数据,改成自己对于的部门信息。

3、创建一个项目

修改完数据库部门信息后,重新登录 Apollo Portal,然后创建项目,这时候选择部门可以看到已经变成我们自己修改后的部门信息了,选择我们自定义部门,然后设置应用 ID 为 apollo-test,应用名为 apollo-demo 。

创建完成后进入配置管理界面

4、创建一个配置参数

创建一个配置参数,方便后续 Apollo 客户端项目引入该参数,进行动态配置测试。

设置 key 为 test value 为 123456 然后设置一个备注,保存。

创建完成后可以看到配置管理节目新增了一条配置。

接下来我们将此配置通过发布按钮,进行发布。

3. 创建 Apollo 客户端测试项目

这里创建一个 SpringBoot 项目,引入 Apollo 客户端来来实现与 Apollo 配置中心服务端交互。

1、Mavne 添加 Apollo 依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
    </parent>

    <groupId>club.mydlq</groupId>
    <artifactId>apollo-demo</artifactId>
    <version>0.0.1</version>
    <name>apollo-demo</name>
    <description>Apollo Demo</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
            <version>1.4.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2、配置文件添加参数

在 application.yml 配置文件中添加下面参数,这里简单介绍下 Apollo 参数作用:

  • apollo.meta: Apollo 配置中心地址。

  • apollo.cluster: 指定使用某个集群下的配置。

  • apollo.bootstrap.enabled: 是否开启 Apollo。

  • apollo.bootstrap.namespaces : 指定使用哪个 Namespace 的配置,默认 application。

  • apollo.cacheDir=/opt/data/some-cache-dir: 为了防止配置中心无法连接等问题,Apollo 会自动将配置本地缓存一份。

  • apollo.autoUpdateInjectedSpringProperties: Spring应用通常会使用 Placeholder 来注入配置,如${someKey:someDefaultValue},冒号前面的是 key,冒号后面的是默认值。如果想关闭 placeholder 在运行时自动更新功能,可以设置为 false。

  • apollo.bootstrap.eagerLoad.enabled : 将 Apollo 加载提到初始化日志系统之前,如果设置为 false,那么将打印出 Apollo 的日志信息,但是由于打印 Apollo 日志信息需要日志先启动,启动后无法对日志配置进行修改,所以 Apollo 不能管理应用的日志配置,如果设置为 true,那么 Apollo 可以管理日志的配置,但是不能打印出 Apollo 的日志信息。

#应用配置
server:
  port: 8080
spring:
  application:
    name: apollo-demo

#Apollo 配置
app:
  id: apollo-test                            #应用ID
apollo:
  cacheDir: /opt/data/                       #配置本地配置缓存目录
  cluster: default                           #指定使用哪个集群的配置
  meta: http://192.168.2.11:30002            #DEV环境配置中心地址
  autoUpdateInjectedSpringProperties: true   #是否开启 Spring 参数自动更新
  bootstrap:                                
    enabled: true                            #是否开启 Apollo
    namespaces: application                  #设置 Namespace
    eagerLoad:
      enabled: false                         #将 Apollo 加载提到初始化日志系统之前

3、创建测试 Controller 类

写一个 Controller 类来输出 test 变量的值,使用了 Spring 的 @Value 注解,用于读取配置文件中的变量的值,这里来测试该值,项目启动后读取到的变量的值是设置在 application 配置文件中的默认值,还是远程 Apollo 中的值,如果是 Apollo 中配置的值,那么再测试在 Apollo 配置中心中改变该变量的值后,这里是否会产生变化。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @Value("${test:默认值}")
    private String test;

    @GetMapping("/test")
    public String test(){
        return "test的值为:" + test;
    }
}

4、创建启动类

SpringBoot 项目启动类。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

5、JVM 启动参数添加启动参数

由于本人的 Apollo 是部署在 Kubernetes 环境中的,JVM 参数中必须添加两个变量:

  • env: 应用使用 Apollo 哪个环境,例如设置为 DEV 就是指定使用开发环境,如果设置为 PRO 就是制定使用生产环境。

  • apollo.configService: 指定配置中心的地址,跳过 meta 的配置,在测试时指定 meta 地址无效果。如果 Apollo 是部署在 Kubernetes 中,则必须设置该参数为配置中心地址,如果 Apollo 不是在 Kubernetes 环境中,可以不设置此参数,只设置 meta 参数即可。一般情况下,configService 和 meta 值一致。

如果是在 Idea 中启动,可以配置启动参数,加上:

-Dapollo.configService=http://192.168.2.11:30002 -Denv=DEV

如果是 java 命令启动程序,需要 JVM 加上:

$ java -Dapollo.configService=http://192.168.2.11:30002 -Denv=DEV -jar apollo-demo.jar
“

注意:上面 env 指定的环境,要和 apollo.meta 指定 Config 地址的环境一致,例如 -Denv=DEV 即使用开发环境,那么 apollo.meta=http://xxx.xxx.xxx:8080 这个url 的 Config 也是开发环境下的配置中心服务,而不能是 PRO 或者其它环境下的配置中心。

”

4. 启动项目进行测试

1、测试是否能够获取 Apollo 中设置的值

启动上面的测试用例,然后输入地址 http://localhost:8080/test 查看:

test的值为:123456

可以看到使用的是 Apollo 中配置的 test 参数的值 123456,而不是默认的值。

2、测试当 Apollo 中修改参数值后客户端是否能及时刷新

修改 Apollo 配置中心参数 test 值为 666666 ,然后再次发布。

发布完成后再次输入地址 http://localhost:8080/test 查看:

test的值为:666666

可以看到示例应用中的值已经改变为最新的值。

3、测试当 Apollo 执行配置回滚操作时客户端是否能及时改变

回滚完成后状态将变为未发布状态,则时候输入地址 http://localhost:8080/test 查看:

test的值为:123456

可以看到已经回滚到之前的 test 配置的值了。

4、测试当不能访问 Apollo 时客户端的变化

这里我们将 JVM 参数中 Apollo 配置中心地址故意改错:

-Dapollo.configService=http://192.168.2.100:30002 -Denv=DEV

然后输入地址 http://localhost:8080/test 可以看到值为:

test的值为:123456

可以看到显示的值并不是我们定义的默认值,而还是 Apollo 配置中心配置的 test 参数的值。考虑到由于 Apollo 会在本地将配置缓存一份,出现上面原因,估计是缓存生效。当客户端不能连接到 Apollo 配置中心时候,默认使用本地缓存文件中的配置。

上面我们配置了本地缓存配置文件存放地址为 "/opt/data/" ,接下来进入缓存目录,找到对应的缓存配置文件,删除缓存配置文件后,重启应用,再次输入地址查看:

test的值为:默认值

删除缓存配置文件后,可以看到输出的值为自己定义的默认值。

5、测试当 Apollo 中将参数删除后客户端的变化

这里我们进入 Apollo 配置中心,删除之前创建的 test 参数,然后发布。

然后再次打开地址 http://localhost:8080/test 查看:

test的值为:默认值

可以看到显示的是应用程序中设置的默认值。

5. 对 Apollo 的 Cluster、Namespace 进行探究

在 Apollo 中,配置可以根据不同的环境划分为 Dev(开发)、Prod(生产) 等环境,又能根据区域划分为不同的 Cluster(集群),还能根据配置参数作用功能的不同划分为不同的 Namespace(命名空间),这里探究下,如何使用上述能力。

1、不同环境下的配置

(1)、Apollo 配置中心 PRO 环境添加参数

打开 Apollo 配置中心,环境列表点击 PRO 环境,然后新增一条配置,和之前例子中参数保持一致,都为 test 参数,创建完成后发布。

然后修改上面的示例项目,将配置参数指定为 PRO 环境:

(2)、示例项目修改 application.yml 配置文件

把 apollo.meta 参数改成 RPO 的配置中心地址

......

apollo:
  meta: http://192.168.2.11:30005            #RPO环境配置中心地址
  
......

(3)、示例项目修改 JVM 参数

把 apollo.configService 参数改成 PRO 配置中心地址,env 参数的值改为 PRO。

-Dapollo.configService=http://192.168.2.11:30005 -Denv=PRO

(4)、启动示例项目观察结果

启动示例项目,然后接着输入地址 http://localhost:8080/test 查看信息:

test的值为:abcdefg

可以看到已经改成生成环境配置,所以在实际项目中,如果要更换环境,需要修改 JVM 参数 env(如果 Apollo 部署在 Kubernetes 环境中,还需要修改 apollo.configService 参数),和修改 application.yml 配置文件的参数 apollo.meta 值。

2、不同集群下的配置

(1)、创建两个集群

例如在开发过程中,经常要将应用部署到不同的机房,这里分别创建 beijing、shanghai 两个集群。

(2)、两个集群都配置同样的参数不同的值

在两个集群 beijing 与 shanghai 中,都统一配置参数 test,并且设置不同的值。

(3)、示例项目 application.yml 修改集群配置参数,并启动项目观察结果

指定集群为 beijing:

......

apollo:
  cluster: beijing                      #指定使用 beijing 集群

......

启动示例项目,然后接着输入地址 http://localhost:8080/test 查看信息:

test的值为:Cluster-BeiJing

可以看到用的是 beijing 集群的配置

指定集群为 shanghai:

......

apollo:
  cluster: shanghai                      #指定使用 shanghai 集群

......

启动示例项目,然后接着输入地址 http://localhost:8080/test 查看信息:

test的值为:Cluster-ShangHai

可以看到用的是 shanghai 集群的配置

3、不同命名空间下的配置

(1)、创建两个命名空间

命名空间有两种,一种是 public(公开),一种是 private 私有,公开命名空间所有项目都能读取配置信息,而私有的只能 app.id 值属于该应用的才能读取配置。

这里创建 dev-1 与 dev-2 两个私有的命名空间,用于测试。

(2)、两个集群都配置同样的参数不同的值

在两个命名空间中,都统一配置参数 test,并且设置不同的值,设置完后发布。

(3)、示例项目 application.yml 修改命名空间配置参数,并启动项目观察结果

指定命名空间为 dev-1:

......

apollo:
  bootstrap:
    namespaces: dev-1                   #设置 dev-1 命名空间

......

启动示例项目,然后接着输入地址 http://localhost:8080/test 查看信息:

test的值为:dev-1 Namespace

可以看到用的是 dev-1 命名空间的配置

指定命名空间为 dev-2:

......

apollo:
  bootstrap:
    namespaces: dev-2                   #设置 dev-1 命名空间

......

YAML

启动示例项目,然后接着输入地址 http://localhost:8080/test 查看信息:

test的值为:dev-2 Namespace

HTML

可以看到用的是 dev-2 命名空间的配置

6. Kubernetes 的 SpringBoot 应用使用 Apollo 配置中心

本人的 Apollo 和 SpringBoot 应用一般都是基于 Kubernetes 部署的,所以这里简单介绍下,如何在 Kubernetes 环境下部署 SpringBoot 应用且使用 Apollo 作为配置中心。

这里项目依旧使用上面的示例,不过首先要将其编译成 Docker 镜像,方便后续部署到 Kubernetes 环境下。

1、构建 Docker 镜像

(1)、执行 Maven 编译

首先执行 Maven 命令,将项目编译成一个可执行 JAR。

$ mvn clean install

BASH

(2)、准备 Dockerfile

创建构建 Docker 镜像需要的 Dockerfile 文件,将 Maven 编译的 JAR 复制到镜像内部,然后设置两个变量,分别是:

  • JAVA_OPTS: Java JVM 启动参数变量,这里需要在这里加一个时区参数。

  • APP_OPTS: Spring 容器启动参数变量,方便后续操作时能通过此变量配置 Spring 参数。

Dockerfile:

FROM openjdk:8u222-jre-slim
VOLUME /tmp
ADD target/*.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS="-XX:MaxRAMPercentage=80.0 -Duser.timezone=Asia/Shanghai"
ENV APP_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar $APP_OPTS" ]

(3)、构建 Docker 镜像

执行 Docker Build 命令构建 Docker 镜像。

$ docker build -t mydlqclub/springboot-apollo:0.0.1 .

BASH

2、Kubernetes 部署示例应用

(1)、创建 SpringBoot 且使用 Apollo 配置中心的 Kubernetes 部署文件

这里创建 Kubernetes 下的 SpringBoot 部署文件 apollo-demo-example.yaml。在之前 Dockerfile 中设置了两个环境变量,JAVA_OPTS 与 APP_OPTS。其中 JAVA_OPTS 变量的值将会作为 JVM 启动参数,APP_OPTS 变量的值将会作为应用的配置参数。所以,这里我们将 Apollo 配置参数放置到变量中,这样一来就可以方便修改与维护 Apollo 的配置信息。

“

在下面配置的环境变量参数中,设置的配置中心地址为 http://service-apollo-config-server-dev.mydlqclub:8080,这是因为 Apollo 部署在 K8S 环境中,且可以使用域名方式访问,service-apollo-config-server-dev 是应用的 Service 名称,mydlqcloud 是 K8S 下的 Namespace 名称。

”

springboot-apollo.yaml

apiVersion: v1
kind: Service
metadata:
  name: springboot-apollo
spec:
  type: NodePort
  ports:
    - name: server
      nodePort: 31080
      port: 8080
      targetPort: 8080
    - name: management
      nodePort: 31081
      port: 8081
      targetPort: 8081
  selector:
    app: springboot-apollo
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot-apollo
  labels:
    app: springboot-apollo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: springboot-apollo
  template:
    metadata:
      name: springboot-apollo
      labels:
        app: springboot-apollo
    spec:
      restartPolicy: Always
      containers:
        - name: springboot-apollo
          image: mydlqclub/springboot-apollo:0.0.1
          imagePullPolicy: Always
          ports:
            - containerPort: 8080
              name: server
          env:
            - name: JAVA_OPTS
              value: "-Denv=DEV"
              ##注意修改此处的 mydlqcloud 为你自己的 Namespace 名称
            - name: APP_OPTS
              value: "
                     --app.id=apollo-demo
                     --apollo.bootstrap.enabled=true
                     --apollo.bootstrap.eagerLoad.enabled=false
                     --apollo.cacheDir=/opt/data/
                     --apollo.cluster=default
                     --apollo.bootstrap.namespaces=application
                     --apollo.autoUpdateInjectedSpringProperties=true
                     --apollo.meta=http://service-apollo-config-server-dev.mydlqcloud:8080    
                     "
          resources:
            limits:
              memory: 1000Mi
              cpu: 1000m
            requests:
              memory: 500Mi
              cpu: 500m

(2)、部署 SpringBoot 应用到 Kubernetes

-n:创建应用到指定的 Namespace 中。

$ kubectl apply -f springboot-apollo.yaml -n mydlqcloud

BASH

3、测试部署的应用接口

上面的应用配置了 NodePort 端口,可以通过此端口访问 Kubernetes 集群内的应用接口,本人 Kubernetes 集群地址为 192.168.2.11 且 NodePort 端口为 31081,所以浏览器访问地址 http://192.168.2.11:31081/test 来测试接口,显示:

test的值为:123456

可以看到能通过 Apollo 获取参数值,此文章到此结束。

携程开源配置管理中心Apollo简介 一.为什么需要配置中心?       由于程序日益复杂,相应的配置也越来越多,对配置的期望也会变高(比如实时性,分环境管理),因此我们需要一个配置中心去管理我们的配置。二.Apollo是什么?       Apollo是携程框架部门研发的开源配置管理中心,能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时的推送到应用端,并且有关于权限管理、流程治理等功能。(一)Apollo支持四个维度... 阅读详情

相关推荐

【项目实战】Apollo(阿波罗)是携程框架部门研发的一款开源配置管理中心,旨在解决分布式系统中应用配置管理的问题。

为了更好地服务于第三方应用,Apollo提供了一套HTTP RESTful接口,称为开放平台API。这套API允许外部应用程序自行管理其配置数据,包括查询、添加、修改和删除等操作。通过这种方式,不仅可以简化配置管理工作流程,而且还能提高自动化程度,减少人为错误的可能性。使用Apollo开放平台API前,首先需要注册一个第三方应用并获取唯一的AppId,接着为该应用生成一个用于身份验证的Token。有了Token之后,第三方应用就可以调用Apollo提供的各种RESTful接口了。

奶爸的编程之路,也就一周冷个三天 437

携程apollo分布式配置中心

携程apollo分布式配置中心介绍 携程apollo配置中心是基于eureka搭建的分布式配置中心,类似于百度的Disconf配置中心,可以与Spring,SpringBoot集成。能实时获取配置中心服务端最新的配置 apollo总体技术架构 ConfigDB: 配置中心持久化到数据库或者文件中 ConfigService:配置中心查询服务提供者,从ConfigDB中读取数据。可以有多个Conf...

yang1991xq的博客 2762

Apollo(阿波罗)携程开源配置管理中心

一、背景 最近公司订单中心重构,利用spring boot集成apollo配置中心,因此学习一下apollo配置中心 因为如今程序功能越来越复杂,程序的配置日益增多:各种功能的开关、参数配置、服务器地址、数据库链接等 对于配置的期望值越来越高:配置修改后实时生效、灰度发布、分环境、分集群管理配置、完善的权限、审核机制等。 所以传统的配置文件越来越无法满足开发人员的需求。所以就有了apollo 二、Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同.

1308

携程Apollo配置中心架构介绍

Apollo(阿波罗)是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。Apollo目前在国内开发者社区比较热,在Github上有超过5k颗星,在国内众多互联网公司有落地案例,可以说Apollo是目前配置中心产品领域Number1的产品,其成熟度和企业级特性要远远强于Spring Cloud体系中的Spring Cloud Config产品。

纵横千里 捭阖四方 的专栏 3006

StarRocks FE启动异常

服务器断电,StarRocks FE 启动失败。

qq_15138049的博客 1112

海康/大华设备如何接入GB28181平台?最新2022版互联避坑指南

本文详细解析了海康/大华设备接入GB28181平台的最新2022版互联避坑指南,涵盖参数配置、实时视音频点播协议交互及典型故障排查。重点介绍了GB/T28181-2022标准下的设备编码规范、SIP服务器配置及媒体流保活机制,帮助工程团队高效解决设备离线和媒体流中断等问题。

weixin_30733003的博客 687

探秘Apollo:CTrip开源的分布式配置中心

探秘Apollo:CTrip开源的分布式配置中心 apollo.net项目地址:https://gitcode.com/gh_mirrors/apo/apollo.net 是携程旅行网开源的一款强大的分布式配置管理框架,旨在帮助开发者轻松地实现对应用配置的集中管理和动态更新。本文将深入探讨Apollo的技术特性、应用场景及优势,带你领略其卓越的灵活性和易用性。 项目简介 Apollo 提供了一个...

gitblog_00090的博客 633

CentOS 7下Synopsys DC综合工具安装与配置全攻略(附常见报错解决方案)

本文详细介绍了在CentOS 7操作系统上安装与配置Synopsys Design Compiler(DC)综合工具的完整流程。内容涵盖从系统环境准备、软件安装、许可证配置到实战综合的全过程,并针对DC综合工具在安装和运行中常见的报错问题提供了具体的解决方案,帮助数字IC设计初学者快速搭建稳定的EDA学习环境。

weixin_29159441的博客 257

携程开源框架分布式拉取配置之Apollo

https://www.cnblogs.com/xiaohouzai/p/9231925.html 官网: https://github.com/nobodyiam/apollo-build-scripts java接入指南

文盲青年的博客 885

【AI Agent】Hermes Agent解析

Hermes Agent:一个具备持久化学习能力的开源AI Agent框架 核心特点: 突破传统Agent的"无状态困境",通过记忆系统(SQLite+FTS5全文检索)实现跨会话经验积累 支持200+模型自由切换,11种模型家族和15+平台接入 五层架构设计(入口层、编排层、推理层、工具执行层、存储层)实现平台无关性 47+内置工具和动态技能沉淀机制,支持从任务执行中自动提炼可复用Skill 独特的四层记忆体系(会话/每日/长期/向量索引)和辩证式用户建模 与传统Agent对比: 具备自我进化能力,通过A

sysu_lluozh 940

2025华为杯第二十二届中国研究生数学建模竞赛D题:低空湍流监测及最优航路规划 - 完整解题分析+完整MATLAB源码!(上篇)

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 2587

微服务相关配套之Apollo

Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。 几种config-server的对比 目前我们使用的config-server是基于spring cloud自带的config组件, 简单够用, 但和市面上的其他配置中心比起来还是弱了点, 以下是一个简单的比对: A...

LeZhi_126的博客 425

UCIE Specification详解(二)

UCIe架构概述。

Crazzy_M的博客 3297

Apollo分布式配置中心

Apollo分布式配置中心

usa_washington的博客 1421

5、模型预测控制与分布式MPC控制结构解析

本文深入解析了模型预测控制(MPC)中的双模式预测控制及其稳定性理论,并探讨了分布式MPC的不同控制结构。内容涵盖MPC的基本公式化、性能指标、优化问题以及相关算法步骤,同时比较了集中式MPC、单层分布式MPC和分层分布式MPC的优缺点和适用场景。最后通过流程图和表格形式总结了双模式MPC的算法步骤和控制结构选择思路,并提供了操作建议,以帮助在实际工业系统中更好地应用MPC技术。

tea88的博客 170

【26美赛E题 Passive Solar Shading】2026美赛数学建模(MCM/ICM)思路解析及代码分享

本文研究了被动太阳能遮阳(PSS)策略在建筑节能中的应用,针对Sungrove大学(低纬高温)和Borealis大学(高纬寒冷)两种典型气候条件,建立了动态太阳辐射-热平衡模型。通过优化遮阳结构(外檐长度、百叶角度)、窗户布局和内部热质量分布,实现了夏季制冷负荷降低30-40%(Sungrove)和冬季采暖负荷减少15-25%(Borealis)。创新性地采用全天候动态遮阳建模方法,结合热质量优化与储能设计,提出了可适应不同气候条件的建筑节能解决方案,为未来可持续建筑设计提供了量化框架。

一键难忘的博客 949

携程Apollo分布式配置中心搭建指南

Apollo配置中心介绍 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。 Apollo支持4个维度管理Key-Value格式的配置: 1、application (应用) 2、environment (环境) 3、cluster (集群) 4、namespace (命名空间...

congge 1740

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JAVA开发(通过Apollo注入配置信息的几种方式)

在springCloud中有一个重要的组件就是配置中心,config:server,用于配置springboot中需要注入的各种配置项。但是现在发现越来越多的企业使用Apollo进行集成。博主在开发中也是使用Apollo进行配置。本文总结Apollo的的使用,集成到springboot,和注入方式等。

JAVA领域优质创作者,基于分片网络查询方法专利发明者。 5403

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

携程 Apollo 配置中心

Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。Apollo支持4个维度管理Key-Value格式的配置:application (应用)environment (环境)cluster (集群)namespace (命名空间)同时,Apollo基于开源模...

weixin_34055910的博客 144

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

携程Apollo统一配置中心的搭建和使用(java)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34233618的博客 389

apollo配置中心搭建以及原理介绍

Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。 Apollo基于开源模式开发,开源地址:https://github.com/ctripcorp/apollo 1. 1 基础模型 1.1.1用户在配置中心对配置进行修改并发布 1.1.2配置中心通知Apollo客...

jaemy2011的博客 755

开源配置中心Apollo + SpringCloud生产环境搭建

开源配置中心Apollo Apollo概述 pollo(阿波罗)是携程框架部门研发的开源配置管理中心 能够集中化管理应用不同环境、不同集群的配置, 配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。 Apollo从设计之初就立志于成为一个有治理能力的配置发布平台,目前提供了以下的特性: 统一管理不同环境、不同集群的配置: Apollo提供了一个统一界面集中式管理不同环境(environment)、 不同集群(cluster)、 不同命名空间(namespace)的配置。 同

慈様 1118

Apollo配置中心使用及热更新

介绍 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。 Apollo支持4个维度管理Key-Value格式的配置: application (应用) environment (环境) cluster (集群) namespace (命名空间) Apollo与Spr...

进击的小白 4609

apollo配置中心简介

Apollo配置中心介绍 2016年 07月 09日 1、What is Apollo 1.1 背景 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址…… 对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制…… 在这样的大环境下,传统的通过配置文件、数据库等方式已经越来越无法满足开发人员对配置管理的需求。 Apollo配置中心应运而生! 1.2 Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配

weixin_57763462的博客 718

Apollo——配置中心介绍

说明:此文章来自Apollo的github,仅以此收藏,方便日后温习,附上地址: https://github.com/ctripcorp/apollo/wiki/Apollo%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83%E4%BB%8B%E7%BB%8D 1、What is Apollo 1.1 背景 随着程序功能的日益复杂,程序的配置日益增多:各...

愚者 1048

Apollo(一)-基本介绍

Apollo-基本介绍WhatWhy参考 What Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。 Apollo支持4个维度管理Key-Value格式的配置: application (应用) environment (环境) cluster (集群) namespace...

DRD 2万+
上一篇: 【无标题】
下一篇: Hutool 嘎嘎香,开炫了!
Java_2017_csdn
博客等级 码龄10年 329粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值