
復雜性會(huì )要了Kubernetes的命嗎?
Kubernetes不會(huì )是因自身重量而崩潰的第一個(gè)大型開(kāi)源項目,但支持者稱(chēng)Kubernetes的情況不一樣。
Kubernetes目前可能是開(kāi)源人士的寵兒,但此前的Hadoop同樣一度備受推崇。Hadoop最終壽終正寢,就因為用起來(lái)特別難。雖說(shuō)Kubernetes取得了長(cháng)足進(jìn)步,但正如第一資本公司(Capital One)的Bernard Golden所說(shuō),“運作起來(lái)仍然不是件輕松愉快的事兒”。這么說(shuō)已很委婉了,有人毫不客氣地稱(chēng)Kubernetes“體驗讓人討厭得要命”。
Kubernetes正迎來(lái)類(lèi)似Hadoop的結局嗎?
可能不是。Hadoop日益變得更復雜,但Kubernetes變得越來(lái)越容易。雖然Kubernetes本身可能永遠不會(huì )“很容易”,但其復雜性與Hadoop的復雜性大不一樣,這為Kubernetes在未來(lái)幾年仍是一種行業(yè)標準鋪平了道路。
Hadoop,越來(lái)越復雜
不妨先來(lái)說(shuō)說(shuō)Hadoop。Apache Hadoop在大致相當于“MapReduce”時(shí)異常復雜。不過(guò)隨著(zhù)時(shí)間的推移,Hadoop在不斷演變;雖然這種演變帶來(lái)了功能更強大的選擇,但那些選擇數量激增。它們也未必很容易協(xié)同運行。正如Tom Barber所說(shuō):“Hadoop實(shí)際上做什么? MapReduce被Spark取代,Spark又被其他東西取代,依次類(lèi)推。當然你可以插入很多組件,但它依然很笨拙。”
為何笨拙?VMware的Jared Rosoff精辟地分析了這個(gè)問(wèn)題:“Hadoop的復雜性來(lái)自這個(gè)事實(shí),即典型的Hadoop環(huán)境基本上由幾十個(gè)獨立而復雜的系統組成,這些系統有著(zhù)不同的生命周期和管理模型。”Flume、Chukwa、Hive、Pig和ZooKeeper等等。這些名字聽(tīng)起來(lái)不錯,但讓它們協(xié)同運行起來(lái)如同噩夢(mèng)。Host Analytics的首席執行官Dave Kellogg認為,Hadoop是“一整套復雜的解決方案”,所有這種復雜性來(lái)源于用戶(hù)。
然而,與Kubernetes最不一樣的是用于擴展Hadoop的模型。正如Rosoff特別指出,“Hadoop并沒(méi)有考慮人們會(huì )如何擴展它,結果出現的生態(tài)系統包括不相兼容的擴展件。”他繼續說(shuō),與之相反,“Kubernetes做得很好的一點(diǎn)是,精心設計了擴展Kubernetes的方式。容器運行時(shí)接口(CRI)/容器存儲接口(CSI)/容器網(wǎng)絡(luò )接口(CNI),這些operator確保隨著(zhù)更多的供應商加入進(jìn)來(lái),它們在以合理有序的方式加入。”換句話(huà)說(shuō),不像Hadoop及其不兼容的擴展件,“Kubernetes在擁有眾多operator后仍然是Kubernetes。”
Kubernetes,可控的復雜性
這倒不是說(shuō)Kubernetes很簡(jiǎn)單。作為Kubernetes的開(kāi)發(fā)者之一,Heptio(VMware)的Joe Beda完全有資格宣稱(chēng)“Kubernetes是個(gè)復雜的系統。”他繼續說(shuō),這種復雜性多少必不可少,因為“它做了很多事,帶來(lái)了新的抽象。”每個(gè)人一直都需要所有這些抽象(和花哨的附加功能)嗎?并非如此。“我確信許多使用Kubernetes的人使用較簡(jiǎn)單的技術(shù)也能應付過(guò)去。”
Beda強調,不過(guò)對于那些需要Kubernetes的人來(lái)說(shuō),Kubernetes未必比人們已經(jīng)熟悉的其他系統來(lái)得復雜。可能一個(gè)是“新的”復雜系統,另一個(gè)是“舊而舒適”的復雜系統:
作為工程師,我們往往低估我們自己帶來(lái)的復雜性,高估我們需要學(xué)習的復雜性。如果你使用Jenkins、Bash、Puppet/Chef/Salt/Ansible、AWS和Terraform等創(chuàng )建一套復雜的部署系統,最終會(huì )得到你感到舒適的獨特的復雜性系統。它有機地生長(cháng),因此不覺(jué)得復雜。
但是請外人幫助開(kāi)發(fā)這樣一個(gè)有機生長(cháng)的系統很困難。他們可能知道一些工具,但你把它們組合起來(lái)的方式卻是獨一無(wú)二的。竊以為,這就是Kubernetes增值的地方。Kubernetes提供了解決一組常見(jiàn)問(wèn)題的一組抽象。隨著(zhù)人們圍繞那些問(wèn)題加深理解、增強技能,他們在更多的情況下會(huì )更有成效。仍面臨陡峭的學(xué)習曲線(xiàn)!但是這種技能組合現在很寶貴,在諸多環(huán)境、項目和工作之間可以移植。
明白要點(diǎn)了嗎?與存在于你可能在X公司構建的某個(gè)部署系統中的復雜性不同,你在Kubernetes方面遇到的復雜性可以跟隨你從一個(gè)公司到另一個(gè)公司。這么一來(lái),它的復雜性變得比其他這些系統低得多,因為知識可以移植。換句話(huà)說(shuō),“學(xué)習一次,到處適用。”
學(xué)習一次,到處適用
反過(guò)來(lái),這種學(xué)習比Hadoop要容易得多。與Hadoop不同,Kubernetes是一個(gè)更容易熟悉起來(lái)的系統,這一方面是由于它可以運行的場(chǎng)景。正如Gareth Rushgrove所寫(xiě),“你可以在本地運行Kubernetes,比其他類(lèi)似的例子(Docker Desktop、Kind和MicroK8s)要容易得多。降低準入門(mén)檻使人們更容易熟悉起來(lái),這降低了感知的復雜性。”
正如云原生計算基金會(huì )的首席技術(shù)官Chris Aniszczyk強調的那樣,這點(diǎn)也有所幫助:雖然“分布式系統本質(zhì)上很復雜,但Kubernetes的優(yōu)勢在于,全球各大云提供商和多家供應商都提供Kubernetes合規/認證的托管版本(無(wú)分支),幫助大多數用戶(hù)應對大規模管理的復雜性。”盡管如此,Tamal Saha表示,可能重要的問(wèn)題是“從Kubernetes試圖解決的問(wèn)題來(lái)看,Kubernetes是否很復雜。”對他來(lái)說(shuō),答案是否定的。
“Kubernetes會(huì )淪為Hadoop嗎?”這個(gè)問(wèn)題的答案也是否定的。Kubernetes已經(jīng)過(guò)了那個(gè)階段。是的,正如一位評論人士所說(shuō),Kubernetes是“一種復雜的編排工具,并不適用于所有使用場(chǎng)景。就像我們行業(yè)的眾多工具一樣,學(xué)習、使用和理解也需要花時(shí)間。‘幾小時(shí)’是不夠的。”這是解決復雜問(wèn)題的復雜工具。正如Beda所說(shuō),但存在“有意的復雜性和偶發(fā)的復雜性”。Hadoop飽受后者之苦,而Kubernetes面臨的是前者。
由于諸如此類(lèi)的原因,我們會(huì )看到Kubernetes繼續作為容器編排領(lǐng)域的行業(yè)標準而蓬勃發(fā)展。