腾讯云及Rancher上微服务容器部署时配置与应用解耦方案

2022-01-13  本文已影响0人  文景大大

以前在管理项目的配置文件时,通常一个项目下会维护多个环境下的配置,比如:

然后通过配置spring.profile.active来指定哪个环境的配置文件生效。这种方式存在以下缺点:

因此,我们需要使用k8s容器环境下的配置文件管理的方式来解决以上的这些问题。

一、本地配置管理

本地的配置文件只保留一个bootstrap.yml,且里面只有应用基本信息、注册中心和配置中心的信息(这里推荐使用Nacos),其它的配置信息全部保存到远端的配置中心里面。

# 应用基本信息配置
server:
  port: 8080

# Spring应用基本信息配置
spring: 
  application:
    # 应用名称
    name: myapp
  profiles:
    # 环境配置,对nacos上的配置文件有效,比如对应myapp-dev.yaml中的dev,非必须
    active: dev
  main:
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: ***
        # 命名空间的ID
        namespace: aaa
        # group来区分开发、测试及生产环境
        group: dev
      config:
        # 配置中心地址
        server-addr: ***
        # 命名空间的ID
        namespace: aaa
        # group来区分开发、测试及生产环境
        group: dev
        # 配置文件格式
        file-extension: yaml

该配置文件仅在开发环境生效,供开发人员进行开发联调时使用,测试及生产环境都不需要该配置文件,因此需要在maven打包时将该文件排除在外。

<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${maven-plugin.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>${maven-jar-plugin.version}</version>
            <configuration>
                <excludes>
                    <!-- 相对于打包后的class路径 -->
                    <!-- 排除开发环境的配置文件,nacos的配置存在pod的configmap中,其它配置存在nacos中 -->
                    <exclude>**/bootstrap.yml</exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

二、使用配置中心

nacos集成了注册中心和配置中心的功能,首先需要为项目创建一个命名空间,一个命名空间对应一个项目,这里使用如上bootstrap.yml中的aaa

关于注册中心,本地项目启动后,会自动注册到nacos的aaa命名空间下的dev分组中;

关于配置中心,我们需要先自行创建,命名规则为{spring.application.name}-{spring.profiles.active}.{spring.cloud.nacos.config.file-extension},对应上面的bootstrap.yml中的内容就是myapp-dev.yaml,再加上我们配置的分组是dev,所以项目启动后,就会去nacos上的aaa命名空间下dev分组中找myapp-dev.yaml进行加载。

三、容器配置管理

如上是开发环境的配置文件管理方式,测试和生产环境我们就需要使用K8s中的configmap来代替本地的bootstrap.yml,实现jar包中没有应用配置文件的目标。

3.1 Rancher环境的操作

3.2 腾讯云环境的操作

上一篇 下一篇

猜你喜欢

热点阅读