Kubernetes的核心優(yōu)勢是為應(yīng)用程序開發(fā)人員提供強大的工具來編排無狀態(tài)的Docker容器。雖然有多個計劃將項目的范圍擴展到更多的工作負(fù)載(如分析和有狀態(tài)的數(shù)據(jù)服務(wù)),但這些計劃仍然處于非常早期的階段,還有待觀察。
Apache Mesos
Apache Mesos最初是UCBerkeley為創(chuàng)建下一代集群管理器而誕生的項目,并從如谷歌的Borg和Facebook的Tupperware中吸取經(jīng)驗教訓(xùn)。但是Borg和Tupperware是單體架構(gòu),并且是和物理基礎(chǔ)設(shè)施綁定的封源專有技術(shù)。Mesos引入了模塊化架構(gòu),采用開源的方法,且其設(shè)計完全獨立于底層基礎(chǔ)架構(gòu)?;谶@些因素,Mesos很快被Twitter、Apple(Siri)、Yelp、Uber、Netflix以及許多領(lǐng)先的科技公司所采用,以支持他們在微服務(wù)、大數(shù)據(jù)和實時分析到彈性伸縮的一切實踐。
作為一個集群管理器,Mesos的架構(gòu)是為了解決一組非常不同的挑戰(zhàn):
1.將數(shù)據(jù)中心資源整合成一個單一的池,以簡化資源配置,同時在私有或公共云之間提供一致的應(yīng)用程序和操作體驗;
2.在相同的基礎(chǔ)設(shè)施上使用不同的工作負(fù)載,比如分析、無狀態(tài)微服務(wù)、分布式數(shù)據(jù)服務(wù)和傳統(tǒng)應(yīng)用程序,以提高利用率,降低成本和空間;
3.特定應(yīng)用程序的任務(wù)(如部署、自修復(fù)、擴展和升級)設(shè)置為自動化day-two 操作;提供高可用的容錯基礎(chǔ)設(shè)施;
4.在不修改集群管理器或現(xiàn)有應(yīng)用程序的情況下,提供常綠的可擴展性來運行新的應(yīng)用程序和技術(shù);
5.將應(yīng)用程序和底層基礎(chǔ)設(shè)施彈性擴展到數(shù)萬個節(jié)點。
Mesos的獨特之處還在于,可以單獨管理各種不同的工作負(fù)載——包括傳統(tǒng)的應(yīng)用程序,如Java、無狀態(tài)Docker微服務(wù)、批處理作業(yè)、實時分析和有狀態(tài)的分布式數(shù)據(jù)服務(wù)。Mesos廣泛的工作負(fù)載覆蓋來自于它的兩級架構(gòu),它支持“應(yīng)用感知”的調(diào)度。應(yīng)用感知調(diào)度是通過將應(yīng)用程序特定操作邏輯封裝到“Mesos框架”(類似于運行中的runbook)來完成的。
Mesos Master資源管理器,提供這些底層基礎(chǔ)設(shè)施的框架部分,同時保持隔離。這種方法允許每個工作負(fù)載有自己專用的應(yīng)用程序調(diào)度器,它了解其對部署、縮放和升級的具體操作需求。應(yīng)用程序調(diào)度程序也獨立地被開發(fā)、管理和更新,這讓Mesos保持高度可擴展性,支持新的工作負(fù)載,或者隨著時間的推移增加更多的操作能力。
以一個團隊如何管理升級為例。無狀態(tài)應(yīng)用程序可以從“藍(lán)/綠”部署方法中獲益;當(dāng)舊的應(yīng)用程序還在使用的時候,另一個完整版本的應(yīng)用程序已經(jīng)spun up,當(dāng)舊的應(yīng)用程序被銷毀時,流量切換到新的應(yīng)用程序。但是,升級像HDFS或Cassandra這樣的數(shù)據(jù)工作負(fù)載需要一次脫機,維護本地數(shù)據(jù)量以避免數(shù)據(jù)丟失,執(zhí)行特定序列的升級,并在升級之前和之后對每個節(jié)點類型執(zhí)行特殊檢查和命令。這些步驟中的所有環(huán)節(jié)針對特定的應(yīng)用程序或服務(wù),甚至是特定版本進(jìn)行的。這使得用常規(guī)容器編排調(diào)度器管理數(shù)據(jù)服務(wù)變得非常困難。
Mesos具備按需管理每個工作負(fù)載的能力,使得許多公司將Mesos作為一個統(tǒng)一的平臺,并通過其將微服務(wù)和數(shù)據(jù)服務(wù)結(jié)合運行。運行數(shù)據(jù)密集型應(yīng)用程序的一個通用參考架構(gòu)是“SMACK堆棧”。
清晰時刻
注意:我們在描述Apache Mesos的過程中,沒有提及任何關(guān)于容器編排的內(nèi)容。那么,為什么人們總是會將Mesos與容器編排聯(lián)系起來呢?容器編排是一個可以在Mesos模塊化架構(gòu)上運行的工作負(fù)載的例子,它使用的是構(gòu)建在Mesos上的一個專門的編排“框架”Marathon。Marathon最初是為了在cgroup容器中編排應(yīng)用程序(如JARs、tarball、ZIP文件)而開發(fā)的,并且在2014年成為第一批支持Docker容器的容器編排之一。
因此,當(dāng)人們拿Docker、Kubernetes和Mesos比較時,他們實際上是在對比Kubernetes、Docker Swarm和Mesos上運行的Marathon。
為什么這很重要?因為Mesos根本不關(guān)心上面跑的是什么。Mesos可以為Java應(yīng)用服務(wù)器、Docker容器編排、Jenkins CI Jobs, Apache Spark analytics, Apache Kafka streaming以及更多的共享基礎(chǔ)設(shè)施提供集群服務(wù)。Mesos甚至可以運行Kubernetes或其他容器編排,盡管還沒有對外集成。
Mesos的另一個考慮(以及為什么它對許多企業(yè)架構(gòu)師有吸引力)是它在運行任務(wù)關(guān)鍵工作負(fù)載時的成熟度。Mesos已經(jīng)在大規(guī)模生產(chǎn)環(huán)境下運行(數(shù)萬臺服務(wù)器)超過7年,這就是為什么它比市場上其他技術(shù)更成熟,更可靠的原因。