1.概述
什么是 KubeSphere Console?
KubeSphere Console 是 KubeSphere 集群的 Web UI 管理平臺,提供可視化的方式管理 K8s 集群資源。
KubeSphere Console 對于用戶意味著什么?
它可以幫助用戶快速瀏覽集群當前運營狀態(tài),比如 CPU 消耗、內存消耗以及各個節(jié)點的健康狀態(tài)。提供了可視化的方式,幫助用戶快速創(chuàng)建 K8s 的資源。實時狀態(tài)更新及詳細的數(shù)據(jù)展示可以讓平臺資源對用戶更透明。內置應用商店,幫助開發(fā)者在開發(fā)過程中快速部署一些常用的 App。
KubeSphere 提供的遠不止這些。這是 KubeSphere 目前前端的功能圖,除了 K8s 基本的資源管理功能外,還有 DevOps、日志、監(jiān)控、微服務、灰度發(fā)布等功能。
在項目開發(fā)上,截至 2.1.0,KubeSphere Console 總共經歷了 6 大版本,12 個主要功能點,3365 個 Git Commits,總共 11 個代碼貢獻者。目前 KubeSphere Console 已經在 GitHub 上開源了。
為什么要做開源這件事?一是響應社區(qū)的號召,二是開發(fā)者參與到 KubeSphere 里,我們鼓勵和歡迎這樣的事情。希望能夠和社區(qū)一起把 KubeSphere 建立得更加強大。
2.前端架構
接下來跟大家介紹 KubeSphere Console 的前端架構。可以從兩部分來說,我們主要采用前端 Server 和 Web UI 的架構。前端 Server 是基于 Node.js 和 Koa.js 開發(fā),主要負責 API 轉發(fā)、登錄邏輯控制、配置文件寫入等。Web 端是一個標準的 SPA 應用。
為什么選擇前端 Server,而不是像大部分的 Web 用 Nginx 托管?
前端 Server 在完成靜態(tài)頁面托管、API 轉發(fā)的功能及前提之下,還可以完成其他的功能。使用前端 Server,頁面從前端 Server 輸出,可以動態(tài)注入信息,比如配置文件、運行時、配置編碼,還有用戶的登錄信息,不用你們在頁面里,它可以提前寫好,UI 加載過程更加流暢。
還有一些登錄,像驗證碼、登錄錯誤提示,比如驗證碼,如果前端來做會更好,放在后端的話很難找到合適的地方。像前端頁面提供 API,比如有一些比較復雜的應用需要一些數(shù)據(jù),這些數(shù)據(jù)在 Server 里,不只是單純寫在 js 里,而是采用 API 的形式,采用 API 形式的話可以讓我們擁有更好的定制能力,在不同的環(huán)境下是不一樣的。
接下來我來說 Web 層的技術,分為以下四部分:技術棧、組件化 UI、狀態(tài)管理和測試。
技術棧是常用的 React+Mobx.js。組件化 UI 是數(shù)據(jù)驅動。為什么選擇這樣的技術棧?人生苦短,當然選擇最簡單來做就完事了。React+Mobx.js 在我們項目中的特點是具有輕量,比較容易學習,可以讓我們更加專注業(yè)務開發(fā)。
在 Web UI,我們采用組件化方式進行構建,遵循原則和設計方法。什么是原則設計方法呢?很多人了解過,在此跟大家簡單介紹。比如基本的標簽是 UI 的原子,把這些標簽整合起來形成一個簡單的組件,比如按鈕等這些是分子,我們在分子的基礎上增加業(yè)務邏輯,把這些東西再組合形成模板,添加數(shù)據(jù)形成頁面。
KubeSphere Console 在里面實現(xiàn)了一套技術組件和一些比較復雜的業(yè)務組件。比如我們的樣式、按鈕和容器表單,這些是在 KubeSphere 里進行組件化的實踐。這是組的功能,加大我們開發(fā)周期。
這是容器組業(yè)務組件,它具有高內聚低耦合的特征。它輸入的話只需要 labelSelector 進行篩選。篩選完之后可以輸出關聯(lián)、數(shù)據(jù)以及 Porter 里的容器信息,以及相關的監(jiān)控數(shù)據(jù),監(jiān)聽 websocket,實時刷新列表。這樣的組件可以在很多地方部署副本集,很輕松、很容易的復用。
什么是狀態(tài)管理?
將組件和頁面之間的狀態(tài)統(tǒng)一管理起來,為什么要這樣的狀態(tài)管理?應用的狀態(tài)影響著分布與許多組件之間,在大型應用里,這樣的影響分布會讓你的業(yè)務邏輯顯得很混亂的狀態(tài)。專門管理可以讓數(shù)據(jù)流向變得清晰可循,可以讓數(shù)據(jù)業(yè)務邏輯更容易進行復用。在 KubeSphere Console 里大概分為四層狀態(tài)管理,在全局 Store 里進行全局 UI 管理,websocket 實例,路由實例等。
模塊管理,它是在某一個模塊進入時初始化,退出的時候進行銷毀。我們在 KubeSphere Console 前面將業(yè)務劃分為 DevOps、項目、企業(yè)空間等,每個模塊進入時,狀態(tài)管理是獨自加載的。分層設計的話可以讓頁面數(shù)據(jù)流量顯得更清晰,設計周期更加簡單。
接下來介紹 KubeSphere Console 測試化。
為什么要有測試?測試是功能交互技術的保障。在單元測試方面,我們采用 Jest+Enzyme 的框架保證技術組件和業(yè)務組件的功能正常。我們著重于邊界情況的測試,以及針對相關的 Bug Reports 進行覆蓋。然后是端到端測試,主要目的是為了保證 UI 功能交互和展示效果上的運行。我們在端到端的測試里,與真實客戶端進行交互,在總體上可以保證整個業(yè)務板塊功能的正常。
3.展望
接下來我們一起探討 KubeSphere Console 未來的展望。KubeSphere Console 將如何成長?我們考慮到以下三方面:可擴展性、可監(jiān)測性和業(yè)務抽象。
什么是可擴展性?簡單的說就是插件化,為什么要做這件事。不管是前端還是后端,只要業(yè)務功能持續(xù)增加,你的代碼容量或者應用會變得龐大無比。進行差異化的改造要讓核心模塊保留,保留核心業(yè)務。其他業(yè)務功能以插件的形式加載進來,可以保證主體功能足夠輕量。不同用戶可以為自己專門的業(yè)務場景定制自己的插件。在部署運行時,整個系統(tǒng)看起來沒那么多冗余的功能阻礙。
前端頁面監(jiān)測系統(tǒng),為什么要做這樣的功能?因為我們發(fā)現(xiàn)很多用戶實際前端頁面運行場景中經常發(fā)生一些錯誤,我們要幫忙解決時很難復現(xiàn)。監(jiān)測系統(tǒng)可以幫助記錄錯誤的發(fā)生,更容易讓我們 Debug。主要包括異常監(jiān)控、資源請求監(jiān)控以及頁面加載性能的監(jiān)控,將監(jiān)控信息、報錯信息上傳到特定的服務器上,有一個地方專門掌控前端的異常反饋,更容易幫助我們 Debug。
接下來是業(yè)務抽象。我們了解到很多用戶對 K8s 的基礎概念,比如 Pods 或者 workload 控制器,Depolyment,StatfulSet 等,不是很了解,也不知道怎么做選擇。我們考慮到這一點,打算在 KubeSphere Console 里針對基礎的資源進行一層抽象,讓一些用戶不用了解底層具體用了什么資源,而是它需要什么樣的資源。用戶需要某個服務,做出一些配置上的選擇,我們來決定底層是什么樣的資源實現(xiàn)。這樣可以讓一些用戶更容易使用 KubeSphere。
今年的 Cloud Native + Open Source Virtual Summit China 中國峰會將首次以線上形式召開,KubeSphere 團隊為大家準備精彩話題及豐富的周邊禮品,掃碼直達,千萬不要錯過哦。