一文了解如何原始碼編譯Rainbond基礎元件

rainbond發表於2022-02-23

Rainbond 主要由以下三個專案組成,參考官網詳細 技術架構

業務端

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

相關文章