spring-cloud-kubernetes 实战 二 configmap

简介:

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


系列文章

  • spring-cloud-kubernetes 实战 一 服务发现
  • spring-cloud-kubernetes 实战 二 configmap

环境

  • 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

spring-cloud-kubernetes 实战 二 configmap_第1张图片


开发代码

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

1. 添加依赖

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



    
        mscloud
        com.examples.spcloud
        0.0.1-SNAPSHOT
    
    4.0.0

    spring-cloud-kubernetes-reload

    
        4.2.0
    

    
        
        
            org.springframework.boot
            spring-boot-autoconfigure
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.springframework.cloud
            spring-cloud-starter-kubernetes-config
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            repackage
                        
                    
                
            
            
            
                io.fabric8
                fabric8-maven-plugin
                ${fabric8.maven.plugin.version}
                
                    
                        fmp
                        
                            resource
                            build
                        
                    
                
                
                    
                        
                            
                                mscloud-spring-kubernetes-reload
                            
                            
                                mscloud-spring-kubernetes-reload
                                NodePort
                            
                        
                    
                
            
        
    

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                443/TCP          16d
mscloud-spring-kubernetes-reload   NodePort    10.107.208.215           8080:31078/TCP   24m

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


5. 测试

看到截图的效果就已经成功了:
spring-cloud-kubernetes 实战 二 configmap_第2张图片

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

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

spring-cloud-kubernetes 实战 二 configmap_第3张图片

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)spring-cloud-kubernetes 实战 二 configmap_第4张图片

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


总结

优点:

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

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

缺点:

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

github 地址

你可能感兴趣的:(Spring,Cloud,kubernetes)