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