spring-cloud-kubernetes 实战 二 configmap

简介:

Spring Cloud Config 相信大家都很熟悉,之前文章有介绍过 Spring-Cloud 实战 一 服务配置中心 config
本章主要介绍Spring-Cloud-Kubernetes 如何获取 kubernetes 中部署的 configmap 信息。
kubernetes 提供两种配置 configmap 和 secrets, configmap是普通配置文件,secrets 是密文主要保存一些敏感的信息比如密码之类的。


系列文章


环境

  • kubernetes 集群 基于centos7 搭建 1.14 kubernetes 集群
  • macos 10.13.6
  • Java:1.8.0_211
  • Maven:3.6.1
  • fabric8-maven-plugin插件:4.2.0
  • spring-cloud-kubernetes:1.0.0.RELEASE
  • spring-cloud: Greenwich.RELEASE
  • spring-boot: 2.1.6.RELEASE

不想写代码的关注

mscloud 代码比较多,本次只需要关注 spring-cloud-kubernetes 目录下的代码即可。
如果想学习 spring-cloud、kubernetes、istio 可以关注
github 地址

git clone https://github.com/xiliangMa/mscloud

在这里插入图片描述


开发代码

  • 添加依赖
  • 定义启动配置
  • 实现启动类
  • 实现confgmap controller
  • 通过 fabric8 部署到 kubernetes 集群
  • 测试
1. 添加依赖

主要添加 spring-cloud-starter-kubernetes-config、abric8 依赖

<?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">
    <parent>
        <artifactId>mscloud</artifactId>
        <groupId>com.examples.spcloud</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-cloud-kubernetes-reload</artifactId>

    <properties>
        <fabric8.maven.plugin.version>4.2.0</fabric8.maven.plugin.version>
    </properties>

    <dependencies>
        <!-- spring boot -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- spring-cloud-kubernetes -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-kubernetes-config</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- 通过fabric8 build-->
            <plugin>
                <groupId>io.fabric8</groupId>
                <artifactId>fabric8-maven-plugin</artifactId>
                <version>${fabric8.maven.plugin.version}</version>
                <executions>
                    <execution>
                        <id>fmp</id>
                        <goals>
                            <goal>resource</goal>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <enricher>
                        <config>
                            <fmp-controller>
                                <name>mscloud-spring-kubernetes-reload</name>
                            </fmp-controller>
                            <fmp-service>
                                <name>mscloud-spring-kubernetes-reload</name>
                                <type>NodePort</type>
                            </fmp-service>
                        </config>
                    </enricher>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
2.定义启动配置

这个比较简单,注意的是config部分, reload 是策略

spring:
  application:
    name: mscloud-reload-demo
  cloud:
    kubernetes:
      reload:
        enabled: true
        mode: polling
        period: 5000
      config:
        sources:
        # 指定configmap
        - name: ${spring.application.name}
        # 指定 命名空间 默认是default,如果指定其他的空间需要设置 权限
          namespce: default
3. 实现启动类

CloudKubernetesReloadApp.java 这个就是普通springboot 启动类

@SpringBootApplication
public class CloudKubernetesReloadApp {
    public static void main(String[] args) {
        SpringApplication.run(CloudKubernetesReloadApp.class, args);
    }
}
4. 实现confgmap controller

MyConfigMap.java 注意事项已经添加注释

// 这里需要注意的是  prefix = "config" 对应configmap 中定义的变量
@Configuration
@ConfigurationProperties(prefix = "config")
@RestController
public class MyConfigMap {

    private String message = "update your message...";

    public String getMessage() {
        return this.message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
  
  // 接口测试
    @GetMapping("/config")
    public String GetConfigMap(){
        return this.getMessage();
    }
}
4. 通过 fabric8 部署到 kubernetes 集群

部署前保证你的kubernetes 集群时正常的

mvn clean install fabric8:build fabric8:deploy

执行成功后查看 pod 和 service 信息:

pod 信息如下:
➜  mscloud git:(master) kubectl get pod
NAME                                                READY   STATUS    RESTARTS   AGE
mscloud-spring-kubernetes-reload-7bf7fd694b-9fkhv   1/1     Running   0          24m

service 信息如下:
➜  mscloud git:(master) kubectl get svc
NAME                               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes                         ClusterIP   10.96.0.1        <none>        443/TCP          16d
mscloud-spring-kubernetes-reload   NodePort    10.107.208.215   <none>        8080:31078/TCP   24m

注意svc 的类型是nodeport 所以测试时候需要用到31078端口,根据自己的定就可以。


5. 测试

看到截图的效果就已经成功了:
在这里插入图片描述

5.1 修改bootstrap.yml 切换成dev 模式 测试

spring:
  application:
    name: mscloud-reload-demo
  profiles:
    active: dev
  cloud:
    kubernetes:
      reload:
        enabled: true
        mode: polling
        period: 5000
      config:
        sources:
        # 指定configmap
        - name: ${spring.application.name}
        # 指定 命名空间 默认是default,如果指定其他的空间需要设置 权限
          namespce: default

删除已部署的deployment:

    kubectl delete deploy mscloud-spring-kubernetes-reload

注意:不要删除pod 否则他还会在自动出现、不理解的自己google下kubernetes deplyment 控制器。这个不用多说吧。。。

重新部署:

    mvn clean install fabric8:build fabric8:deploy

看到截图的效果就已经成功了:

在这里插入图片描述

5.1 修改bootstrap.yml prod 模式 测试

spring:
  application:
    name: mscloud-reload-demo
  profiles:
    active: prod
  cloud:
    kubernetes:
      reload:
        enabled: true
        mode: polling
        period: 5000
      config:
        sources:
        # 指定configmap
        - name: ${spring.application.name}
        # 指定 命名空间 默认是default,如果指定其他的空间需要设置 权限
          namespce: default

删除已部署的deployment:

    kubectl delete deploy mscloud-spring-kubernetes-reload

注意:不要删除pod 否则他还会在自动出现、不理解的自己google下kubernetes deplyment 控制器。这个不用多说吧。。。

重新部署:

    mvn clean install fabric8:build fabric8:deploy

看到截图的效果就已经成功了:
[外链图片转存失败(img-tfIz9WPa-1566443035167)在这里插入图片描述

看上上面的过程是不是看到问题了,每次切换模式还得重新部署是不是很。。。。。。。


总结

优点:

  • 使得configmap加载更像是加载srping-boot文件。

其实没有spring-cloud-kubernetes时,也可以通过env 模式获取configmap的信息。
好处实在是想不到了。。。。。。。。

缺点:

  • 不支持热加载很鸡肋。。。
  • 相比spring-cloud-config 阿波罗等 没感觉到有啥优势。

github 地址

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值