十個(gè)殺手級(jí)Kubernetes工具
簡(jiǎn)介
Kubernetes成立十周年之際,其采用率和生態(tài)系統(tǒng)呈指數(shù)級(jí)增長(zhǎng)。Kubernetes在GitHub上擁有超過(guò)100000個(gè)星星,已成為云原生生態(tài)系統(tǒng)的支柱,實(shí)現(xiàn)了對(duì)容器化應(yīng)用程序的可擴(kuò)展和高效管理。最新版本Kubernetes 1.30引入了幾項(xiàng)新功能和改進(jìn),進(jìn)一步鞏固了其作為領(lǐng)先容器編排平臺(tái)的地位。
然而,要充分發(fā)揮Kubernetes的強(qiáng)大功能,關(guān)鍵在于使用正確的工具。在這里,我們將探討十個(gè)鮮為人知但極為有用的工具,這些工具可以增強(qiáng)你的Kubernetes體驗(yàn)。從配置問(wèn)題檢測(cè)到網(wǎng)絡(luò)可觀測(cè)性,這些工具將幫助你更有效、更高效地管理集群。不論是Kubernetes的資深用戶還是初學(xué)者,都能找到有價(jià)值的見(jiàn)解和實(shí)用技巧,進(jìn)而優(yōu)化Kubernetes工作流程。
接下來(lái),讓我們一起深入探索可以將Kubernetes水平提升到新高度的工具!
工具類(lèi)別
我們將要討論的每個(gè)項(xiàng)目都屬于一個(gè)類(lèi)別。這些類(lèi)別有助于在Kubernetes上進(jìn)行設(shè)置、管理和開(kāi)發(fā)。在這里我們特意避免了在可觀測(cè)性領(lǐng)域廣為人知的項(xiàng)目,如Prometheus/Grafana,或在網(wǎng)絡(luò)領(lǐng)域的Cilium。相反,我們將重點(diǎn)關(guān)注那些可能不太為人知,但卻能為Kubernetes用戶帶來(lái)顯著優(yōu)勢(shì)的工具。
1. Popeye
存儲(chǔ)庫(kù)鏈接: https://github.com/derailed/popeye
類(lèi)別:配置問(wèn)題檢測(cè)。
描述:Popeye是一個(gè)Kubernetes集群修復(fù)工具。它能夠掃描Kubernetes資源,并報(bào)告集群中的潛在問(wèn)題和配置錯(cuò)誤。Popeye采用前瞻性設(shè)計(jì),旨在主動(dòng)進(jìn)行防護(hù),通過(guò)定期掃描和審核部署、配置和資源定義,確保集群保持整潔和符合Kubernetes最佳實(shí)踐。
解決的問(wèn)題:隨著時(shí)間的推移,Kubernetes集群可能會(huì)變得雜亂和配置錯(cuò)誤,從而導(dǎo)致潛在的穩(wěn)定性和性能問(wèn)題。Popeye有助于識(shí)別這些配置錯(cuò)誤,如已棄用的API版本、缺失的資源和安全漏洞。通過(guò)解決這些問(wèn)題,Popeye有助于維護(hù)集群的健康和性能,確保集群平穩(wěn)高效地運(yùn)行。
使用示例:要對(duì)當(dāng)前Kubernetes上下文進(jìn)行掃描并掃描所有命名空間,只需使用以下命令。
popeye -A -s cm
圖片
本地kind集群上的Popeye結(jié)果
2. KUTTL
存儲(chǔ)庫(kù)鏈接:https://github.com/kudobuilder/kuttl
類(lèi)別:測(cè)試。
描述:KUTTL(Kubernetes Test ToolKit,Kubernetes測(cè)試工具包)是一個(gè)用于測(cè)試Kubernetes應(yīng)用程序的綜合工具包。它提供了一個(gè)簡(jiǎn)單且聲明式的框架,用于編寫(xiě)、運(yùn)行和管理測(cè)試,確保Kubernetes配置和應(yīng)用程序按預(yù)期運(yùn)行。
解決的問(wèn)題:測(cè)試Kubernetes配置和應(yīng)用程序可能很復(fù)雜且容易出錯(cuò)。KUTTL通過(guò)提供一個(gè)與Kubernetes無(wú)縫集成的聲明式測(cè)試框架來(lái)簡(jiǎn)化這一過(guò)程。它支持定義測(cè)試場(chǎng)景和預(yù)期結(jié)果,從而更輕松地驗(yàn)證配置并在開(kāi)發(fā)周期早期發(fā)現(xiàn)問(wèn)題。
使用示例:要使用KUTTL創(chuàng)建和運(yùn)行測(cè)試,可以在YAML文件中定義測(cè)試用例。以下是一個(gè)簡(jiǎn)單測(cè)試用例的示例。
創(chuàng)建一個(gè)測(cè)試目錄結(jié)構(gòu):
my-tests/
├── 00-setup.yaml
├── 01-verify.yaml
├── kuttl-test.yaml
在00-setup.yaml中定義測(cè)試步驟:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
key: value
在01-verify.yaml中定義預(yù)期結(jié)果:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
key: value
使用以下命令運(yùn)行測(cè)試:
kuttl test my-tests/
此命令將執(zhí)行測(cè)試步驟,并驗(yàn)證在YAML文件中定義的結(jié)果。
3.Kubescape
存儲(chǔ)庫(kù)鏈接:https://github.com/kubescape/kubescape
類(lèi)別:安全掃描。
描述:Kubescape是一個(gè)用于Kubernetes集群的安全掃描工具。它通過(guò)掃描漏洞、配置錯(cuò)誤和安全標(biāo)準(zhǔn)合規(guī)性,對(duì)集群的安全狀況進(jìn)行全面評(píng)估。Kubescape利用行業(yè)最佳實(shí)踐和框架,如美國(guó)國(guó)家安全局Kubernetes強(qiáng)化指南,確保你的集群符合嚴(yán)格的安全要求。
解決的問(wèn)題:確保Kubernetes集群的安全性至關(guān)重要,但由于環(huán)境的復(fù)雜性和動(dòng)態(tài)性,這可能是一項(xiàng)挑戰(zhàn)。Kubescape通過(guò)提供自動(dòng)化的安全掃描來(lái)識(shí)別漏洞、配置錯(cuò)誤和合規(guī)性問(wèn)題,從而簡(jiǎn)化了這一任務(wù)。這有助于管理員維護(hù)一個(gè)安全、合規(guī)的Kubernetes環(huán)境,減少安全漏洞和不合規(guī)的風(fēng)險(xiǎn)。
使用示例:要對(duì)Kubernetes集群執(zhí)行安全掃描,請(qǐng)使用以下命令。
kubescape scan framework nsa --exclude-namespaces kube-system
此命令將根據(jù)NSA Kubernetes強(qiáng)化指南框架對(duì)集群進(jìn)行掃描,不包括kube-system命名空間。
輸出示例:
kubescape掃描結(jié)果的一部分
4. Mirrord
存儲(chǔ)庫(kù)鏈接:https://github.com/metalbear-co/mirrord
類(lèi)別:遠(yuǎn)程開(kāi)發(fā)。
描述:mirrord是一個(gè)遠(yuǎn)程開(kāi)發(fā)工具,支持開(kāi)發(fā)者在Kubernetes集群的上下文中運(yùn)行本地進(jìn)程。這意味著你可以在本地開(kāi)發(fā)和調(diào)試應(yīng)用程序,同時(shí)它們與實(shí)時(shí)Kubernetes資源進(jìn)行交互,就像它們?cè)诩褐羞\(yùn)行一樣。mirrord通過(guò)提供本地和遠(yuǎn)程環(huán)境之間的無(wú)縫橋接,簡(jiǎn)化了開(kāi)發(fā)過(guò)程。
解決的問(wèn)題:由于本地環(huán)境和集群環(huán)境之間的差異,在Kubernetes上開(kāi)發(fā)和調(diào)試應(yīng)用程序可能很困難。mirrord通過(guò)支持開(kāi)發(fā)者在本地運(yùn)行應(yīng)用程序,同時(shí)與Kubernetes集群進(jìn)行無(wú)縫交互來(lái)解決這個(gè)問(wèn)題。這有助于加快調(diào)試、測(cè)試和開(kāi)發(fā)速度,因?yàn)殚_(kāi)發(fā)者可以使用熟悉的本地工具和環(huán)境,而無(wú)需每次更改都將應(yīng)用程序部署到集群。
使用示例:使用mirrord在Kubernetes集群的上下文中運(yùn)行本地進(jìn)程。
mirrord exec --target-namespace devops-team \
--target deployment/foo-app-deployment \
nodemon server.js
5. Kube-linter
存儲(chǔ)庫(kù)鏈接:https://github.com/stackrox/kube-linter
類(lèi)別:Linting。
描述:Kube-linter是一個(gè)靜態(tài)分析工具,用于檢查Kubernetes YAML文件和Helm圖表,以確保它們遵守最佳實(shí)踐和安全指南。它可以在部署資源之前發(fā)現(xiàn)潛在的問(wèn)題,確保你的Kubernetes配置安全高效。
解決的問(wèn)題:編寫(xiě)Kubernetes配置可能很復(fù)雜,即使是小小的錯(cuò)誤也可能導(dǎo)致生產(chǎn)環(huán)境出現(xiàn)嚴(yán)重問(wèn)題。Kube-linter通過(guò)分析你的YAML文件和Helm圖表,以識(shí)別常見(jiàn)錯(cuò)誤、安全風(fēng)險(xiǎn)和違反最佳實(shí)踐的情況來(lái)解決這一問(wèn)題。這種主動(dòng)的方法有助于在開(kāi)發(fā)周期的早期發(fā)現(xiàn)并解決問(wèn)題,從而提高Kubernetes部署的整體質(zhì)量和安全性。
使用示例:要使用Kube-linter對(duì)Kubernetes清單進(jìn)行l(wèi)inting,請(qǐng)運(yùn)行以下命令。
kube-linter lint 1-create-deployment.yaml
kube-lint錯(cuò)誤
6. k3d
存儲(chǔ)庫(kù)鏈接:https://github.com/k3d-io/k3d
類(lèi)別:配置。
描述:k3d是一個(gè)輕量級(jí)包裝器,用于在Docker中運(yùn)行k3s(一個(gè)輕量級(jí)的Kubernetes發(fā)行版)。它支持在Docker容器中創(chuàng)建和管理Kubernetes集群,為開(kāi)發(fā)、測(cè)試和CI/CD目的提供了一種設(shè)置和運(yùn)行k3s集群的簡(jiǎn)便方法。
解決的問(wèn)題:為本地開(kāi)發(fā)和測(cè)試而設(shè)置和管理Kubernetes集群可能很麻煩,而且會(huì)耗費(fèi)大量資源。k3d通過(guò)在Docker容器中運(yùn)行k3s集群來(lái)簡(jiǎn)化這一過(guò)程。這種方法減少了設(shè)置完整虛擬機(jī)或物理服務(wù)器的開(kāi)銷(xiāo),使在本地機(jī)器上創(chuàng)建和管理Kubernetes集群更加容易和快速。
使用示例:要使用k3d創(chuàng)建一個(gè)新的k3s集群,請(qǐng)使用以下命令。
k3d cluster create mycluster
7. Kubeshark
存儲(chǔ)庫(kù)鏈接:https://github.com/kubeshark/kubeshark
類(lèi)別:網(wǎng)絡(luò)可觀察性。
描述:Kubeshark是一個(gè)Kubernetes API流量分析器,提供對(duì)Kubernetes網(wǎng)絡(luò)通信的深度可見(jiàn)性。它捕獲、解析和可視化集群中的網(wǎng)絡(luò)流量,支持監(jiān)控和調(diào)試微服務(wù)之間的交互。
解決的問(wèn)題:在Kubernetes集群中理解和調(diào)試網(wǎng)絡(luò)通信可能很有挑戰(zhàn)性,尤其是在復(fù)雜的微服務(wù)環(huán)境中。Kubeshark通過(guò)提供集群內(nèi)API流量的全面視圖來(lái)解決這個(gè)問(wèn)題。這有助于開(kāi)發(fā)人員和運(yùn)維人員深入了解服務(wù)交互情況、檢測(cè)異常并更有效地排查網(wǎng)絡(luò)問(wèn)題。
使用示例:要開(kāi)始使用Kubeshark捕獲流量,請(qǐng)運(yùn)行以下命令。
kubeshark tap
kubeshark web界面
8. kubectl-tree
存儲(chǔ)庫(kù)鏈接:https://github.com/ahmetb/kubectl-tree
類(lèi)別:插件。
描述:kubectl-tree是一個(gè)kubectl插件,支持將Kubernetes對(duì)象層次結(jié)構(gòu)可視化為樹(shù)狀結(jié)構(gòu)。這個(gè)工具通過(guò)提供一種簡(jiǎn)單的方式來(lái)查看和導(dǎo)航Kubernetes資源(如Pod、Deployment、ReplicaSet等)之間的關(guān)系,增強(qiáng)了kubectl的使用體驗(yàn)。
解決的問(wèn)題:導(dǎo)航和理解Kubernetes資源之間的關(guān)系可能很復(fù)雜,特別是在擁有大量互相關(guān)聯(lián)對(duì)象的大型集群中。kubectl-tree通過(guò)以樹(shù)狀格式顯示資源層次結(jié)構(gòu)來(lái)簡(jiǎn)化這一過(guò)程,使查看和管理資源依賴(lài)關(guān)系更加容易。
使用示例:要可視化crossplane部署的層次結(jié)構(gòu),請(qǐng)使用以下命令。
? kubectl tree deployment crossplane -n crossplane-system
NAMESPACE NAME READY REASON AGE
crossplane-system Deployment/crossplane - 49m
crossplane-system └─ReplicaSet/crossplane-6dcbf47db4 - 49m
crossplane-system └─Pod/crossplane-6dcbf47db4-gzzwp True 49m
9. Flux
存儲(chǔ)庫(kù)鏈接:https://github.com/fluxcd/flux
類(lèi)別:GitOps。
描述:Flux是一套用于Kubernetes的持續(xù)和漸進(jìn)式交付解決方案。它自動(dòng)化部署資源,并根據(jù)存儲(chǔ)在Git存儲(chǔ)庫(kù)中的配置同步集群狀態(tài),遵循GitOps原則。Flux確保Kubernetes集群的預(yù)期狀態(tài)(定義在版本控制的配置文件中)得到持續(xù)維護(hù)和更新。
解決的問(wèn)題:手動(dòng)管理Kubernetes配置和部署可能會(huì)導(dǎo)致錯(cuò)誤并難以審核。Flux通過(guò)自動(dòng)化Git存儲(chǔ)庫(kù)與Kubernetes集群之間的同步來(lái)解決這個(gè)問(wèn)題。將Git視為唯一真實(shí)來(lái)源,F(xiàn)lux確保集群狀態(tài)與配置文件一致,從而實(shí)現(xiàn)可追溯性、可審核性和更易回滾更改。通過(guò)利用版本控制,這種方法還能促進(jìn)團(tuán)隊(duì)成員之間的協(xié)作。
使用示例:要在Kubernetes集群中安裝Flux并將其連接到Git存儲(chǔ)庫(kù),請(qǐng)按以下步驟操作。
fluxctl identity --k8s-fwd-ns flux
fluxctl sync --k8s-fwd-ns flux
10. Kubecost
存儲(chǔ)庫(kù)鏈接:https://github.com/opencost/opencost
類(lèi)別:成本管理
描述:Kubecost是一個(gè)用于Kubernetes集群的成本監(jiān)控和優(yōu)化工具。它提供了Kubernetes工作負(fù)載成本和資源使用情況的實(shí)時(shí)洞察。Kubecost可以幫助你準(zhǔn)確分配成本、優(yōu)化資源利用率,并通過(guò)識(shí)別低效率和未使用的資源來(lái)降低整體云支出。此外,Kubecost集成了OpenCost,這是一個(gè)用于Kubernetes的開(kāi)源成本監(jiān)控和管理項(xiàng)目。
【OpenCost】:https://www.opencost.io/docs/
解決的問(wèn)題:由于容器化工作負(fù)載的動(dòng)態(tài)特性和云計(jì)費(fèi)的復(fù)雜性,在Kubernetes環(huán)境中管理成本可能很有挑戰(zhàn)性。Kubecost通過(guò)提供詳細(xì)的成本明細(xì)、使用報(bào)告和優(yōu)化建議來(lái)解決這一問(wèn)題。這有助于企業(yè)了解Kubernetes支出情況、做出資源分配的明智決策,并識(shí)別降低成本的機(jī)會(huì)。
使用示例:將Kubecost部署到Kubernetes集群后,你可以訪問(wèn)儀表板查看成本報(bào)告,按命名空間、標(biāo)簽和部署分配成本,并獲得優(yōu)化資源使用的建議。與OpenCost的集成進(jìn)一步增強(qiáng)了這些功能,提供了標(biāo)準(zhǔn)化的成本監(jiān)控和管理功能。
11. 額外補(bǔ)充
綜上所述,重點(diǎn)介紹了十個(gè)Kubernetes的必備工具,但還有許多其他工具可以大大提升你的Kubernetes體驗(yàn)。這些額外的工具提供了各種功能,從管理已棄用的API到促進(jìn)遠(yuǎn)程開(kāi)發(fā)等等。以下是你可能會(huì)發(fā)現(xiàn)很有價(jià)值的其他工具列表:
工具名稱(chēng) | 說(shuō)明 | 存儲(chǔ)庫(kù) |
K9s | 基于終端的Kubernetes集群管理UI | |
kube-no-trouble | 檢查已棄用的API | |
kaniko | 在Kubernetes集群中構(gòu)建容器鏡像 | |
arkade | 便攜式Kubernetes市場(chǎng) | |
helmfile | 管理Kubernetes Helm Chart | |
kdash | Kubernetes終端儀表板 | |
werf | 適用于Kubernetes的GitOps CI/CD工具 | |
kluctl | Kubernetes部署工具 | |
cilium | Kubernetes的網(wǎng)絡(luò)、安全和可觀察性 | |
kubeflow | Kubernetes機(jī)器學(xué)習(xí)工具包 | |
k8sgpt | 基于GPT的Kubernetes助手 |
總結(jié)
Kubernetes剛剛慶祝了成立十周年,很明顯這個(gè)生態(tài)系統(tǒng)比以往任何時(shí)候都更加強(qiáng)大和充滿活力。Kubernetes已經(jīng)發(fā)展成為云原生行業(yè)的關(guān)鍵組成部分,使企業(yè)能夠高效、可靠地大規(guī)模管理其容器化應(yīng)用程序。
在以上內(nèi)容中提及的工具,從用于檢測(cè)配置問(wèn)題的Popeye到用于成本管理的Kubecost,展示了Kubernetes生態(tài)系統(tǒng)的多樣性和深度。每個(gè)工具都解決了特定的挑戰(zhàn),有助于優(yōu)化或保護(hù)Kubernetes部署。這些工具的大量出現(xiàn)凸顯了Kubernetes生態(tài)系統(tǒng)的動(dòng)態(tài)性質(zhì),以及并非每個(gè)領(lǐng)域都已建立良好的標(biāo)準(zhǔn)。這種多樣性使得定制解決方案能夠滿足不同組織和用例的特定需求。
展望未來(lái),Kubernetes將為更多的全球基礎(chǔ)設(shè)施提供動(dòng)力。隨著邊緣計(jì)算、無(wú)服務(wù)器架構(gòu)和AI驅(qū)動(dòng)的運(yùn)營(yíng)等新趨勢(shì)的出現(xiàn),Kubernetes將繼續(xù)適應(yīng)和發(fā)展。生態(tài)系統(tǒng)通過(guò)各種工具和解決方案來(lái)促進(jìn)創(chuàng)新的能力將是滿足未來(lái)云原生環(huán)境需求的關(guān)鍵。