eureka 迁移 k8s 集群

Spring Cloud 强上云 系列之 eureka 迁移

故事前奏

前阵子忽然一个需求砸了过来,一忙就是两星期。写bug,挖坑忙的不亦乐乎。这几天军哥一直在群里一直大呼: 你们要输出,要有声音啊。正好今天刚搞完,也确实想放松一下,写篇小白文压压惊。

故事背景

这几年,云计算,容器 docker,微服务 很火,很显眼。当你初步了解这些东西,很多时候会眼前一亮。哇! 还能这么搞? 嗯! 这样确实好很多。很多企业都是拼了性命的往云上挤,这问题就来了。 上云,容器化部署是需要代价的,很多项目是基于原来传统的框架进行开发、构建,你要上云就要做出相应的代码重构,但重构代码就会莫名承担一些不可预知的风险。所以甲方爸爸的需求就来了 —— 我不管,我就要上云,我代码就这样,我就只有jar包,剩下的你自己看着办吧。乙方……

没办法,上就上吧,但问题接踵而至。你项目容器化部署了,总要有个东西来对容器进行编排和管理吧,不然后期怎么维护,怎么知道可不可靠。这个时候 k8s 站了出来,k8s 何许人也? google 开源的容器集群管理系统,业界容器编排的标准,牛批的不行,就连docker 原生的docker swarm 都被比下去了。

好吧,本文章就是讲述如何把 spring cloud eureka模块搬移到 云上 k8s 集群,实现 高可用。 ps:不得不吐槽一下,既然使用了 k8s,还要强行部署eureka 作为服务中心,总觉的有点耿直。

故事进行中之 思路整理

首先我们先理下需求。k8s 上 部署 eureka 服务,eureka 服务高可用。再理下已有的资源: 华为云 ->k8s 集群。好吧,大致清楚了。首先自己准备个具有高可用功能的eureka 镜像,然后编写对应的 k8s yaml 文件部署应用,这就大功告成了。 如果是在华为云上,甚至可以编写 AOS 模板,实现一键在 k8s 集群上部署 高可用eureka 。

故事进行中之 Spring Cloud eureka 镜像准备。
什么是Spring Cloud eureka

Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,主要负责微服务架构中的服务治理功能。

为什么需要Spring Cloud Eureka

微服务的核心思想是分而治之,把功能模块化,从整体系统中抽离出来,互相解耦。初衷是好的,但是如果一个系统模块组件太多,那么各个模块之间的交互就成了大问题。

这里写图片描述

会发现这些模块之间的调用非常复杂,各个模块其实也是互相耦合一起,每一次生产者的变化都会牵连着无数的消费者。这样,eureka 服务中心应用而生,各个模块只需要和 eureka 直接交互。

这里写图片描述

消费者只需要关注服务中心就好,从服务中心中获取服务来调用。在一定程度上实现了微服务生产者消费者之间的解耦。但是这样也有一个问题,就是万一这个 服务中心挂了,岂不是整个微服务集群就瘫痪了。在实际生产中,这显然是不可取的。部署一个高可用的eureka 服务,实现多实例euerka 节点相互注册时非常有必要的,当其中某一个节点发生宕机,并不会影响正常的业务逻辑。

这里写图片描述

Spring Cloud Eureka 项目构建
  1. 准备 pom 依赖
<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  <java.version>1.8</java.version>
  <spring-cloud.version>Finchley.SR1</spring-cloud.version>
</properties>
<dependencies>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
</dependencies>

2.启动代码中添加 @EnableEurekaServer 注解

@EnableEurekaServer
@SpringBootApplication
public class HuaweiEurekaApplication {
   

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

3.准备配置文件,在项目 resources 目录下的 application.yaml 文件中添加:

server:
  port: 8761
eureka:
  instance:
    hostname: ${
   EUREKA_HOST_NAME:peer1} #服务主机名
    appname: ${
   spring.application.name} #服务名称,默认为 unknow 这里直接取 spring.application.name 
  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值