一文了解如何源码编译Rainbond基础组件

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 一文了解如何源码编译Rainbond基础组件

Rainbond 主要由以下三个项目组成,参考官网详细 技术架构

1.png

业务端

Rainbond-UI 和 Rainbond-Console 合起来构成了业务层。业务层是前后端分离模式。UI是业务层的前端代码,Console是业务层的后端代码。

Rainbond-UI   https://github.com/goodrain/rainbond-ui

Rainbond-Console   https://github.com/goodrain/rainbond-console

集群端

Rainbond 是平台集群端的实现,主要与 Kubernetes 集群进行交互。

Rainbond  https://github.com/goodrain/rainbond

编译项目

注意:需要安装 docker 环境

业务层源码编译

编译前端Rainbond-UI镜像


  1. 首先将 Rainbond-UI 项目克隆到本地

git clone https://github.com/goodrain/rainbond-ui.git


  1. 使用项目根目录下的 build.sh 脚本构建镜像:

VERSION=v5.5.0-release ./build.sh

VERSION 指定构建完镜像的 tag,前端打包出的镜像将作为后端代码的基础镜像。


编译后端Rainbond-console镜像

  1. 首先将 Rainbond-console 项目克隆到本地

git clone https://github.com/goodrain/rainbond-console.git


  1. 使用项目根目录下的 release.sh 脚本构建镜像:

VERSION=v5.5.0-release ./release.sh allinone


VERSION 指定构建完镜像的 tag,由于前端代码的镜像为基础镜像,因此该处应与前端项目的 tag 保持一致。请使用如下命令将前后端代码编译在一起,形成最终可直接运行的 allinone 镜像。


运行业务层镜像

当编译完成 allinone 镜像后,你可以参考如下命令,将最后一行的镜像名替换为你打包的镜像名后,运行该镜像。


docker run -d -p 7070:7070 \

--name=rainbond-allinone --restart=always \

-v ~/.ssh:/root/.ssh \

-v ~/rainbonddata:/app/data \

rainbond/rainbond:v5.5.0-release-allinone


镜像运行起来后,访问机器的 7070 端口,即可进入 Rainbond 控制台。


集群端源码编译

集群端是部署在 Kubernetes 集群上的,同时组件比较多,因此可以根据需要编译单个组件。

单个组件编译

单组件编译在实际开发过程中⾮常重要,通常我们在二次开发过程中修改了某个组件后,可以单独编译某个组件并使⽤最新的组件镜像在已安装的开发测试环境中直接替换镜像。


  1. 首先将 Rainbond 项目克隆到本地

git clone https://github.com/goodrain/rainbond.git


  1. 使用项目根目录下的 release.sh 脚本构建镜像,以 chaos 组件为例,在 rainbond 代码主目录下执行

./release.sh chaos


单组件编译支持以下组件:

rbd-chaos

chaos 组件对应 Rainbond 应用构建服务,主要处理 CI 过程,将输入源包括 源代码Docker镜像应用市场应用 进行解析、编译、打包,最终生成 应用(组件)的版本介质。

rbd-api

api 组件对应 Rainbond 数据中心 API 服务,API 服务作为数据中心级抽象的核心控制服务,对外提供 Restful 风格的 API 服务,是数据中心控制请求的唯一入口。

rbd-gateway

gateway 组件对应 Rainbond 应用网关服务,应用网关是外部流量进入 Rainbond 租户内部组件的唯一入口, 提供 HTTP, HTTPs 路由, TCP/UDP 服务, 负载均衡器, 高级路由(A/B 测试, 灰度发布),虚拟 IP 支持等功能。

rbd-monitor

monitor 组件对应 Rainbond 监控服务,Rainbond 基于 Prometheus 封装了 Monitor 组件,通过从 etcd、Kubernetes 集群中自动发现应用、集群、集群节点服务的各类监控对象并完成 Prometheus 监控目标配置,将监控目标纳入 Prometheus 监控范围。

rbd-mq

mq 组件对应 Rainbond 消息中间件服务,MQ 组件是基于 Etcd 实现的轻量级分布式、消息持久化和全局一致性的消息中间件。该组件维护异步任务消息,提供多主题的消息发布和订阅能力。

rbd-webcli

webcli 组件对应 Rainbond 应用 Web 终端控制服务,该组件实现了通过 web 的方式连接到容器控制台的功能。该组件通过与 UI 进行 WebSocket 通信,用户可以通过模拟 Web 终端发送各类 shell 命令,webcli 通过 kube-apiserver 提供的 exec 方式在容器中执行命令并返回结果到 Web 终端。

rbd-worker

worker 组件对应 Rainbond 应用运行时控制服务,应用运行时控制服务将 Rainbond-Application Model 进行实例化转化为 Kubernetes 资源模型,配属应用运行需要的各类资源,完成应用生命周期中的运行态部分,可以理解为 CD 控制服务,该服务的设计要点是支撑大量应用的生命周期监管。

rbd-eventlog

eventlog 组件对应 Rainbond 事件与日志处理服务,主要处理用户异步操作日志、应用构建日志和应用运行日志。

rbd-mesh-data-panel

mesh-data-panel 组件处理组件间的依赖。

rbd-grctl

grctl 组件提供命令行工具,用于查询集群内组件相关信息。

rbd-node

node 组件对应 Rainbond 集群、节点管理服务,Node 组件是 Rainbond 集群组建的基础服务,集群内所有节点都需要运行该组件。提供节点信息采集、集群服务维护、应用日志收集、应用运行时支持等关键能力。

完整安装包打包编译

编译完整安装包适⽤于改动了较多源代码后,重新⽣成安装包。在 rainbond 代码主⽬录下执⾏

./release.sh all

运行集群端镜像

由于数据中心端部署在 Kubernetes 集群上,因此需要满足以下前提条件,才能将编译好的组件镜像运行起来。

前提条件

  1. 已经安装好 Rainbond 的测试环境
  2. Kubectl 命令,可参考文档 安装Kubectl

运行镜像

Rainbond 数据中心端的组件,都是由 rbdcomponent 这个 CRD 资源进行定义的。当你编译好某个组件的镜像,需要运行时,则需要修改 rbdcomponent 这个资源。

以 chaos 组件为例,假设你编译好的 chaos 镜像名为

rainbond/rbd-chaos:v5.5.0-release

依次执行以下操作,替换集群中的组件镜像。

  1. 编辑对应的 rbdcomponent 文件

kubectl edit rbdcomponent rbd-chaos -n rbd-system

  1. 找到镜像地址一栏,修改镜像,如

spec:
 image:rainbond/rbd-chaos:v5.5.0-release

  1. 保存退出,此时执行以下命令,应该可以看到对应组件正在更新。等待pod更新完毕即可。

kubectl get pod -n rbd-system

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
JavaScript 前端开发 Docker
前端的全栈之路Meteor篇(一):开发环境的搭建 -全局安装或使用容器镜像
本文介绍了如何搭建 Meteor 开发环境,包括全局安装 Meteor 工具和使用 Docker 镜像两种方法,以及创建和运行一个简单的 Meteor 项目的基本步骤。 Meteor 是一个全栈 JavaScript 框架,适用于构建实时 Web 应用程序。文章还提供了遇到问题时的解决建议和调试技巧。
|
4月前
|
jenkins 持续交付
jenkins学习笔记之六:共享库方式集成构建工具
jenkins学习笔记之六:共享库方式集成构建工具
|
4月前
|
JavaScript 小程序 Java
【工具】用nvm管理nodejs版本切换,真香!
本文详细介绍了如何使用 nvm(node.js 版本管理工具)解决在不同项目间频繁切换 Node.js 版本的问题。通过实例展示了 A、B 两个项目分别依赖 v14.19.1 和 v16.15.0 版本时的解决方案,并提供了 nvm 的下载、安装及常用命令等实用信息,帮助读者轻松管理 Node.js 版本。文章还包括了卸载已安装的 Node.js、配置环境变量等步骤,确保切换顺畅无阻。
188 0
【工具】用nvm管理nodejs版本切换,真香!
|
5月前
|
开发工具 数据安全/隐私保护 git
Lerna 使用教程 -- 开发脚手架的流程和核心命令详解
Lerna 使用教程 -- 开发脚手架的流程和核心命令详解
217 0
|
网络协议 Java 应用服务中间件
Docker实战 | 第二篇:IDEA集成Docker插件实现一键自动打包部署微服务项目,一劳永逸的技术手段值得一试
Docker实战 | 第二篇:IDEA集成Docker插件实现一键自动打包部署微服务项目,一劳永逸的技术手段值得一试
|
JavaScript Serverless 应用服务中间件
nodejs 如何实现自动化部署?
什么是自动化部署 我接触到的自动化部署概念最早是在 Vercel 上提供的,Vercel 可以提供和 github 上的某个库建立‘链接’,当你 commit 到 github 远程库时就可以自动部署,Vercel 会帮你完成操作
nodejs 如何实现自动化部署?
|
运维 供应链 前端开发
化繁为简,如何快速实现企业级私有 npm 包依赖管理服务?
化繁为简,如何快速实现企业级私有 npm 包依赖管理服务?
137 0
|
存储 缓存 资源调度
pnpm技术体系之:高性能包管理工具
pnpm 是 performant npm(高性能的 npm),它是一款快速的,节省磁盘空间的包管理工具,同时,它也较好地支持了 workspace 和 monorepos。
pnpm技术体系之:高性能包管理工具
|
NoSQL 关系型数据库 MySQL
使用 Rainbond 搭建本地开发环境
在开发之前,你需要在本地安装各种开发工具和服务,比如:Mysql、Redis、Nacos 等等,我们都知道在个人电脑上安装这些服务相当的繁琐,可能会遇到很多问题,环境问题、依赖问题等等。
|
自然语言处理 数据库 数据安全/隐私保护
Elasticearch 安装 基础介绍 (一)
Elasticearch 安装实战操作 作者主页:https://www.couragesteak.com/
Elasticearch 安装 基础介绍 (一)