云诞生的概念越来越受到人们的欢迎。作为典型的技术之一,微服务架构在过去被认为是一把双刃剑,在带来一定收益的同时,也对服务团队提出了很多技术要求。然而,随着开源技术的不断发展,越来越多优秀的技术和工具涌现出来,使得云不再难以本土落地。为此,博云研究院将不定期总结整理云诞生开发、测试、运营维护的最佳实践,借助博云和开源社区的共同力量,帮助客户开启更加规范简化的云诞生之路。
背景基于Spring Boot框架开发微服务,并将其部署在Kubernetes集群中,是很多企业实施微服务的技术选择。在微服务架构下,开发人员主要关注由他们的服务团队维护的微服务。通常,这些微服务依赖于其他团队开发的微服务,也依赖于另一组微服务。
在微服务开发过程中,传统的做法是通过单元测试对代码进行验证,尽早发现问题,在相关服务开发基本完成后部署到Kubernetes集群进行联合调试。这样,一方面,开发人员花费大量的时间设计测试用例,编写测试代码,为每个依赖的服务进行堆砌;另一方面,由于集成时间较晚,集成测试过程中可能会爆发大量接口不一致导致的问题,造成人力物力的浪费。
如果尽早将服务部署到Kubernetes测试环境进行联合调试测试,可以提前发现问题。由于部署过程在开发过程中需要反复执行,很多企业都搭建了CICD工具,常见的流程是:提交代码->詹金斯拉源代码->马文编译-> Docker镜像构建->部署->测试。虽然这个过程可以自动完成,但是每次调试都需要经过这一步,耗时长,效率低。同时,Kubernetes集群中的微服务的特点是微服务可以在集群中相互访问,没有很好的方法获取集群内部和集群外部的功能,比如读取和写入数据库中的数据。因此,很难观察到服务的运行结果,不能像单个应用程序那样提供本地单步调试体验。
确认端口8080和5005在本地打开。
# netstat -na | grep -E "5005|8080"tcp6 0 0 ::1.5005 *.* LISTENtcp4 0 0 *.5005 *.* LISTENtcp6 0 0 ::1.8080 *.* LISTENtcp4 0 0 *.8080 *.* LISTEN通过端口8080直接访问本地演示后端服务。
# curl localhost:8080Hello from demo-backend-c9df931b5c83411aad5a329ec9ecbcbb-5b4fdd7b-wzz9r通过Kubernetes公开的节点端口访问应用程序,我们可以看到对演示后端的请求已经被转发到本地运行的docker。
# curl http://10.20.1.71:30001Message from backend is: Hello from demo-backend-80d454f85d8b43118f5740d9f25260ba-854fcd9fbd-lzkb75.通过IDE进行代码开发和单步调试
启动IDEA,在上面的源代码路径打开项目。
配置远程调试并连接本地5005端口。
设置断点,访问应用,可以在IDEA中进行单步调试。
修改代码并保存,然后单击“构建”->“构建项目”.
在演示后端项目的pom文件中,配置了devtools的依赖关系。
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency></dependencies>并且当IntelliJ IDEA重建后,这个目录下的文件demo-后端/目标/类都会更新。当应用程序由mvn spring-boot:run启动时,Devtools监控的类路径,也就是上面的目录,当目录中的文件发生变化时,将开始重启并执行新的代码。
. ____ _ __ _ _/ / ___'_ __ _ _(_)_ __ __ _ ( ( )___ | '_ | '_| | '_ / _` | / ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |___, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v2.1.3.RELEASE)11:17:44.328 [restartedMain] INFO c.b.s.c.k.b.KubernetesBackendApplication - Starting KubernetesBackendApplication on Waret with PID 58351 (/Users/Waret87/WorkSpace/telepresence/spring-cloud-kubernetes/demo-backend/target/classes started by Waret87 in /Users/Waret87/WorkSpace/telepresence/spring-cloud-kubernetes/demo-backend)11:17:44.331 [restartedMain] INFO c.b.s.c.k.b.KubernetesBackendApplication - No active profile set, falling back to default profiles: default...11:17:45.931 [restartedMain] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 8080 (http) with context path ''11:17:45.934 [restartedMain] INFO c.b.s.c.k.b.KubernetesBackendApplication - Started KubernetesBackendApplication in 1.873 seconds (JVM running for 2.282)11:20:35.483 [Thread-6] INFO o.s.s.c.ThreadPoolTaskExecutor - Shutting down ExecutorService 'applicationTaskExecutor'. ____ _ __ _ _/ / ___'_ __ _ _(_)_ __ __ _ ( ( )___ | '_ | '_| | '_ / _` | / ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |___, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v2.1.3.RELEASE)11:20:36.838 [restartedMain] INFO c.b.s.c.k.b.KubernetesBackendApplication - Starting KubernetesBackendApplication on Waret with PID 58351 (/Users/Waret87/WorkSpace/telepresence/spring-cloud-kubernetes/demo-backend/target/classes started by Waret87in /Users/Waret87/WorkSpace/telepresence/spring-cloud-kubernetes/demo-backend)11:20:36.838 [restartedMain] INFO c.b.s.c.k.b.KubernetesBackendApplication - No active profile set, falling back to default profiles: default...11:20:37.272 [restartedMain] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 8080 (http) with context path ''11:20:37.272 [restartedMain] INFO c.b.s.c.k.b.KubernetesBackendApplication - Started KubernetesBackendApplicationin 0.467 seconds (JVM runningfor 173.62)当您再次访问该服务时,您可以看到新代码已经生效。
# curl http://10.20.1.71:30001Message from backend is: Hello World from demo-backend-c9df931b5c83411aad5a329ec9ecbcbb-5b4fdd7b-wzz9r总结通过以上实践可以看出,网真项目解决了开发、测试和部署之间的衔接问题,是对Kubernetes生态环境的很好补充。该项目已捐赠给CNCF基金会,社区文件比较齐全。有关更详细的原理和用法,请参考文档。
本文由博云研究院原创发表,转载请注明出处。1.《telepresence Telepresence:让微服务本地开发不再难》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《telepresence Telepresence:让微服务本地开发不再难》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/jiaoyu/1290049.html