springcloud集成k8s的configmap做配置中心
目录
目录
1、关于kubenetes configMap 介绍
- configMap是kubernetes提供的基本服务之一,创建一个configmap资源,对应着一份配置文件,可以将该资源通过数据卷的形式映射到Pod上,这样Pod就能用上这个配置文件了。
2、spring-cloud-starter-kubernetes-config
- spring-cloud-starter-kubernetes-config是spring-cloud-starter-kubernetes框架下的一个库,作用是将kubernetes的configmap与SpringCloud Config结合起来,通过spring-cloud-starter-kubernetes-config,我们的应用就像在通过SpringCloud Config取得配置信息,只不过这里的配置信息来自kubernetes的configmap
3、创建springboot应用
-
引入kubenetes-config组件,可以达到实时同步configmap变更的效果
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-kubernetes-config</artifactId> <version>1.0.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator-autoconfigure</artifactId> </dependency>
-
编写配置文件
项目的src\main\resources路径下不要创建application.yml文件,只创建名为bootstrap.yml的文件,内容如下:management: endpoint: restart: enabled: true health: enabled: true info: enabled: true spring: application: name: springcloudk8sconfigmapdemo profiles: active: development cloud: kubernetes: reload: #自动更新配置的开关设置为打开 enabled: true #更新配置信息的模式是主动拉取 mode: polling #主动拉取的间隔时间是500毫秒 period: 500 config: sources: - name: ${spring.application.name} namespace: springcloudk8sconfigmapdemo
-
配置项spring.cloud.kubernetes.reload和spring.cloud.kubernetes.config,前者用于开启自动更新配置,执行更新模式为500毫秒拉取一次,后者指定配置来源于kubernetes的哪个namespace下的哪个configmap;
- boostrap.yml 和 application.yml 区别:
- bootstrap.yml文件也是Spring Boot的默认配置文件,而且其加载的时间相比于application.yml更早。
- application.yml和bootstrap.yml虽然都是Spring Boot的默认配置文件,但是定位却不相同。
- bootstrap.yml可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。
- application.yml可以用来定义应用级别的参数,如果搭配 spring cloud config 使用,application.yml里面定义的文件可以实现动态替换。
- 总结就是:bootstrap.yml文件相当于项目启动时的引导文件,内容相对固定。application.yml文件是微服务的一些常规配置参数,变化比较频繁。
- boostrap.yml 和 application.yml 区别:
-
配置类DummyConfig.java,注解ConfigurationProperties的prefix="greeting"表示该类用到的配置项都是名为"greeting"的配置项的子内容 :
@Configuration @ConfigurationProperties(prefix = "greeting") public class DummyConfig { private String message = "This is a dummy message"; public String getMessage() { return this.message; } public void setMessage(String message) { this.message = message; } }
-
启动类Springcloudk8sconfigmapdemoApplication.java,简单起见,将用于验证配置项是否生效的web接口也写在了这里面,即hello方法 ,这个方法是应用的关键,方法内会返回配置文件的值,我们的应用能否成功取得k8s的configmap的配置文件,通过此方法的返回值就能验证了,还要增加path为/health的方法,因为在k8s部署时健康探针和就绪探针会调用此接口,如果没有响应pod就无法正常使用:
@SpringBootApplication @RestController @EnableConfigurationProperties(DummyConfig.class) public class Springcloudk8sconfigmapdemoApplication { @Autowired private DummyConfig dummyConfig; @GetMapping("/health") public String health() { return "success"; } @GetMapping("/hello") public String hello() { return dummyConfig.getMessage() + " [" + new SimpleDateFormat().format(new Date()) + "]"; } public static void main(String[] args) { SpringApplication.run(Springcloudk8sconfigmapdemoApplication.class, args); } }
以上就是实战工程的所有代码了,仅仅只是引入了少量jar依赖,以及在启动配置文件中指定了configmap的信息和同步模式,即完成了获取配置文件的所有操作,至于代码中用到配置文件的地方,和使用SpringCloud Config并无差别。
4、在k8s中创建ConfigMap
-
在kubernetes环境新建名为springcloudk8sconfigmapdemo.yml的文件,内容如下:
kind: ConfigMap apiVersion: v1 metadata: name: springcloudk8sconfigmapdemo data: application.yml: |- greeting: message: Say Hello to the World farewell: message: Say Goodbye --- spring: profiles: development greeting: message: Say Hello to the Developers farewell: message: Say Goodbye to the Developers --- spring: profiles: production greeting: message: Say Hello to the Ops
-
在springcloudk8sconfigmapdemo.yml文件所在目录执行以下命令:
kubectl apply -f springcloudk8sconfigmapdemo.yml
-
部署后验证:
-
查询 pod名称
kubectl -n spring-cloud-k8s-demo get pods
-
进入容器
kubectl -n spring-cloud-k8s-demo exec -it spring-cloud-k8s-discovery-demo-deployment-8499cbdfc-ddsvs -c spring-cloud-k8s-discovery-demo -- sh
-
在容器内调用接口
# curl http://localhost:8089/health /app # curl http://localhost:8089/health success # curl http://localhost:8089/hello /app # curl http://localhost:8089/hello Say Hello to the Developers [5/10/22 6:17 PM]
-
验证configMap优先级
-
在resources下创建 application-development.yml文件内容如下:
greeting: message: application-developers farewell: message: Say Goodbye to the Developers
-
bootstrap.yml 指定 development
profiles: active: development
-
查看k8s configMap
root@localhost:~/data/spring-cloud-k8s-feign-demo$ kubectl -n spring-cloud-k8s-demo describe configmap spring-cloud-k8s-configmap Name: spring-cloud-k8s-configmap-demo Namespace: spring-cloud-k8s-demo Labels: <none> Annotations: <none> Data ==== application.yml: ---- greeting: message: success!!!! farewell: message: Say Goodbye --- spring: profiles: development greeting: message: Say Hello to the Developers farewell: message: Say Goodbye to the Developers --- spring: profiles: production greeting: message: Say Hello to the Ops BinaryData ==== Events: <none> root@localhost:~/data/spring-cloud-k8s-feign-demo$
-
部署项目成功后进入容器验证:
/app # curl http://localhost:8081/hello Say Hello to the Developers [5/11/22 7:33 PM]/app #
-
以上k8s集成configMap结束~
更多推荐
所有评论(0)