Nocalhost 為 KubeSphere 提供更強大的雲原生開發環境

CODING發表於2021-12-06
作者簡介
張海立(馭勢科技雲平臺研發總監):開源愛好者,雲原生社群上海站 PMC 成員,KubeSphere Ambassador;日常雲原生領域工作涉及 Kubernetes、DevOps、可觀察性、服務網格等。
玉易才:Nocalhost Maintainer,CKA、CKAD,Work From Home

KubeSphere 簡介

KubeSphere 是在 Kubernetes 之上構建的以應用為中心的多租戶容器平臺,提供全棧的 IT 自動化運維的能力,簡化企業的 DevOps 工作流。 ​

KubeSphere 提供了運維友好的嚮導式操作介面,即便是 Kubernetes 經驗並不豐富的使用者,也能相對輕鬆地上手開始管理和使用。它提供了基於 Helm 的應用市場,可以在圖形化介面下非常輕鬆地安裝各種 Kubernetes 應用。 ​

Nocalhost 簡介

Nocalhost 是一個允許開發者直接在 Kubernetes 叢集內開發應用的工具。

Nocalhost 的核心功能是:提供 Nocalhost IDE 外掛(包括 VSCode 和 Jetbrains 外掛),將遠端的工作負載更改為開發模式。在開發模式下,容器的映象將被替換為包含開發工具(例如 JDK、Go、Python 環境等)的開發映象。當開發者在本地編寫程式碼時,任何修改都會實時被同步到遠端開發容器中,應用程式會立即更新(取決於應用的熱載入機制或重新執行應用),開發容器將繼承原始工作負載所有的宣告式配置(configmap、secret、volume、env 等)。

Nocalhost 還提供:

  • VSCode 和 Jetbrains IDE 一鍵 Debug 和 HotReload
  • 在 IDE 內直接提供開發容器的終端,獲得和本地開發一致的體驗
  • 提供基於 Namespace 隔離的開發空間和 Mesh 開發空間

在使用 Nocalhost 開發 Kubernetes 的應用過程中,免去了映象構建,更新映象版本,等待叢集排程 Pod 的過程,把編碼/測試/除錯反饋迴圈(code/test/debug cycle)從分鐘級別降低到了秒級別,大幅提升開發效率。

此外,Nocalhost 還提供了 Server 端幫助企業管理 Kubernetes 應用、開發者和開發空間,方便企業統一管理各類開發和測試環境。

本文將介紹如何在 KubeSphere 中快速部署 Nocalhost Server及基本使用,提供一個幫助研發團隊統一管理 Nocalhost 應用部署的管理平臺;以及 Nocalhost Server 基本使用。 ​

前提條件

安裝 KubeSphere

安裝 KubeSphere 有兩種方法。一是在 Linux 上直接安裝,可以參考文件:在 Linux 安裝 KubeSphere; 二是在已有 Kubernetes 中安裝,可以參考文件:在 Kubernetes 安裝 KubeSphere。 ​

在 KubeSphere 中啟用應用商店

在 KubeSphere 中啟用應用商店可以參考文件:KubeSphere 應用商店

安裝 Nocalhost Server

在 KubeSphere 3.2 中從應用商店安裝

Nocalhost Server 已經整合在了 KubeSphere 3.2 的應用商店中了,因此可以直接訪問應用商店並按 常規方式 進行應用部署。

在 KubeSphere 3.x 中通過應用倉庫安裝

在 KubeSphere 3.x 中,您可以 通過應用倉庫來部署應用,下面分步介紹具體的操作過程。

步驟 1:新增應用商店

首先,使用具備企業空間管理許可權的賬號登陸 KubeSphere 並進入您選定的一個企業空間,在您的企業空間中,進入「應用管理」下的「應用倉庫」頁面,並點選「新增倉庫」。

在彈出的對話方塊中,可將應用倉庫名稱設定為 nocalhost,將應用倉庫的 URL 設定為 https://nocalhost-helm.pkg.coding.net/nocalhost/nocalhost,點選「驗證」對 URL 進行驗證,驗證通過後再點選「確定」。

⚠️ 注意:URL 必須貼全連結,不能缺失 https:// 這部分,否則會驗證失敗

應用倉庫匯入成功後會顯示在如下圖所示的列表中。

有關新增私有倉庫時的更多引數資訊,請參見 匯入 Helm 倉庫

步驟 2:從應用模版部署應用

進入您選定的用於部署 Nocalhost Server 的專案,如果還沒有可用專案,可以直接開啟企業空間頁面中的「專案」欄目,「建立」一個新的專案。

假設我們已經建立了一個名為 nocalhost-server 的專案,進入專案介面,進入「應用負載」下的「應用」頁面,再點選「建立」新應用。

在彈出的對話方塊中選擇「從應用模板」建立。

  • 從應用商店:選擇內建的應用和以 Helm Chart 形式單獨上傳的應用。
  • 從應用模板:從私有應用倉庫和企業空間應用池選擇應用。

從下拉選單中選擇之前新增的私有應用倉庫 nocalhost,可以看到倉庫中的 Nocalhost Server Helm Chart 如下顯示。

您可以檢視「應用資訊」和「Chart 檔案」,在版本下拉選單中選擇版本,然後點選「部署」。

設定應用「名稱」,確認應用「版本」和部署「位置」,點選「下一步」。

在「應用設定」標籤頁,您可以手動編輯清單檔案或直接點選「安裝」。建議把 service.type 設定為 ClusterIP,以確保安裝不受 Kubernetes 網路環境影響。當然,您完全可以結合自身研發環境來選擇使用 NodePortLoadBalancer 服務型別來暴露 Nocalhost Server(Server 本身對此並無限制)。

最後等待 Nocalhost Server 建立完成並開始執行,可以在「應用」中看到如下應用狀態(可能需要重新整理一下頁面)。

步驟 3:暴露 Nocalhost Server 服務

進入「應用負載」下的「服務」頁面,選擇 nocalhost-web 服務,在最右側的拉下選單中選擇「編輯外部訪問」。

在彈出的對話方塊中選擇合適當前雲端網路環境的外網「訪問方式」,然後點選「確定」即可應用服務配置。

本文假設我們仍然保持 ClusterIP 的訪問方式,通過 kubectl port-forward 來進行後續的 Nocalhost Server 使用。

❯ kubectl -n nocalhost-server port-forward service/nocalhost-web 8080:80
Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80
⚠️ 注意:這裡的 nocalhost-server 請替換為您實際使用的部署了 Nocalhost 應用的 Namespace

至此,已完成在 Kubesphere 中快速部署 Nocalhost Server,如您是第一次使用 Nocalhost Server,可繼續以下關於 Nocalhost Server Dashboard 配置、在 Nocalhost IDE 外掛中進行開發體驗的內容。

使用 Nocalhost Server

完成 Port Forward 後可使用 http://localhost:8080 來開啟 Nocalhost Server Dashboard 頁面;使用預設賬號 admin@admin.com 及密碼 123456 進行登陸。登入後請更改預設密碼。

建立叢集

Nocalhost Server 多用於管理整個團隊的 Nocalhost 研發環境,因此我們首先需要新增可進行管理的叢集。

在 Nocalhost Server Dashboard 中選擇左側選單列表中的「叢集」,進入頁面後選擇「新增叢集」。

在彈出的對話方塊中輸入「叢集名稱」,並錄入 kubectl 可用的、具備 cluster-admin 許可權的 kubeconfig 檔案後「確認」。

目前可匯入的 kubeconfig 檔案內容還不支援 exec 型別的使用者憑證,如果您使用的是這裡憑證,建議您另外生成一個具有足夠許可權的 ServiceAccount 並使用其對應的 kubeconfig。

這裡有多種方式獲取目標叢集的 kubeconfig,例如您可以返回 KubeSphere 並進入叢集頁面,獲取當前叢集的 kubeconfig 檔案。注意,如果使用 kubeconfig 檔案的應用部署在當前叢集外,您需要將 clusters:cluster:server 引數的值修改為對外暴露的 Kubernetes API 伺服器地址

新增成功後,可以得到如下的叢集資訊頁面。

建立開發空間(DevSpace)

接下來,我們進入「開發空間」頁面,選擇「建立開發空間」,並在彈出的對話方塊中選擇「建立隔離開發空間」。

「共享開發空間」,即 MeshSpace,不在本文章討論範圍,更多可參考 Manage MeshSpace 這篇文章介紹。

在彈出的對話方塊中,可以填寫「開發空間名稱」(這裡設定為 demo),選擇「叢集」和其「所有者」,並按需進行「其它設定」。

建立完成後,可以在「開發空間」頁面看到已建立的隔離開發空間,如下圖所示。

建立 bookinfo 樣例應用

下一步我們開始為團隊建立一些可部署的應用,先進入「應用」頁面,選擇「新增應用」。

在彈出的對話方塊中填寫「應用名稱」,同時我們繼續填寫其它資訊:

  • 選擇 Git 作為「安裝來源」
  • 輸入 https://github.com/nocalhost/bookinfo.git 作為「Git 倉庫地址」
  • 選擇 Manifest 作為「Manifest 型別」
  • 「應用配置檔案」留空,即使用預設值 config.yaml
  • 「Git 倉庫的相對路徑」填入 manifest/templates

可訪問 GitHub 檢視完整的 bookinfo 樣例應用倉庫,瞭解詳細的配置檔案細節。

建立使用者並共享開發空間

最後,我們建立一個樣例使用者來演示如果共享開發空間。進入到「使用者」頁面後,點選「新增使用者」,在彈出的對話方塊中填入必須的使用者資訊後「完成」新增。

然後我們回到開發空間,選擇我們之前建立的 demo 空間,點選畫筆圖示進入「編輯開發空間」的「共享使用者」標籤頁,開始「新增共享」。

選擇需要新增的使用者,並注意選擇預設的 Cooperator 協作者許可權,另一個 Viewer 觀察者許可權的使用者只能瀏覽開發空間。

至此,我們在 Nocalhost Server Dashboard 中的配置就告一段落,下面將進入 IDE 利用 Nocalhost 外掛執行應用的部署及開發體驗。 ​

部署 bookinfo 應用部署

這裡我們將使用 VS Code 執行應用的部署,首先需要 在 VS Code 中安裝 Nocalhost 外掛。 您也可以使用 JetBrains 及其 Nocalhost 外掛

在 VS Code 中開啟 Nocalhost 外掛皮膚,點選 + 號建立叢集連線,填入 Nocalhost Server 地址,並使用前面建立的普通使用者 test 的使用者名稱及密碼進行登入。

建立成功可以看到之前在 Nocalhost Server Dashboard 中建立的開發空間 demo(nh1btih)

點選 demo 空間右側的火箭圖示,會在 VS Code 編輯器頂部載入應用列表,如下圖所示可以看到之前新增的 bookinfo 應用。

選擇該應用即會啟動在 demo 空間中的 Nocalhost 應用部署過程(選擇應用源的預設分支進行安裝即可),安裝完成後,會出現如下日誌和彈窗提示:

同時在 Nocalhost 外掛皮膚中也可以展開 Workload 看到具體的部署內容。

開發體驗

  • 點選綠色圖示即可進入開發模式,選擇從 git 倉庫克隆原始碼。(第一次進入開發模式,Nocalhost 會提示你選擇原始碼目錄,可以直接選擇本地的原始碼目錄,也可以選擇從 git 倉庫克隆到本地,後續 Nocalhost 會記住原始碼目錄,再次進入開發模式時,會直接開啟這個原始碼目錄)
  • 進入開發模式後 Nocalhost 會自動將工作負載的映象替換為開發映象,並且將原始碼同步到遠端容器中。
  • 進入開發模式後會自動開啟一個遠端容器的終端,開發者可以在這個終端裡面執行命令,執行開發程式。
  • 右鍵工作負載 authors,點選 Remote run,即可在遠端容器裡面執行在開發配置裡面預設好的應用執行命令。
  • 更改程式碼並儲存後,Nocalhost 自動將更改後的程式碼檔案同步到遠端容器中。(若在開發配置裡面配置了該 hotReload: true 引數, nocalhost 將會自動在遠端容器中再次執行預設好的應用執行命令,更改程式碼後無需要再次點選 Remote run 或者手動執行應用執行命令)

遠端除錯

  • 右鍵工作負載 authors,點選Remote debug,即可進入遠端 debug 模式。
  • 打上斷點,在瀏覽器訪問 http://127.0.0.1:39080/produc...,即可進行遠端 debug

引用連結

[1] KubeSphere: https://kubesphere.com.cn/
[2] Nocalhost: https://nocalhost.dev/
[3] Nocalhost Server: https://nocalhost.dev/docs/se...
[4] 在 Linux 安裝 KubeSphere: https://kubesphere.com.cn/doc...
[5] 在 Kubernetes 安裝 KubeSphere: https://kubesphere.com.cn/doc...
[6] KubeSphere 應用商店: https://kubesphere.com.cn/doc...
[7] 常規方式: https://kubesphere.com.cn/doc...
[8] 通過應用倉庫來部署應用: https://kubesphere.com.cn/doc...
[9] 匯入 Helm 倉庫: https://kubesphere.com.cn/doc...
[10] Manage MeshSpace: https://nocalhost.dev/docs/se...
[11] bookinfo: https://github.com/nocalhost/...
[12] 在 VS Code 中安裝 Nocalhost 外掛: https://nocalhost.dev/docs/in...
[13] JetBrains 及其 Nocalhost 外掛: https://nocalhost.dev/docs/in...

點選此處連結一鍵開啟雲原生開發環境

相關文章