為什么你不應(yīng)該使用Kubernetes?
Kubernetes是否真的適合您的棧?
許多團(tuán)隊(duì)很高興開始使用Kubernetes。 一些人對(duì)Kubernetes本身提供的彈性,彈性,可移植性,可靠性和其他優(yōu)勢感興趣。 有些人是技術(shù)愛好者,他們只是想有機(jī)會(huì)使用該平臺(tái),以進(jìn)一步了解它。 一些開發(fā)人員希望獲得使用它的經(jīng)驗(yàn),因此他們可以在簡歷中添加另一項(xiàng)非常需要的技能。 通常,如今,大多數(shù)開發(fā)人員都希望在某個(gè)時(shí)候與Kubernetes一起工作。
那可能是一個(gè)非常好的主意,但事實(shí)并非如此。
Kubernetes旨在解決分布式架構(gòu)問題
根據(jù)官方文檔網(wǎng)站的定義:
" Kubernetes為您提供了一個(gè)框架,可以彈性地運(yùn)行分布式系統(tǒng)。 它負(fù)責(zé)為應(yīng)用程序擴(kuò)展和故障轉(zhuǎn)移,提供部署模式等。" |
它不是專門為分布式系統(tǒng)而設(shè)計(jì)的,而是為容器化應(yīng)用程序制造的。 即使這樣,它的確提供了許多資源,使諸如Microservices解決方案之類的分布式系統(tǒng)的管理和擴(kuò)展變得更容易。 它也被視為編排系統(tǒng)。
自動(dòng)化和編排是不同的,但是相關(guān)的概念。 自動(dòng)化通過減少或取代與IT系統(tǒng)的人工交互,而是使用軟件執(zhí)行任務(wù)來降低成本,復(fù)雜性和錯(cuò)誤,從而幫助您提高業(yè)務(wù)效率。
通常,自動(dòng)化是指使單個(gè)任務(wù)自動(dòng)化。 這與業(yè)務(wù)流程不同,業(yè)務(wù)流程是您可以自動(dòng)執(zhí)行涉及多個(gè)不同系統(tǒng)中許多步驟的流程或工作流的方法。 當(dāng)您開始將自動(dòng)化構(gòu)建到流程中時(shí),可以將它們編排為自動(dòng)運(yùn)行。
—什么是編排? RedHat官方網(wǎng)站
換句話說,Kubernetes使管理復(fù)雜的解決方案變得更加容易,而如果沒有適當(dāng)?shù)木幣畔到y(tǒng),這些解決方案將很難維護(hù)。 雖然您可以自己實(shí)施DevOps工程實(shí)踐,但如果要從數(shù)十種服務(wù)擴(kuò)展到數(shù)百種服務(wù),則無法擴(kuò)展。
Kubernetes很復(fù)雜
為了利用其功能,開發(fā)人員和IT運(yùn)營商必須具有容器,網(wǎng)絡(luò),安全性,可移植性,彈性和Kubernetes本身的知識(shí)。 為了正確利用其工作負(fù)載,您應(yīng)該了解每個(gè)組件的工作方式。 要管理集群,您應(yīng)該了解其架構(gòu),存儲(chǔ),API和管理系統(tǒng),這與傳統(tǒng)的虛擬化環(huán)境有很大的不同。 為了擴(kuò)展該解決方案,您應(yīng)該學(xué)習(xí)如何集成工具來部署,監(jiān)視和跟蹤服務(wù),例如Helm和Istio。 在那里添加了許多新概念,因此您的團(tuán)隊(duì)必須為應(yīng)對(duì)這一挑戰(zhàn)做好準(zhǔn)備。
Kubernetes的小型解決方案價(jià)格昂貴
為了理解原因,讓我們強(qiáng)化Kubernetes的關(guān)鍵概念之一-彈性。 要利用此優(yōu)勢,您需要其他節(jié)點(diǎn)-超出運(yùn)行應(yīng)用程序所需的最小數(shù)量。 如果某個(gè)節(jié)點(diǎn)發(fā)生故障,則請(qǐng)求的Pod將重定位到可用節(jié)點(diǎn)。 對(duì)于生產(chǎn)工作負(fù)載,建議至少三個(gè)節(jié)點(diǎn)具有彈性。
不難想象,如果您只托管一個(gè)應(yīng)用程序,那是不值得的。 但是,即使您擁有十個(gè)或更多,您也必須考慮群集的成本是否值得維護(hù)它。
維護(hù)環(huán)境的成本還包括運(yùn)營支持。 平臺(tái)越復(fù)雜,就應(yīng)該涉及更多的專業(yè)人士。 這可能意味著雇用第三方專業(yè)公司來提供支持或包含Openshift之類的支持服務(wù)的解決方案。
何時(shí)選擇Kubernetes
根據(jù)您使用的體系結(jié)構(gòu),應(yīng)用程序的數(shù)量以及它們之間的依賴程度以及團(tuán)隊(duì)的運(yùn)營能力,可以檢查Kubernetes是否是所有可用技術(shù)中的合適選擇。

借助用于容器的Web Apps,您將獲得完全可用于生產(chǎn)環(huán)境。 借助標(biāo)準(zhǔn)計(jì)劃,SSL功能和應(yīng)用程序見解,您無需任何操作即可擁有一個(gè)安全,可擴(kuò)展和受監(jiān)視的環(huán)境。
如果僅處理隔離的應(yīng)用程序或少量連接的應(yīng)用程序,則將Azure Web Apps和在同一虛擬網(wǎng)絡(luò)中運(yùn)行的容器實(shí)例組合在一起可能就足夠了。
另一方面,如果您有越來越多的容器化應(yīng)用程序,將它們托管在Kubernetes中會(huì)很有趣。 您將能夠在一個(gè)集中式環(huán)境中托管多種類型的應(yīng)用程序,例如Web應(yīng)用程序,API和重復(fù)性作業(yè)。 您的團(tuán)隊(duì)將能夠?qū)W⒂贙ubernetes,而不是幾個(gè)云原生的解決方案。
如果您要處理諸如微服務(wù)之類的分布式方案,那就去吧。 分布式架構(gòu)非常復(fù)雜,而Kubernetes旨在使其變得更容易。 除了Kubernetes,我無法認(rèn)為其他任何平臺(tái)對(duì)于分布式應(yīng)用程序來說都是完整且可擴(kuò)展的。
結(jié)論
當(dāng)您處理少量的容器化應(yīng)用程序,相互隔離或彼此之間沒有依賴性時(shí),其他主機(jī)選項(xiàng)(例如用于容器的Azure Web Apps或Azure容器實(shí)例)或它們的組合可能更簡單,甚至更便宜。
如果您的團(tuán)隊(duì)對(duì)Kubernetes感到滿意,并且您擁有越來越多的容器化應(yīng)用程序,則值得在單個(gè)Kubernetes平臺(tái)(例如Azure Kubernetes服務(wù))中集中托管。
Kubernetes是一個(gè)旨在提高性能并減少分布式系統(tǒng)的操作量的平臺(tái)。 基本上,這使復(fù)雜的場景(如微服務(wù))的操作復(fù)雜度降低了。
如果您處理的不是很多應(yīng)用程序,不使用分布式體系結(jié)構(gòu)或沒有專業(yè)人員在職,那么您將無法利用Kubernetes提供的優(yōu)勢-因?yàn)樗皇菫槟?。 您最終將給解決方案增加意外和不必要的復(fù)雜性。