本系列博文旨在通过实战一个我所在部门内部正在孵化的项目的第一阶段demo来帮助大家熟悉并初步掌握前后端分离项目的开发以及在k8s上的部署流程,其中涉及到前端react项目的开发流程、后端项目(分别用springboot和python开发)的开发流程、常用的中间件(mariadb集群、redis集群、kafka集群)在k8s中的搭建和使用、前后端项目在k8中的部署和运行、项目后续优化方向,以及最后会使用kubesphere中的devops来实现前后端项目的CI/CD。
下面是各节介绍,热切欢迎大家的批评和意见:
第一节 项目概述
第二节 前端react项目搭建
第三节 前端react项目部署到k8s环境中
第四节 前端项目部署总结以及问题解决
第五节 k8s环境下中间件搭建-mariadb集群
第六节 k8s环境下中间件搭建-redis集群以及使用
第七节 k8s环境下中间件搭建-kafka集群以及使用
第八节 后端项目搭建-springboot开发的部分服务
第九节 后端项目搭建-python开发的部分服务
第十节 后端项目部署到k8s环境中
第十一节 后端项目部署总结以及问题解决
第十二节 项目运行以及后续优化(helm打包, Istio应用尝试)
第十三节 使用kubesphere的devops将项目自动化
简单介绍一下我们这个项目-smartocr,就是针对terminal上的测试用例的自动化工具,大体的流程就是用户使用我们的GUI界面先行创建测试用例或者测试用例集合,每个测试用例需要详细填写需要执行的每一条命令以及该命令的期望结果(结果可以是key words或者是运行的结果图片),后续系统就会根据用户的需要随时运行这些测试用例并将结果与期望结果进行比对,将运行结果以图片或者文字的形式告知用户。其中涉及到OCR以及某些优化算法,因为与博文无关,因此不做过多介绍,下面是整个系统的框架图:
涉及到的业务层面的微服务有:
WebGUI-FE service: 主要提供了GUI界面供客户进行测试用例以及lab的增删查改,测试用例的运行以及实时结果查看。
WebGUI-BE service: 主要处理GUI界面传来的请求,并且负责与数据访问层的微服务(DBAccess service)以及测试用例执行层的微服务(Executor service)进行消息的通信,同时需要向redis和kafka中创建key并添加信息。
DBAccess service: 所有的需要访问mariaDB集群的微服务都将请求发送到该微服务。DBAccess微服务负责直接访问DB。
Executor service: 负责接收来自WebGUI-BE微服务的请求继而开始测试用例的具体执行,同时需要向redis和kafka中对应的key中添加执行信息。
Recognition service: OCR的识别模块单独拆出来作为Recognition service, 它负责识别图片并且返回识别结果,同时向redis和kafka中对应的key中添加识别信息。
涉及到的中间件层面的微服务有:
MariaDB service: MariaDB集群,存储测试用例以及其他信息。
Redis service: Redis集群,当前使用的是3+3的集群配置,负责存储测试用例的关键信息,方便前端取用。
Kafka service: Kafka集群,需要先期搭建zookeeper。负责存储测试用例运行的log信息。
Promethues service/Elk service: 当前系统中并未配置,先不予讨论,后续配置后再更新博文。
下面这张图罗列了核心微服务之间的交互流程:
另外,再介绍一下前后端涉及到的技术和框架以及k8s的环境,前端使用的是react, react router和whatwgfetch,后端大部分使用的是springboot(版本是2.5.4),其中微服务之间的消息通信使用了okhttp3,mysql的版本是5.7。笔者当前的kubernetes版本是1.19,集群环境是3台DL380 G6, 1 master node + 2 worker node,后续的所有部署包括nfs和kubesphere的安装都是在这套k8s集群中。
本节的最后,笔者要特别感谢下面链接的作者,后续要介绍的中间件的搭建很大程度上借鉴了这些作者的步骤,再次表示衷心的感谢:
(4条消息) 在K8s上部署Redis 集群_朱溪江的博客-CSDN博客_k8s redis集群
在k8s中部署redis cluster实战 - 简书 (jianshu.com)