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

作者簡介
張海立(馭勢科技雲平臺研發總監):開源愛好者,雲原生社區上海站 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 頁面;使用默認賬號 [email protected] 及密碼 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 或者手動運行應用運行命令)

遠程調試

引用鏈接

[1] KubeSphere: https://kubesphere.com.cn/
[2] Nocalhost: https://nocalhost.dev/
[3] Nocalhost Server: https://nocalhost.dev/docs/server/server-overview
[4] 在 Linux 安裝 KubeSphere: https://kubesphere.com.cn/docs/quick-start/all-in-one-on-linux/
[5] 在 Kubernetes 安裝 KubeSphere: https://kubesphere.com.cn/docs/quick-start/minimal-kubesphere-on-k8s/
[6] KubeSphere 應用商店: https://kubesphere.com.cn/docs/pluggable-components/app-store/
[7] 常規方式: https://kubesphere.com.cn/docs/project-user-guide/application/deploy-app-from-appstore/
[8] 通過應用倉庫來部署應用: https://kubesphere.com.cn/docs/project-user-guide/application/deploy-app-from-appstore/
[9] 導入 Helm 倉庫: https://kubesphere.com.cn/docs/workspace-administration/app-repository/import-helm-repository/
[10] Manage MeshSpace: https://nocalhost.dev/docs/server/manage-devspace-mesh
[11] bookinfo: https://github.com/nocalhost/bookinfo/
[12] 在 VS Code 中安裝 Nocalhost 插件: https://nocalhost.dev/docs/installation#install-vs-code-plugin
[13] JetBrains 及其 Nocalhost 插件: https://nocalhost.dev/docs/installation#install-jetbrains-plugin

點擊此處鏈接一鍵開啓雲原生開發環境

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章