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