作者簡介
張海立(馭勢科技雲平臺研發總監):開源愛好者,雲原生社群上海站 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 網路環境影響。當然,您完全可以結合自身研發環境來選擇使用 NodePort
或 LoadBalancer
服務型別來暴露 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...