5.2.2升级至5.3.1文档

如果您还未安装 Rainbond 历史版本,请直接参考 快速安装

版本变更

5.3.1 版本变更

控制台升级

从 v5.2.2-release 升级到 v5.3.1-release ,需要对控制台和集群端分别进行升级。当前章节部分,描述控制台升级步骤。全过程提供视频教程,详见文章末尾。

数据库备份

在控制台升级之前,需要先对控制台所使用的数据库进行备份与升级。操作默认需要进入 rbd-db-0 数据库容器环境操作,如果你的 Rainbond 对接了外部的数据库,那么请酌情备份与升级(sql)。

  • 备份
  1. # 登录 rbd-db-0 进行数据备份,对象为 console region 库
  2. kubectl exec -ti rbd-db-0 -n rbd-system -- bash
  3. mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --databases console > /var/lib/mysql/console.sql
  4. mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --databases region > /var/lib/mysql/region.sql
  5. # 备份文件默认位于主节点的如下位置,如果你的集群没有使用默认的 nfs 共享存储,那么需要手动寻找 rbd-db 的持久化路径
  6. ls /opt/rainbond/data/db*/mysql/*.sql
  • 升级 console 库
  1. # 登录 rbd-db-0 进行操作
  2. kubectl exec -ti rbd-db-0 -n rbd-system -- bash
  3. curl https://grstatic.oss-cn-shanghai.aliyuncs.com/docs/5.3/upgrade/5.2.2-5.3.0.sql -o /5.2.2-5.3.0.sql
  4. curl https://grstatic.oss-cn-shanghai.aliyuncs.com/docs/5.3/upgrade/5.3.0-5.3.1.sql -o /5.3.0-5.3.1.sql
  5. mysql -uroot -p${MYSQL_ROOT_PASSWORD} -Dconsole -e 'source /5.2.2-5.3.0.sql'
  6. mysql -uroot -p${MYSQL_ROOT_PASSWORD} -Dconsole -e 'sourcne /5.3.0-5.3.1.sql'

更新 5.2.2 控制台

  1. kubectl apply -f https://grstatic.oss-cn-shanghai.aliyuncs.com/docs/5.3/upgrade/rbd-app-ui-5.2.2.1-rbdcomponent.yaml

确认 rbd-app-ui 的状态:

  1. kubectl get po -l name=rbd-app-ui -n rbd-system
  2. NAME READY STATUS RESTARTS AGE
  3. rbd-app-ui-7c6877cc9f-ph5pc 1/1 Running 0 90s

安装新版本控制台

  • 从开源应用商店安装应用 Rainbond-开源
  • 将集群原来使用的 console 数据库以第三方组件的形式注册到部署好的 Rainbond-开源 应用内,静态注册地址填写: rbd-db-rw.rbd-system:3306,添加连接信息所需环境变量,取代 Rainbond-开源 中的 Mysql5.7 数据库。数据库如果你的 Rainbond 对接了外部的数据库,那么请直接为依赖数据库的 Rainbond-控制台集群安装驱动服务 添加对应的环境变量。替换数据库完成后,更新上述的两个服务组件。具体添加的环境变量见下表:
连接信息环境变量名环境变量值
DB_TYPEmysql
MYSQL_DBconsole
MYSQL_USERroot
MYSQL_PASS<查询 rbd-db-0 容器中 ${MYSQL_ROOT_PASSWORD} 值>
  • 将集群 API 地址修改为网关 IP ,如果你的集群有多个网关,请填写 VIP 或负载均衡地址。

    修改 API 地址

处理原控制台

原控制台指安装时默认在 rbd-system 命名空间中创建的 rbd-app-ui-xxxxxxxxx-xxxx pod,以及维护这些 pod 所涉及的 rbdcomponents 、 deployment 等资源。由于涉及新老资源交替的问题,处理原控制台的操作步骤,强烈建议在后续的集群端升级操作后进行。

通过编辑 Rainbond 自定义的 rbdcomponents 资源, 可以为原控制台进行以下配置来完成升级动作:

  • 镜像地址使用 registry.cn-hangzhou.aliyuncs.com/goodrain/rainbond:v5.3.1-release-allinone
  • 添加环境变量DB_TYPE=mysql
  • 添加新的 pvc 挂载

所有的改动,都在 spec 段落中进行:

  1. kubectl edit rbdcomponents.rainbond.io rbd-app-ui -n rbd-system
  2. spec:
  3. env:
  4. - name: DB_TYPE
  5. value: mysql
  6. volumeMounts:
  7. - mountPath: /root/.ssh
  8. name: app
  9. subPath: ssh
  10. image: registry.cn-hangzhou.aliyuncs.com/goodrain/rainbond:v5.3.1-release-allinone
  11. imagePullPolicy: IfNotPresent
  12. priorityComponent: false
  13. replicas: 1
  14. resources: {}

在集群中安装了 Rainbond-开源 控制台后,原控制台可以作为运维后门存在,只在 Rainbond-开源 故障无法访问时开启,平时,可以将 replicas 置为 0 ,来关闭 pod ,实现节省资源的目的。

集群端升级

从 v5.2.2-release 升级到 v5.3.1-release ,需要对控制台和集群端分别进行升级。当前章节部分,描述集群端升级步骤。全过程提供视频教程,详见文章末尾。

更新 Rainbond CRD 资源

  1. # 加载 CRD 配置文件
  2. kubectl apply -f https://grstatic.oss-cn-shanghai.aliyuncs.com/docs/5.3/upgrade/monitoring.coreos.com_servicemonitors.yaml

更新 rainbond-operator 组件

  1. # 删除旧的 rainbond-operator statefulset
  2. kubectl delete sts rainbond-operator -n rbd-system
  3. # 创建新的 rainbond-operator deployment
  4. kubectl apply -f https://grstatic.oss-cn-shanghai.aliyuncs.com/docs/5.3/upgrade/rainbond-operator-deployment-v2.0.1.yaml

更新构建私服组件

  1. # 删除 rbd-repo 的 rbdcomponent
  2. kubectl delete rbdcomponents.rainbond.io rbd-repo -n rbd-system
  3. # 创建新组件 rbd-resource-proxy
  4. kubectl apply -f https://grstatic.oss-cn-shanghai.aliyuncs.com/docs/5.3/upgrade/rbd-resource-proxy-rbdcomponent-v5.3.1-release.yaml

更新 grctl 命令

  1. docker run -it --rm -v /:/rootfs registry.cn-hangzhou.aliyuncs.com/goodrain/rbd-grctl:v5.3.1-release copy
  1. mv /usr/local/bin/rainbond-grctl /usr/local/bin/grctl && grctl install

执行升级命令

  1. grctl cluster upgrade --new-version=v5.3.1-release

更新其他功能性镜像

  1. # 登录
  2. function Login_registry(){
  3. inner_registry=$(kubectl get rainbondcluster -n rbd-system -o yaml | grep -v 'f:domain' | grep domain | awk '{print $2}')
  4. registry_user=$(kubectl get rainbondcluster -n rbd-system -o yaml | grep -v 'f:username' | grep username | awk '{print $2}')
  5. registry_pass=$(kubectl get rainbondcluster -n rbd-system -o yaml | grep -v 'f:password' | grep password | awk '{print $2}')
  6. docker login --username ${registry_user} --password ${registry_pass} ${inner_registry}
  7. }
  8. # 拉镜像并替换、推送
  9. function Other_images(){
  10. from_registory=registry.cn-hangzhou.aliyuncs.com/goodrain
  11. to_registory=goodrain.me
  12. for image in builder runner rbd-init-probe rbd-mesh-data-panel
  13. do
  14. docker pull $from_registory/$image:v5.3.1-release
  15. docker tag $from_registory/$image:v5.3.1-release $to_registory/$image
  16. docker push $to_registory/$image
  17. done
  18. }
  19. # 开始更新
  20. Login_registry && Other_images

创建 Maven 源码构建默认配置(可选)

该步骤用于创建一份默认的 java maven 源码构建所需要使用的 settings.xml 配置,多数场景下用于声明企业内部私服地址、用户名、密码等信息。当你不需要自定义时,Rainbond 会默认生成阿里云私服地址。故而该步骤可选。

  1. grctl build maven-setting add --file <用户自定义 settings.xml 文件的绝对路径>

重新构建插件

进入插件管理页面,在 出口网络治理插件服务综合网络治理插件 各自的管理页面中点击构建,使之更新。对于已安装了上述插件的服务组件,构建插件后需要重新安装插件使之生效。

重新构建插件

备份最新控制台

点击增加备份

升级验证

  • 观察总览页面中企业信息一栏中,平台版本是否为 v5.3.1-release
  • 观察集群页面中,已对接集群的平台版本是否为 v5.3.1-release
  • 检查集群中运行的 rbd-api rbd-chaos rbd-eventlog rbd-gateway rbd-monitor rbd-mq rbd-node rbd-webcli rbd-worker 服务,其使用镜像的 tag 是否为 v5.3.1-release
  • 尝试源码构建 java maven 项目,验证 rbd-resource-proxy 服务是否工作正常
  • 遵循 新特性 章节,逐一尝试新功能,验证是否工作正常

离线升级

目前 Rainbond v5.3.1-release 版本不提供离线升级包。然而升级过程中的所有资源,包括配置文件、镜像均可以离线化处理。用户可以自行将这些资源下载并本地化,导入到离线的 Rainbond v5.2.2-release 环境中进行升级操作。

需要注意的是:

  • 不必为离线环境安装 Rainbond-开源 控制台,参考文档处理原控制台即可
  • 要为控制台组件添加环境变量 DISABLE_DEFAULT_APP_MARKET = true。这一变量用来规避离线环境下,控制台对开源应用商店的频繁请求
  • 准备离线镜像时,不要遗漏 rainbond-operatorrbd-resource-proxy 所对应的镜像,镜像地址均定义在启动它们的 deployment.yaml 配置文件中

视频教程

好雨科技官方于 2021 年 3 月 11 日进行了线上直播,实操教学了 从 Rainbond 5.2.2-release 升级到 5.3.0-release 的全过程,并且提供回放,用户可以点击链接在线观看该视频。

该视频演示的是”从 Rainbond 5.2.2-release 升级到 5.3.0-release 的全过程”, 对于 5.2.2-release 升级到 5.3.1-release 仍然有参考意义.