Sealos 基礎教程:Sealos Devbox 的架構原理解析

米开朗基杨發表於2024-11-04

今天這篇文章咱們來聊一聊 Sealos Devbox 到底是怎麼設計的,據說隔壁老奶奶最喜歡看這種有技術深度的文章了。

Devbox 返璞歸真,把開發者的開發精力放到開發中去,真正做到了擯棄複雜的 CI/CD,Docker,YAML 編排,除此之外還力求拉平開發與測試與運維團隊之間的一切界限,從從業者的角度做到了一套環境,隨處執行。

那麼,代價是什麼呢?

Devbox 的架構極大的闡釋了 “Sealos - 一切皆應用” 的理念,透過對不同元件層級的抽象與整合,把複雜度控制在不同層級的內部,從而達到在體驗和效果上的一致性。

在內部設計與架構方面,我們進行了大量複雜的工作,以確保系統的高效和解耦。這個過程涉及了不同分層級別下面的架構區別和規劃,不同層級之間的技術細節與選型互不依賴,針對每一個功能點都進行了針對性的設計。

儘管內部邏輯複雜,Devbox 的核心卻是讓使用者在幾乎不需要更改現有的程式碼開發與上線流程的前提下能夠直接無縫上雲,快速且直接的體驗到雲原生與虛擬化的優勢。在使用相同的 IDE 開發的前提下,可以提供和現有的所有開發流程完全一致的體驗。

很多時候,研發同學和運維同學,開發流程和上線流程,很容易因為環境的不一致出現的問題而導致時間與精力的耗費。比如說在我的電腦上執行好好的,到了另一臺電腦上就不行了,或者是同樣的初始化指令碼,在開發機上是可以跑起來的,但是在上線之後卻出現了各種各樣的問題,這種情況在 Devbox 上是不會發生的。

整體架構

整體架構圖如下:

Devbox 可以大致的分為三個大部分:

  • Interface
  • Controller
  • Container Shim

Interface

使用者直接互動的介面與介面的聚合部分,包括 Web 前端,外掛端,API 端。

Web 前端

Sealos 內 App 的部分,完整的使用者互動介面,包括建立,檢視,變更,刪除等等,是使用者與 Devbox 互動的第一入口。

外掛端

實際為 VS Code 和 Jetbrain 等 IDE 的外掛,在 IDE 內展示與管理 Devbox 列表,與 API 端互動。

API 端

負責與控制器互動,鑑權 web 前端/外掛端請求,聚合轉換資料介面等。

Controller

Devbox 控制器負責將來自使用者的請求轉換為 K8s 的資源,實際建立對應 Devbox 例項的 pod,svc,ingress 等,管理對應的資料,監聽與同步 Devbox 例項的所有狀態,返回外部可訪問的網路 URL 等。

Devbox Controller 支援如下命令:

  • 展示可用的 Runtime 集合
  • 建立/刪除 Devbox
  • 展示 Devbox 的狀態
  • Devbox 的關機/開機/重啟
  • 變更 Devbox 的資源配置
  • 提供 IDE 端可連線的網路
    • nodePort 模式
    • wsTunnel 模式
  • 配置 Devbox 內應用監聽的埠,提供對外測試用 URL
  • 釋出與共享預裝好的 Runtime 環境

Container Shim

負責與 kubernetes 的底層 CRI 部分進行互動,實現容器的持久化與提交到 Devbox 專屬的映象倉庫,更新映象資訊等,是 Devbox 的核心部分。

一個完整的使用者流程

  • 使用者登入 Sealos,開啟 Devbox 的 Web 介面,點選新建 Devbox,選擇一個 Runtime,選擇版本,調整所需的資源,點選建立。
  • 前端建立一個 Devbox 的 CR,spec 內容為上述選擇的資訊。
  • Controller 監聽到 CR 的建立,生成所需的 image/tag,建立對應的 pod,svc 等資源,並記錄到 CR 的 status 欄位。
  • 前端輪詢 CR 的狀態更新,拿到 status 欄位裡面的內容渲染到一鍵連線的按鈕上。
  • 使用者點選一鍵連線,喚起 VS Code/Jetbrains 的外掛,外掛透過 API 端獲取到 Devbox 的 SSH 連線資訊,透過 nodePort/wsTunnel 連線到對應的 Pod 上。
  • 使用者在 IDE 內開發,除錯,測試.
  • 完成開發後,使用者選擇提交修改 (關機/定時觸發)。
  • K8s 監聽到 Pod 的關閉/變更請求,傳送對應的 Event 到 Sealos 的 Devbox 專用的 containerd-shim(Proxy 服務)。
  • containerd-shim 根據不同的事件,執行對應的操作,比如儲存用的 emptyDir,與 overlayFS 合併,commit 成一個新的映象,提交到內部安全隔離的映象倉庫。
  • 使用者重新開機/繼續使用 Devbox,Controller 會監聽到對應的事件,重新建立對應的 Pod,切換 Pod 的 image 為上次 Commit 的映象。
  • 使用者所有變更都保留,就像使用傳統的虛擬機器一樣。

後續

後續,Devbox 還會提供:

  • 開機自啟動,模擬 systemd
  • 自定義 runtime
  • 開發環境共享
  • 映象倉庫對使用者開放
  • 協作與許可權控制

等等功能,力求在保證一致的開發執行體驗的架構上,利用輕量級虛擬化的特點,提供更多的擴充套件能力。

顫抖吧世界,大的要來了!

相關文章