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在集群內進行創建,僅推送對源代碼的改動。