總扯淡技術的重疊特性,帶著你重新認識Docker、Kubernetes、Apache Mesos
無數的文章、社交媒體在探討Docker、Kubernetes、Mesos三者之間孰優孰劣。如果你聽信了某些一知半解者的言論,你可能會認為這三個開源項目正在為爭奪容器霸權而殊死戰鬥。同時,你也會相信,在這三者間的選擇無異於對其所奉宗教的信仰,而且真正的信徒敢於大膽和異教徒作鬥爭,並且擁護自己的信仰。
那些都是扯淡。
雖然這三種技術都可以使用容器來部署、管理和擴展應用程序,但實際上它們每個都側重解決不同的問題,並且紮根非常不同的環境之上。事實上,這三種被廣泛採用的工具鏈彼此完全不同。
與其比較這些快速演進的技術的重疊特性,不如讓我們回顧一下每個項目的原始任務、架構以及它們之間如何相互補充和交互。
讓我們從Docker開始
今天的Docker公司脫胎於一個平台即服務的初創公司dotCloud。dotCloud團隊發現,在許多應用程序和客戶之間管理依賴關係和二進位文件需要做大量的工作。因此,他們將Linux cgroups和namespaces的一些功能組合成一個簡單易用的包,這樣應用程序就可以在任何基礎設施上持續運行。這個包就是Docker鏡像,它提供以下功能:
將應用程序和庫封裝在單個包中(Docker鏡像),因此應用程序可以跨多環境一致部署;
提供類似於git的語義,例如「dockerpush」,「docker commit」,這樣可以讓應用程序開發人員可以輕鬆地採用新技術,並將其融入到現有的workflow中;
將Docker鏡像定義為不可變層,啟用不可變的基礎設施。提交的更改被存儲為一個單獨的只讀層,這讓鏡像復用和跟蹤更改變得更加容易。另外,層還可以通過傳輸更新而不是整個鏡像來節省磁碟空間和網路流量;
通過使用可以臨時存儲運行時更改的可寫層來實例化不可變映像,從而方便快速部署和擴展應用程序的多個實例。
隨著Docker的風靡,開發人員開始從筆記本電腦轉移到在生產環境中運行。這就需要藉助工具來協調這些容器,我們稱為容器編排。有趣的是,Apache Mesos的馬拉松稱為當時(2014年6月)第一個支持Docker鏡像的容器編排工具(我們將在下面詳細描述它)。就連Docker創始人、首席技術官Solomon Hykes也推薦Mesos為「生產集群的黃金標準」。不久之後,除了馬拉松之外,許多容器編排技術出現了,這其中包括:Nomad、Kubernetes、DockerSwarm(現在是Docker引擎的一部分)。
隨著Docker開始商業化開源文件格式,該公司也開始引入工具來補充核心Docker文件格式和runtime引擎,包括:
Dockerhub
Docker registry
Docker cloud
Dockerdatacenter
Docker讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中的特性,使其成為軟體行業的遊戲規則改變者;這有點類似mp3格式幫助重塑了音樂產業。Docker文件格式成為行業標準,並且領導容器技術供應商(包括Docker、Pivotal, Mesosphere以及其他許多)成立CNCF和OCI。今天,CNCF和OCI的目標就是確保跨容器技術的互操作性和標準化介面,並確保使用任何工具構建的Docker容器,都可以在任何runtime或基礎設施上運行。
Kubernetes
谷歌很早就認識到Docker鏡像的潛力,並試圖在谷歌雲平台上交付「容器編排即服務」。谷歌在容器方面有豐富的經驗(他們在Linux中引入了cgroups),但是現有的內部容器和像Borg這樣的分散式計算工具與它們的基礎設施直接耦合。因此,谷歌沒有使用現有系統中的任何代碼,而是從頭開始設計了Kubernetes,以編排Docker容器。Kubernetes於2015年2月發布,並提出以下目標和考慮:
為應用程序開發人員提供一個強大的工具,用於Docker容器編排,而不必與底層基礎設施交互;
跨雲環境下,為一致的應用程序部署經驗和APIs 提供標準部署介面和原型;
構建一個模塊化的API核心,允許供應商圍繞核心Kubernetes技術集成系統。
截至2016年3月,谷歌向CNCF捐贈了Kubernetes,至今谷歌仍是該項目的主要貢獻者(其次是Redhat、CoreOS等)。
Kubernetes對應用程序開發人員非常有吸引力,因為它減少了對基礎設施和操作團隊的依賴。供應商也非常喜歡Kubernetes,因為它提供了一種簡單的方式來讓他們擁抱容器運動,並為他們運行自己的Kubernetes部署提供一個商業化解決方案。Kubernetes之所以很有吸引力,因為它是CNCF下的開源項目,與Docker集群相比,後者雖然是開源的,但卻受到Docker Inc .的嚴格控制。
Kubernetes的核心優勢是為應用程序開發人員提供強大的工具來編排無狀態的Docker容器。雖然有多個計劃將項目的範圍擴展到更多的工作負載(如分析和有狀態的數據服務),但這些計劃仍然處於非常早期的階段,還有待觀察。
Apache Mesos
Apache Mesos最初是UCBerkeley為創建下一代集群管理器而誕生的項目,並從如谷歌的Borg和Facebook的Tupperware中吸取經驗教訓。但是Borg和Tupperware是單體架構,並且是和物理基礎設施綁定的封源專有技術。Mesos引入了模塊化架構,採用開源的方法,且其設計完全獨立於底層基礎架構。基於這些因素,Mesos很快被Twitter、Apple(Siri)、Yelp、Uber、Netflix以及許多領先的科技公司所採用,以支持他們在微服務、大數據和實時分析到彈性伸縮的一切實踐。
作為一個集群管理器,Mesos的架構是為了解決一組非常不同的挑戰:
將數據中心資源整合成一個單一的池,以簡化資源配置,同時在私有或公共雲之間提供一致的應用程序和操作體驗;
在相同的基礎設施上使用不同的工作負載,比如分析、無狀態微服務、分散式數據服務和傳統應用程序,以提高利用率,降低成本和空間;
特定應用程序的任務(如部署、自修復、擴展和升級)設置為自動化day-two 操作;提供高可用的容錯基礎設施;
在不修改集群管理器或現有應用程序的情況下,提供常綠的可擴展性來運行新的應用程序和技術;
將應用程序和底層基礎設施彈性擴展到數萬個節點。
Mesos的獨特之處還在於,可以單獨管理各種不同的工作負載——包括傳統的應用程序,如Java、無狀態Docker微服務、批處理作業、實時分析和有狀態的分散式數據服務。Mesos廣泛的工作負載覆蓋來自於它的兩級架構,它支持「應用感知」的調度。應用感知調度是通過將應用程序特定操作邏輯封裝到「Mesos框架」(類似於運行中的runbook)來完成的。
Mesos Master資源管理器,提供這些底層基礎設施的框架部分,同時保持隔離。這種方法允許每個工作負載有自己專用的應用程序調度器,它了解其對部署、縮放和升級的具體操作需求。應用程序調度程序也獨立地被開發、管理和更新,這讓Mesos保持高度可擴展性,支持新的工作負載,或者隨著時間的推移增加更多的操作能力。
以一個團隊如何管理升級為例。無狀態應用程序可以從「藍/綠」部署方法中獲益;當舊的應用程序還在使用的時候,另一個完整版本的應用程序已經spun up,當舊的應用程序被銷毀時,流量切換到新的應用程序。但是,升級像HDFS或Cassandra這樣的數據工作負載需要一次離線,維護本地數據量以避免數據丟失,執行特定序列的升級,並在升級之前和之後對每個節點類型執行特殊檢查和命令。這些步驟中的所有環節針對特定的應用程序或服務,甚至是特定版本進行的。這使得用常規容器編排調度器管理數據服務變得非常困難。
Mesos具備按需管理每個工作負載的能力,使得許多公司將Mesos作為一個統一的平台,並通過其將微服務和數據服務結合運行。運行數據密集型應用程序的一個通用參考架構是「SMACK堆棧」。
清晰時刻
注意:我們在描述Apache Mesos的過程中,沒有提及任何關於容器編排的內容。那麼,為什麼人們總是會將Mesos與容器編排聯繫起來呢?容器編排是一個可以在Mesos模塊化架構上運行的工作負載的例子,它使用的是構建在Mesos上的一個專門的編排「框架」Marathon。Marathon最初是為了在cgroup容器中編排應用程序(如JARs、tarball、ZIP文件)而開發的,並且在2014年成為第一批支持Docker容器的容器編排之一。
因此,當人們拿Docker、Kubernetes和Mesos比較時,他們實際上是在對比Kubernetes、Docker Swarm和Mesos上運行的Marathon。
為什麼這很重要?因為Mesos根本不關心上面跑的是什麼。Mesos可以為Java應用伺服器、Docker容器編排、Jenkins CI Jobs, Apache Spark analytics, Apache Kafka streaming以及更多的共享基礎設施提供集群服務。Mesos甚至可以運行Kubernetes或其他容器編排,儘管還沒有對外集成。
Mesos的另一個考慮(以及為什麼它對許多企業架構師有吸引力)是它在運行任務關鍵工作負載時的成熟度。Mesos已經在大規模生產環境下運行(數萬台伺服器)超過7年,這就是為什麼它比市場上其他技術更成熟,更可靠的原因。
這一切意味著什麼?
總之,這三種技術都與Docker容器有關,並允許您訪問容器編排,以獲得應用程序的可移植性和伸縮性。那麼在這三者間要如何選擇呢?這就要視不同的工作環境需求而定,工作需求不同,所適用的工具自然也是各不相同。如果您是一名應用程序開發人員,並且正在尋找一種現代的方法來構建和打包您的應用程序,或者加快微服務項目,那麼Docker容器格式和開發工具是你最好的選擇。
如果你是一個dev / devops團隊,想要構建一個專門的docker容器編排系統,並願意親自動手讓你的解決方案和底層基礎設施集成(或依賴於公共雲基礎設施如谷歌引擎或Azure容器服務),Kubernetes將是你一個很好的選項。
如果您想構建一個可靠的平台,用以運行多任務關鍵工作負載,包括Docker容器、遺留應用程序(例如Java)和分散式數據服務(例如Spark、Kafka、Cassandra、Elastic),並希望所有這些都可以在雲或數據中心上可移植,那麼,Mesos是最適合你的。
無論你作何選擇,你所擁抱的一系列工具都將提升你的伺服器資源利用率,同時簡化應用程序移植,並提高開發人員的敏捷性。你真的值得擁有!
點擊展開全文
※我用Python做了六百萬字的歌詞分析,告訴你中國Rapper都在唱些啥
※DB-Engines 2017年8月資料庫排行榜:Oracle仍居首位,MySQL反超惹關注
※獨家|周志華:深度學習很有用,但過度追捧就有危險了
TAG:CSDN |
※重疊 Swoosh 極其搶眼!Parra x Nike SB Blazer Low 本月亮相
※雙層鞋舌 + 重疊 Swoosh!Sacai x Nike 實物美圖欣賞
※三色重疊 Swoosh!全新 Parra x Nike Dunk SB Low 今年夏季發售
※利用Chan-Vese模型和Sobel運算對重疊葉片進行圖像分割
※重疊 Swoosh 設計又來了!這雙 Air Force 1 限量一百雙!
※三色重疊 Swoosh!大神聯名Dunk SB 即將來襲!
※Hani表示很高興和Arin活動重疊
※誇張的重疊鞋型設計!Sacai x Nike 系列上腳果然與眾不同
※像素roguelike射擊手游《比特小隊》即將上架 平行宇宙交錯重疊
※無處不在的重疊設計!Sacai x Nike 聯名跑鞋下月即將發售
※【乾貨】如何查看Fcebook不同受眾的重疊率?
※為減少和Moblieye的業務重疊,英特爾裁撤自動駕駛員工
※《Science》刊文揭示幾大精神疾病的重疊基因
※SSc-SLE重疊綜合征與SLE的疾病特點對比
※Data Brief:基因組間的數量性狀基因座位點、相關性分析和重疊基因的數據集
※GUCCI更換新logo!「雙G」倒扣變重疊品牌迎來全新面貌
※Petuum提出新型正則化方法:非重疊促進型變數選擇
※RAID與NAS:它們有何不同和重疊
※世界上最軟的人,俄羅斯美女Zlata4歲時就能完成身體重疊!
※一加六和小米mix2s的價格基本重疊,哪個更有優勢?