【安装部署】MeterSphere v2.10.x-lts 升级指南(K8s 部署方式)


飞致云 发布于 2023-08-07 / 656 阅读 / 0 评论 /

MeterSphere 1.20 LTS 版本自 2022 年4月份发布至今,已经维护了20多个小版本。同时,主线版本也更新到了2.10,实现了很多新功能和优化,并在 2023 年 5 月 25 号正式发布了 2.10 LTS 版本。本文简要说明新版本架构上的差异以及使用 MeterSphere官方提供的的 helm-chart 进行升级。

1 版本变更说明

1.1 架构说明

与 1.20 LTS 相比,2.10 LTS 使用了微服务架构,按功能模块拆分成了多个微服务,正式从单体应用架构升级至微服务架构。相较之前单体应用架构的各种弊端如:单个服务故障会导致整体服务不可用、系统启动慢、无法满足用户按需配置、服务组件水平扩展难和工程代码难以维护等问题。微服务架构将各个模块的功能应用拆分为不同的组件,便于快速构建、扩展及维护。

1.2 组件说明

● GateWay:API 网关;

● Eureka:服务注册中心;

● 工作台:MeterSphere 项目的工作台模块;

● 项目设置:MeterSphere 项目的项目设置模块;

● 测试跟踪:MeterSphere 项目的测试跟踪模块;

● 接口测试:MeterSphere 项目的接口测试模块;

● UI 测试:MeterSphere 项目的UI 测试模块;

● 性能测试:MeterSphere 项目的性能测试模块

● 系统设置:MeterSphere 项目的系统设置模块;

● 报告统计:MeterSphere 项目的报告统计模块;

● Node Controller:为接口或者性能测试提供独立节点类型的测试资源池;

● MySQL:MeterSphere 项目的主要数据均存储在 MySQL;

● Redis:MeterSphere 项目登录用户的 Session 和任务队列信息存储在 Redis;

● Minio:MeterSphere 项目的分布式对象存储模块;

● Kafka:接收 JMeter 产生的接口测试或者性能测试的结果数据;

● Prometheus:收集压力机及被测系统的监控数据;

● Data Streaming:从 Kafka 中获取接口测试或者性能测试结果数据进行处理后存入 MySQL 数据库;

● Selenium Grid:为 UI自动化测试提供运行环境,支持分布式拓展;

2 升级数据备份

2.1 关闭定时任务

如果之前的定时任务没有关闭,那么在升级过程中,定时任务产生的数据与新版本的数据结构不兼容,将可能导致升级失败,所以在升级前需要手动关闭所有定时任务。如:测试计划定时任务,在页面勾选所有测试计划,批量关闭定时任务;其他测试模块定时任务操作同理。如果定时任务较多,可以通过修改数据库字段批量关闭。

# 连接到数据库关闭定时任务
kubectl exec -it mysql-0 sh -n ms

#关闭定时任务
mysql -uroot -pPassword123@mysql
use metersphere;
update schedule set enable=0;
exit;

2.2 备份数据库数据

进入mysql pod 备份数据库sql文件

kubectl exec -it mysql-0 sh -n ms
#备份数据
kubectl exec -it mysql-0 sh -n ms 
mysqldump -uroot -pPassword123@mysql metersphere > /var/lib/mysql/metersphere.sql 
exit;

#保存到本地目录
kubectl cp -n ms mysql-0:/var/lib/mysql/metersphere.sql   ./tmp/metersphere.sql

2.3 NFS 挂载目录备份

metesphere 相关 jar 包、上传的测试文件等数据存储在nfs,升级前需要同步备份。

# 备份整个nfs挂载目录到tmp目录
cd  /    #此处为实际 nfs 路径
cp -r nfs_storage/ /tmp cd /tmp
tar -zcvf metersphere-v1.20.xlts-backup.tar.gz  nfs_storage/

3 升级MeterSphere应用

3.1 下载安装包

将 MeterSphere 安装包中的镜像全部加载到系统中,或导入到harbor中,本次演示环境没有配置harbor,直接导入到两个k8s节点中,每个节点都要加载所有镜像:

cd /metersphere-offline-installer-v2.10.1-lts/images

for i in `ls` images; do docker load < $i; done

3.2 下载v2.10.1-lts helm离线包

下载到tmp目录:https://github.com/metersphere/helm-chart/releases

3.3 升级MS应用

3.3.1 修改 pvc 挂载权限 并开启ui测试

原1.20的 pvc 挂载权限为 ReadWriteOnce,升级过程会出现如下图报错,两个版本 pvc 挂载权限不一致导致无法升级。因此需要针对权限修改为 accessModes: ReadWriteOnce,如果无该报错则无需修改。

创建修改helm配置文件 ,vi  upgrade-values.yaml 

dataPersistence:
  accessModes: ReadWriteOnce
uiTest:
  enabled: ture

3.3.2  helm upgrade 升级

# 升级部署
helm upgrade metersphere /tmp/metersphere-2.10.1-lts.tgz -n ms -f upgrade-values.yaml

# 等待服务升级
kubectl get pods -n ms  #查看POD部署状态,所有状态都为 Running 即可访问。

3.4 创建nodePort端口映射

创建nodePort 端口映射规则,将 gateway 服务端口映射为nodePort :30801

vi ms-server-nodeport.yaml

#文件内容为:
apiVersion: v1
kind: Service
metadata:
  name: metersphere-server-nodeport
  namespace: ms426
spec:
  type: NodePort
  selector:
    app: metersphere-gateway
  ports:
    - name: metersphere-gateway
      port: 8000
      targetPort: 8000
      nodePort: 30801

拉起pod

kubectl create -f ms-server-nodeport.yaml

3.5 访问MS

nodePort 端口映射创建完成,就可以通过映射端口访问(http://nodeIP:30801 )MS服务了。

3.6 配置 UI 测试(企业版 Xpack)

UI测试所需Selenium Hub部署,同样采用Helm Chart部署方式。具体部署方式如下:

# 创建Namespace
kubectl create namespace selenium-grid
 
# 添加Helm仓库
helm repo add docker-selenium https://www.selenium.dev/docker-selenium
 
# 更新
helm repo update
 
# 查询Selenium Grid的版本
helm search repo docker-selenium --versions
 
# 安装最新版本Selenium Grid
helm install selenium-grid docker-selenium/selenium-grid -n selenium-grid
 
# 安装完成后服务完全启动
kubectl get pod -n selenium-grid
 
# helm默认部署的node会话session 默认值为1,可以修改添加并发参数:此处改为30
helm upgrade --set SE_NODE_MAX_SESSIONS=30,SE_NODE_OVERRIDE_MAX_SESSIONS=true selenium-grid docker-selenium/selenium-grid -n selenium-grid

如上图部署完成后返回的地址,可在 metersphere 服务配置 ui 测试使用selenium-grid:http://selenium-hub.selenium-grid.svc:4444

3.7 升级后恢复定时任务

页面上的操作,同关闭定时任务操作: 需要将每个模块的定时任务开启。也可以通过连接数据库的方式批量恢复:

# 登录MySQL(以默认部署的MySQL为例)
kubectl exec -it mysql-0 sh -n ms
mysql -uroot -pPassword123@mysql
 
#开启定时任务
use metersphere;
update schedule set enable=1;
 
注意:开启定时任务后,需要检查页面上开关是否同步开启,若没有开启可手动开启

4 升级常见问题

(1)pod 一直处于 Init 状态,无法正常运行。

可以 descirbe pod 查看具体报错信息,做对应调整:

kubectl describe pod  metersphere-api-test-5cdc7f75df-662s8 

目前遇到问题一般为 kafka 端口变更导致服务连不上 kafka 一直再初始化中。处理办法:重启kafka及对应启动失败pod 。

kubectl rollout restart -n ms  deploy metersphere-kafka
kubectl rollout restart -n ms  deploy metersphere-api-test 


是否对你有帮助?