22款讓Kubernetes錦上添花的開源工具
至頂網軟體頻道訊息: Kubernetes已經成為大規模部署容器化應用的一個標準方式。但是,如果Kubernetes能幫助我們馴服龐大而複雜的容器部署,那麼有什麼能幫助我們去馴服Kubernetes呢?Kubernetes也是很複雜、很混亂且難以管理的。
在Kubernetes發展的過程中,一些難題可能會從內部得到解決。但有些人並沒有等待著Kubernetes發展到更易於使用的階段,而是用他們自己的解決方案來解決生產中運用Kubernetes遇到的許多常見問題。
下面我們就來重點介紹22款以各種方式簡化Kubernetes的開源專案和第三方工具——從簡化命令列互動到簡化應用部署語法,再到與AWS整合,以及為多個叢集提供視窗,等等。
Bitnami Cabin:適用於iOS和安卓系統的Kubernetes儀表板
現代Web應用或者服務都具有某種形式上的移動介面,Cabin為Kubernetes管理員提供了一個可以從iOS或者安卓智慧手機訪問的Kubernetes儀表板版本。這個Kubernetes儀表板中提供的許多功能都可以從Cabin啟動,包括Helm圖表、擴充套件部署、讀取pod日誌、訪問Kubernetes託管的Web應用。
Goldpinger:視覺化的Kubernetes叢集
人都是視覺動物。圖形和圖表讓我們更容易瞭解全域性。考慮到Kubernetes叢集的規模和複雜性,視覺化也許可以帶給我們一些幫助。
Goldpinger是由Bloomberg技術部門開源的一款工具,它執行在Kubernetes叢集內,可以顯示節點之間的關係互動式地圖。狀況良好的節點顯示為綠色,有問題的節點顯示為紅色。你只需要單擊節點即可獲取詳細資訊,還可以使用Swagger自定義API,提供報告、指標和其他整合。
Gravity:行動式的Kubernetes叢集
如果你想將應用部署到Kubernetes,很多應用都會使用Helm圖表來指導和自動化該過程。但是,如果你想按原樣使用Kubernetes叢集並將其部署到其他某個位置呢?
Gravity會對Kubernetes叢集、容器登錄檔以及執行的應用進行快照,稱為“應用捆綁包”,這個捆綁包只是一個.tar檔案,可以在Kubernetes執行的任何地方對叢集進行復制。
Gravity還能確保目標基礎設施可以支援與來源相同的行為要求,以及在此之上的Kubernetes執行時要求。Gravity企業版還增加了安全功能,包括基於角色的訪問控制,以及跨多個叢集同步安全配置的功能。
K9s:全屏Kubernetes CLI UI
管理員們喜歡“單一視窗”型工具。K9s就是一款面向Kubernetes叢集的全屏CLI UI。它讓你能夠一目瞭然地瞭解執行中的pod、日誌和部署情況,快速訪問shell。注意一點,你需要在使用者和名稱空間級別給使用者提供Kubernetes讀取許可權,以便正常使用K9的功能。
Kaniko:在Kubernetes叢集中構建容器
大多數容器映像都是構建在容器堆疊外部的系統上的。但有的時候你希望在容器堆疊內構建,例如,在一個執行中的容器內部,或者在Kubernetes叢集的某個位置。
Kaniko是在容器環境內進行容器構建的,但不依賴於像Docker這樣的容器保護程序。 Kaniko會獲取基本的映像,提取檔案系統,然後在提取檔案系統之上的使用者空間中執行所有構建命令,在每個命令完成之後對檔案系統進行快照。
請注意,目前Kaniko還無法構建Windows容器。
Kedge:簡明的Kubernetes部署定義
經常有人抱怨Kubernetes的清單或應用定義太複雜、太冗長,無論是編寫程式碼還是維護起來都是一件很痛苦的事,所以人們不得不求助於第三方工具來解決這些問題。
Kedge就提供了一種更簡單、更簡潔的語法。你向Kedge提供一個Kubernetes定義檔案的簡單版本,Kedge就可以把這個簡單的定義擴充套件為完整的Kubernetes版本。與Koki Short(見下文)不同的是,Kedge的宣告檔案並不使用模組化語法,而是將應用定義歸結為常見的快捷方式。
請注意,Kedge最近一次更新版本是在2018年4月。
Koki Short:可管理的Kubernetes清單檔案
和Kedge類似,Koki Short是一款改進了應用定義或者Kubernetes清單檔案的工具。與Kedge定義一樣,Koki Short定義採用縮寫語法來描述Kubernetes pod,可以將其轉換為完整的語法,然後再轉換回來。與Kedge定義不同的是,Koki Short定義也是模組化的,這意味著來自一個Short宣告的細節可以在其他宣告中重複使用,這樣就可以簡明扼要地定義多個具有共同元素的pod。
Kops:針對Kubernetes叢集的命令列操作
Kops工具是由Kubernetes團隊開發的,可以幫助你通過命令列管理Kubernetes叢集。Kops支援叢集執行在AWS和GCE上,未來還將支援VMware vSphere和其他環境。除了自動化設定和解除安裝流程之外,Kops還可以幫助實現其他型別的自動化,例如可以生成Terraform配置以允許使用Terraform重新部署叢集。
Kubebox:Kubernetes的終端控制檯
作為面向Kubernetes的高階終端控制檯,Kubebox不僅為Kubernetes及其API提供了美觀的外表,還可以互動式地顯示記憶體和CPU利用率、pod列表、執行中的日誌、以及配置編輯器等。最重要的是,Kubebox是被作為一個獨立的應用提供給Linux、Windows和MacOS作業系統的。
Kubecost:衡量執行中的Kubernetes的成本指標
大多數Kubernetes管理工具都側重於易用性、監控、對pod行為的洞察等,但是關於執行Kubernetes相關的成本監控呢?
Kubecost使用實時的Kubernetes指標,以及執行在主流雲提供商那裡的叢集所提供的實際成本資訊,來提供每個叢集部署的月度成本儀表板,涵蓋了按照Kubernetes元件(容器、pod、服務、部署等)分解的記憶體、CPU、GPU和儲存相關成本。
Kubecost還可以追蹤“叢集之外”各種資源(例如S3儲存)的成本,但目前僅限於AWS。成本資料甚至可以共享回Prometheus,這樣你就可以使用這些資料以程式設計的方式更改叢集行為了。
KubeDB:在Kubernetes中執行生產資料庫
資料庫一直是很難順暢地執行在Kubernetes中的。原生的Kubernetes功能集並不能直接解決資料庫的很多特定問題。
KubeDB允許管理員建立用於管理資料庫的Kubernetes Operator,包括執行備份、克隆、監視、快照和宣告性地建立資料庫,此外也支援叢集,但僅限於某些資料庫——例如,支援PostgreSQL,但尚不支援MySQL。
Kube-monkey:Kubernetes版Chaos Monkey
對系統進行壓力測試的一種可靠方法,就是隨意破解內容。這就是Netflix的Chaos Monkey背後的理論,Chaos Monkey是一種混沌工程工具,可以隨機終止生產中執行的虛擬機器和容器,以“鼓勵”開發人員構建更具彈性的系統。Kube-monkey也是基於相同的思想對Kubernetes叢集進行壓力測試的,其工作原理就是隨機刪除指定叢集中的pod,可以通過微調在特定的時間視窗內執行。
Kube-ps1:智慧的Kubernetes命令提示符
不,Kube-ps1對於Kubernetes來說不像是第一代索尼PlayStation模擬器那樣(擁有相當漂亮的外觀),而是Bash的一個簡單補充,可以在提示符中顯示當前Kubernetes的上下文和名稱空間。Kube-shell包含了這一功能以及許多其他功能,但如果你想要的只是更智慧的提示,Kube-ps1足以滿足你的需求。
Kube-prompt:互動式的Kubernetes客戶端
Kube-prompt是另一個對Kubernetes CLI進行了較小卻非常有用改動的工具,讓你可以輸入與Kubernetes客戶端進行互動式命令會話的數量。Kube-prompt讓你不需要鍵入kubectl為每個命令新增字首,而是自動為每個命令新增上下文資訊。
Kube-shell:針對Kubernetes CLI的Shell
Kubernetes命令列功能十分強大,但與任何命令列應用一樣,從眾多選項中做選擇可能是非常繁瑣的事情。Kube-shell將標準的Kubernetes命令列打包在一個整合的Shell中,這個Shell提供了常用命令的自動完成和自動建議功能,包括Kubernetes伺服器提供的建議(例如服務名稱),以及更強大的命令歷史記錄功能、vi樣式編輯模式、以及執行關於使用者、名稱空間、叢集和其他特定安裝資訊的上下文資訊。
Kubespy:實時監控Kubernetes資源
Pulumi的Kubespy是一個診斷工具,讓你可以實時追蹤對Kubernetes資源的更改操作,提供了一種文字式的儀表板。例如,你可以在啟動時觀察pod狀態的變化:pod定義被寫入Etcd,pod被安排執行在某個節點上,該節點上的Kubelet建立了pod,最後是pod標記為執行中的狀態。Kubespy可以獨立的二進位制檔案執行,也可以作為Kubectl外掛執行。
Kubernetes Ingress Controller for AWS
Kubernetes通過Ingress服務為叢集提供外部負載均衡和網路服務。AWS提供了負載均衡功能,但不會自動將這些服務與Kubernetes相連線。Kubernetes Ingress Controller for AWS解決了這個問題,Ingress Controller自動管理叢集中每個Ingress物件的AWS資源,為新的Ingress資源建立負載均衡器,並刪除掉已移除資源的負載均衡器,藉助AWS CloudFormation確保叢集的一致狀態。此外它還可以自動管理叢集中使用的其他元素,例如SSL證書以及EC2 Auto Scaling Groups。
Kube-ops-view:多個Kubernetes叢集的儀表板
Kubernetes有一個很有用處的通用監控儀表板,但Kubernetes社群正在嘗試其他向Kubernetes管理員呈現資料的方式,Kube-ops-view就是這樣一個選擇。它提供了多個Kubernetes叢集的一覽式檢視,以圖形的方式呈現,讓你可以一目瞭然地看到叢集中CPU和記憶體使用情況以及pod狀態。請注意,Kube-ops-view不允許你呼叫任何命令,僅用於視覺化。但Kube-ops-view提供的視覺化效果非常好,適合作為運營中心的監控工具。
Skaffold:Kubernetes的迭代開發
Skaffold是Google自己的Kubernetes工具之一,可以為Kubernetes應用執行持續的部署。當你修改原始碼的時候,Skaffold就能自動檢測到,觸發構建和部署流程,並在出現錯誤的時候發出警報。Skaffold完全在客戶端執行。Skaffold可以用於現有的CI/CD管道,與其他一些外部構建工具整合——主要是谷歌自己的Bazel。
Stern和Kubetail:針對Kubernetes的日誌拖尾
Stern讓你可以從Kubernetes pod及容器中(根據tail命令)生成顏色編碼輸出。這種快速方法可以將來自多個資源的所有輸出組合成讓人一目瞭然讀取的單一資料流,並清楚地根據顏色編碼進行區分。
Kubetail同樣是將來自多個pod的日誌聚合到一個流中,對不同的pod和容器進行顏色編碼。但是Kubetail是一個Bash指令碼,所以只需要一個shell。
Teresa:Kubernetes之上的簡單PaaS
Teresa是一個應用部署系統,作為一個簡單的PaaS執行在Kubernetes之上。使用者可以部署並管理屬於他們團隊的應用,這打消了信任特定應用的使用者的擔憂,讓他們無需直接面對Kubernetes。
Tilt:將容器更新推送到Kubernetes叢集
Tilt是由Windmill Engineering開發的,可以實時監控對Dockerfiles的更改,然後將這些更改逐步部署到Kubernetes叢集相應容器中。從本質上講,Tilt讓開發人員可以實時地更新叢集,只需更新Dockerfile即可。Tilt在叢集內進行建立,僅推送對原始碼的改動。