Hello folks,今天我們介紹一下由 Komodor 推出的開源項目 Helm-Dashboard。也是繼 ValidKube 之後的第二個開源項目。
在解析 Helm-Dashboard 工具之前,我們先來了解一下 Helm 工具目前的使用現狀。從編寫 Kubernetes manifests 到每次出現新更改時手動部署以及更新,它會使的我們工作流程變得越來越複雜。是以,大多數團隊遲早都會嘗試考慮基于工具模型來簡化應用程式的部署。Helm 恰好是一款部署應用程式最常用的包管理器,由于降低了在 Kubernetes 平台上部署應用程式的複雜性而被廣泛采用至今。然而同時,随着各種技術體系的日漸成熟以及需求的複雜化,Helm 也同時面臨着不少挑戰:
1、沒有使用時間序列資料對 Kubernetes 資源進行主動/實時監控 - 使用 Helm CLI 僅顯示應用程式的目前狀态,是以,難以進行故障排除
2、資源分組不當
3、通路圖表的自述檔案不是無縫的
4、缺少用于跨多叢集管理 Helm 應用程式的統一界面
5、沒有簡單的方法來比較跨部署的部署值
除此之外,除了原生 Helm 挑戰之外,還有一些其他問題也亟需解決,例如,如下事項:
1、沒有對工作負載休眠的開箱即用支援
2、團隊成員的複雜通路管理
是以,誠然 Helm 擅長打包 Kubernetes 應用程式,但在使用 Helm CLI 調試、故障排除應用程式方面及 Helm 的應用程式生命周期管理方面仍然需要完善、優化。
Helm Dashboard 背景摘要
在 2020 年 4 月, Helm 成為 CNCF 畢業項目時,已經被 70% 的 Kubernetes 使用者使用。有人可能會争辯說,正是 Helm 為 Kubernetes 的全球采用打開了閘門,讓模闆、打包和部署應用程式變得非常容易,而無需深入了解 K8s。
然而,抽象出底層的複雜性為日常營運創造了一個“黑匣子”。操作和維護應用程式的責任轉移給了開發人員,但在沒有真正了解底層基礎設施的情況下大規模地這樣做變得極其困難。
更複雜的是缺少 UI,這迫使 Helm 使用者通過 CLI 手動學習和執行許多指令。除了耗時之外,使用 CLI 還很難評估部署或復原 Helm 圖表的影響。比較不同版本的 Helm 圖表及其對應的 K8s 資源也是一個非常低效的過程,尤其是在生産中面臨故障排除問題的壓力時。
對可視化和簡化操作的需求産生了一個廣泛的“幫助”工具生态系統,例如 Captain、Helm 控制器、Orkestra,它為相關的 Helm 版本及其子圖表組添加了一個強大的依賴圖,以及Terraform Helm Provider,它啟用通過 Terraform 管理 Helm 圖表。像 ArgoCD 和 Flux 這樣的 GitOps 平台也通過 Helm 鈎子或 Helm SDK 支援 Helm 圖表。盡管我們熱愛所有這些項目,但我們覺得生态系統缺少一個簡單而全面的工具,專門用于簡化變更智能和故障排除。
Helm Dashboard 概念
Helm-Dashboard 提供了一種基于 UI 驅動的方式來管理已部署的 Helm 圖表資訊,為所建構的 Kubernetes 和 Helm 平台提供了一個直覺的儀表闆,并使團隊能夠輕松協作并在 Kubernetes 之上更快地傳遞應用程式。以友善維護着能夠實時檢視其修訂曆史和相應的 Kubernetes 資源。此外,基于 Helm-Dashboard 還可以執行簡單的操作,例如,復原到修訂版或更新到新版本等。
總而言之,通過建構有助于了解分布式雲原生系統引入的複雜性的工具,讓每個人都可以輕松通路 Kubernetes 操作和故障排除。
Helm Dashboard 基礎功能
1、主動監控
通常我們使用 Helm CLI 工具進行操作時,則無法實時監控工作負載情況。使用部署/安裝圖表 helm install repo/chart 後,即使某些 Kubernetes 資源丢失或未成功部署,Helm status 也會始終顯示為已部署。基于 Helm Dashboard,可以輕松地主動監控使用 Helm 圖表部署的所有 Kubernetes 資源。它顯示通過儀表闆或終端部署的應用程式的實時狀态。
假設,我們部署了一個 helm 圖表,其中有一些配置錯誤。與 helm CLI 不同,Helm Dashboard将顯示狀态為非“DEPLOYED”,因為圖表配置不正确。如果一切正常并成功部署,狀态将顯示為“健康”。同樣,如果圖表已部署,并且有人删除了與之關聯的任何 k8s 工作負載,Helm Dashboard 将立即将狀态進行更新。
2、跨叢集管理
使用 Helm CLI 或 Kubectl 的一大痛點是沒有任何統一的平台/儀表闆來管理混合雲中跨多叢集的部署。如上圖所示,Helm Dashboard 做得非常直覺。使用 Helm Dashboard 的 Clusters 頁籤,可以輕松地觀察和管理跨多個環境和叢集的部署,而無需考慮雲提供商。
3、資源資訊檢視
通常,技術人員在進行故障排除時提出的主要問題之一是:自上次應用程式穩定以來“發生了什麼變化”?在 Helm 的上下文中,比較 value.yaml 或其他可提供的檔案是所有團隊最常見的工作流程之一。 Helm Dashboard 提供了一種在處理事件或故障排除時比較 Helm 配置的便捷方式
4、資源分組
基于 Helm Dashboard 對所有應用程式的資源進行分組并将它們分類到不同的存儲桶中,這樣可以在調試時輕松找到正确的資源。
5、Chart 文法參考
如果想嘗試一個新的 Helm 圖表,我們将使用它的 README 來檢查公開的不同參數、要傳遞的值等等。如果使用 Helm CLI,查閱 README 會變得很麻煩,一次又一次地導航到浏覽器中的不同頁籤,在此過程中出現拼寫錯誤或參數和值不比對,所有這些都會導緻花費更多時間來完成工作。基于 Helm Dashboard,我們可以在值旁邊檢視圖表的 README,并在同一位置檢視參數、它們的描述和要傳遞的值。
6、更新維護
通常情況下,基于不同的業務場景需要,我們可能在環境中部署不同的插件、配置不同的變量,基于環境的訴求,我們可能需要更新我們的資源。
當然,除上述的基礎功能外,還有其他功能,例如,與其他主流的插件內建、部署值對比等,在實際的項目開發中也是非常重要的一環。
Helm Dashboard 部署安裝
Helm-Dashboard 使用本地 Helm 和 Kubectl 配置運作,無需額外設定。 接下來,我們簡要介紹一下。
[leonli@Leon ~ ] % helm version
version.BuildInfo{Version:"v3.8.1", GitCommit:"5cb9af4b1b271d11d7a97a71df3ac337dd94ad37", GitTreeState:"clean", GoVersion:"go1.17.8"}
此時,安裝 Helm-Dashboard,隻需運作以下 Helm 指令:
[leonli@Leon ~ ] % helm plugin install https://github.com/komodorio/helm-dashboard.git
安裝後,運作以下指令啟動 UI:
[leonli@Leon ~ ] % helm dashboard
INFO[0000] Helm Dashboard by Komodor, version 0.2.6 (15ce9170f3f3f61e72c376c3ecabc49b8b225a07 @ 2022-11-06T16:41:29Z)
INFO[0000] User analytics is collected to improve the quality, disable it with --no-analytics
INFO[0000] Opening web UI: http://localhost:8080
[GIN] 2022/11/12 - 15:03:22 | 200 | 5.824667ms | 127.0.0.1 | GET "/"
[GIN] 2022/11/12 - 15:03:22 | 200 | 81.917µs | 127.0.0.1 | GET "/static/analytics.js"
[GIN] 2022/11/12 - 15:03:22 | 200 | 108.958µs | 127.0.0.1 | GET "/static/styles-base.css"
[GIN] 2022/11/12 - 15:03:22 | 200 | 49.292µs | 127.0.0.1 | GET "/static/actions.js"
[GIN] 2022/11/12 - 15:03:22 | 200 | 162.75µs | 127.0.0.1 | GET "/static/styles.css"
[GIN] 2022/11/12 - 15:03:22 | 200 | 20.875µs | 127.0.0.1 | GET "/static/scripts.js"
[GIN] 2022/11/12 - 15:03:22 | 200 | 23.916µs | 127.0.0.1 | GET "/static/repo.js"
[GIN] 2022/11/12 - 15:03:22 | 200 | 9.625µs | 127.0.0.1 | GET "/static/list-view.js"
[GIN] 2022/11/12 - 15:03:22 | 200 | 23.125µs | 127.0.0.1 | GET "/static/revisions-view.js"
[GIN] 2022/11/12 - 15:03:22 | 200 | 33µs | 127.0.0.1 | GET "/static/details-view.js"
[GIN] 2022/11/12 - 15:03:22 | 200 | 126.708µs | 127.0.0.1 | GET "/status"
[GIN] 2022/11/12 - 15:03:22 | 200 | 19.625µs | 127.0.0.1 | GET "/static/logo-header.svg"
[GIN] 2022/11/12 - 15:03:22 | 200 | 7.375µs | 127.0.0.1 | GET "/static/komodor-logo.svg"
[GIN] 2022/11/12 - 15:03:22 | 200 | 34.667µs | 127.0.0.1 | GET "/static/helm-gray.svg"
[GIN] 2022/11/12 - 15:03:25 | 200 | 177.166µs | 127.0.0.1 | GET "/api/scanners"
[GIN] 2022/11/12 - 15:03:25 | 200 | 64.375µs | 127.0.0.1 | GET "/status"
[GIN] 2022/11/12 - 15:03:25 | 200 | 47.538459ms | 127.0.0.1 | GET "/api/kube/contexts"
[GIN] 2022/11/12 - 15:03:25 | 200 | 123.917µs | 127.0.0.1 | GET "/static/topographic.svg"
[GIN] 2022/11/12 - 15:03:25 | 200 | 102.18225ms | 127.0.0.1 | GET "/api/helm/charts"
[GIN] 2022/11/12 - 15:03:25 | 200 | 41.25µs | 127.0.0.1 | GET "/static/helm-gray-50.svg"
[GIN] 2022/11/12 - 15:03:29 | 200 | 72.583µs | 127.0.0.1 | GET "/static/logo.png"
[GIN] 2022/11/12 - 15:03:37 | 200 | 104.25µs | 127.0.0.1 | GET "/"
[GIN] 2022/11/12 - 15:03:37 | 200 | 58.875µs | 127.0.0.1 | GET "/static/analytics.js"
[GIN] 2022/11/12 - 15:03:37 | 200 | 92.875µs | 127.0.0.1 | GET "/static/styles.css"
[GIN] 2022/11/12 - 15:03:37 | 200 | 14.417µs | 127.0.0.1 | GET "/static/list-view.js"
[GIN] 2022/11/12 - 15:03:37 | 200 | 11.833µs | 127.0.0.1 | GET "/static/revisions-view.js"
[GIN] 2022/11/12 - 15:03:37 | 200 | 267.333µs | 127.0.0.1 | GET "/static/repo.js"
...
預設情況下,Web 伺服器僅在本地可用。您可以通過将 HD_BIND 環境變量指定為所需的值來更改它。例如,0.0.0.0 将綁定到所有 IPv4 位址或 [::0] 将是所有 IPv6 位址。
如果端口 8080 被占用,可以通過 --port <number> 指令行标志指定要使用的不同端口。
此時浏覽器會預設自動打開,可以通路儀表闆:
從目前的行業趨勢來看,Kubernetes 的使用量正在增加,無論大小公司,Helm 的使用也在增加。為了確定業務靈活性,在部署具有更好管理和調試能力的 Kubernetes 時錯誤最小化,使用者可以采用 Helm Dashboard 來維護團隊所部署的資源情況。
如上為 Helm Dashboard 的相關内容解析,希望對大家有用。關于 Helm Dashboard 更多需要了解的資訊,歡迎大家交流、關注!
Adiós !
- EOF -
架構驿站一個純粹、幹淨、原創的技術社群,堅持分享有思考、洞察、地氣的技術文章 ~ 專注領域:# Java虛拟機 # 中間件 # 雲原生131篇原創内容
公衆号
如果您喜歡本文,歡迎點贊、在看、留言,或者點選右上角,把文章分享到朋友圈~~~