项目版本情况

SpringBoot: 2.0.3.RELEASE

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

SpringCloud:Finchley.RELEASE

<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>

K8S集群版本情况:

NAME           STATUS   ROLES    AGE   VERSION
k8s-master-1   Ready    master   53d   v1.11.0
k8s-node-1     Ready    <none>   53d   v1.11.0
k8s-node-2     Ready    <none>   53d   v1.11.0

迁移过程:

1.去除服务注册与发现组件Eureka的引用

k8s由于SERVICE的机制,可以很方便的实现服务发现与负载均衡,在K8S集群中就不再需要eureka做服务发现了。
直接移除掉eureka的maven包即可

<!--eureka client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

2.修改FeignClient

原先由于eureka的存在,我们在feignClient中可以直接根据服务名来调用服务,现在需要配置服务的URL
如下所示

@FeignClient(name = "user-service",url = "${URL.USER_SERVICE}")

我这里的url配置在了环境变量里,根据服务环境动态读取,之所以这么做的原因后面会介绍。

3.配置中心改造

K8S配置中心可以通过ConfigMap实现。但是我这边由于特殊原因,依然采用SpringCloud 的原生组件Config作为配置中心,但是相应的配置需要修改。

如下是每个微服务的bootstrap.yml的内容

spring:
  application:
    name: user-service
  cloud:
    config:
      fail-fast: true
      retry:
        max-attempts: 10
        max-interval: 10000
        initial-interval: 1000
      profile: ${SPRING_CLOUD_CONFIG_PROFILE:local}
      username: "admin"
      password: "123"
      uri: ${SPRING_CLOUD_CONFIG_URI:http://admin:123@localhost:8888}

可以看到配置中心地址与profile都是采用了环境变量的方式读取的。

下面改造配置中心

原先的数据库,redis,rabbitMQ这些配置我们可以不用修改

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐