啟迪雲 | 王中傑

有無數的文章都在討論和比較Docker、Kubernetes 以及Mesos。如果你是初學者,那麼你可能會認為這三個開源項目正為了稱霸容器界而殊死搏鬥。

雖然這三種技術都使得使用容器部署、管理和伸縮應用成為可能,但實際上它們各自解決了不同的問題,並且根植於迥異的上下文環境中。事實上,這三種被廣泛採用的工具鏈,都是有差別的。

讓我們來對三個項目的原始任務、技術架構,以及它們是如何相互補充和交互的來進行對比。

Docker

Docker 公司-始於名為dotCloud 的平臺即服務(PaaS)供應商。dotCloud 團隊發現,在許多應用和客戶之間管理依賴和二進位文件時需要付出大量的工作。因此他們將Linux 的cgroups和namespace 的一些功能合併成一個單一且易於使用的軟體包,以便於應用程序可以一致地運行在任何基礎設施上。這個軟體包就是所謂的Docker 鏡像

,它提供瞭如下的功能:

· 將應用程序和依賴庫封裝在一個軟體包(即Docker 鏡像)中,因此應用可以被一致地部署在各個環境上;

· 提供類似Git 的語義,例如 docker push,docker commit 等命令讓應用開發者可以快速接受這門新的技術,並將其融入到現有的工作流中;

· 定義Docker 鏡像為不可變的層,支持不可變的基礎設施。新提交的變更被分別保存為只讀層,讓復用鏡像和追蹤變更記錄變得十分簡單。還通過只傳輸更新而不是整個鏡像來節省磁碟空間和網路流量;

· 通過實例化不可變的鏡像和讀寫層來運行Docker 容器,讀寫層可以臨時地存儲運行時變更,從而輕鬆部署和擴展應用程序的多個實例。

Docker 變得越來越受歡迎,開發者們開始從在筆記本電腦上運行容器轉而在生產環境中運行容器。跨多個機器之間協調這些容器需要額外的工具,這稱之為」容器編排」。第一個支持Docker 鏡像的容器編排工具是Apache Mesos 的marathon。那年,Docker 的創始人兼首席技術官Solomon Hykes 將Mesos 推薦為」生產集羣的黃金標準「。不久之後,除了Mesos 的Marathon 之外,還出現了許多的容器編排技術:Nomad、Kubernets,Docker Swarm 。

隨著Docker 開始商業化其開源的文件格式,該公司還開始引入工具來完善其核心的Docker 文件格式和運行時引擎,包括:

· 為公開存儲Docker 鏡像的而生的Docker hub;

· 存儲私有鏡像的Docker 倉庫(Docker registry);

· Docker cloud,用於構建和運行容器的管理性服務;

· Docker數據中心作為一種商業產品體現了許多Docker 技術;

Docker 將軟體及其依賴關係封裝在一個軟體包中的洞察力改變了軟體行業的遊戲規則,Docker 文件格式成為行業標準,領先的容器技術供應商(包括Docker、Google、Pivotal、Mesosphere 等) 組建了 CNCF和OCI 。如今,CNCF 和OCI 旨在確保容器技術之間的互操性和標準化介面,並確保使用任何工具構建的任何Docker 容器都可以在任何運行時或基礎架構上運行。

Kubernetes

Google 很早就認識到了Docker 的潛力,並試圖在Google Cloud Platform (GCP)上提供容器編排「即服務」。Google 在容器方面擁有豐富的經驗(是他們在Linux 中引入了cgroups),但現有的內部容器和Borg 等分散式計算工具直接與其基礎架構相耦合。所以,Google 沒有使用原有系統的任何代碼,而是從頭開始設計Kubernetes (K8S)來編排Docker 容器。Kubernetes 於2015 年2 月發布,其開發目標包括:

· 為應用程序開發人員提供編排Docker 容器的強大工具,而無需與底層基礎設施交互;

· 提供標準部署介面。以實現雲端一致的應用部署體驗和API;

· 基於模塊化API 核心。允許供應商圍繞Kubernetes 的核心技術集成其系統。

Kubernetes 對應用程序開發人員非常有吸引力,因為它減輕了對基礎架構和運營團隊的依賴程度。供應商也喜歡Kubernetes,因為它提供了一個容易的方式來擁抱容器化運動,並為客戶部署自己的Kubernetes提供商業解決方案。

Kubernetes 的核心優勢是為應用程序開發人員提供了用於編排無狀態Docker 容器的強大工具。

Apache Mesos

Apache Mesos應用了從雲計算級別的分散式基礎架構中習得的經驗和教訓。並且,Mesos 推出了一種模塊化架構,一種開源的開發方法,旨在完全獨立於基礎架構。Mesos 迅速被Twitter ,Apple ,Yelp ,Netflix和許多領先的技術公司採用,支持從微服務、大數據和實時分析到彈性擴展的一切。

Apache Mesos在設計之初,設定的開發目標如下:

· 將數據中心資源抽象為單個池來簡化資源分配,同時在私有雲或公有雲中提供一致的應用和運維體驗;

· 在相同的基礎架構上協調多個工作負載,如分析、無狀態微服務、分散式數據服務和傳統應用程序,以提高利用率,降低成本和檯面空間;

· 為應用程序特定的任務(如部署、自我修復、擴展和升級),自動執行第二天的操作;提供高度可用的容錯基礎設施;

· 提供持久的可擴展性來運行新的應用程序和技術,而無需修改集羣管理器或其上構建的任何現有應用程序;

· 彈性擴展可以將應用程序和底層基礎設施從少量擴展到數十到數萬個節點。

Mesos 獨有的獨立管理各種工作負載的能力—— 包括Java 這樣的傳統應用程序、無狀態Docker 微服務、批處理作業、實時分析和有狀態的分散式數據服務。Mesos 廣泛的工作負載覆蓋來自於其兩級架構,從而實現了「應用感知」調度。通過將應用程序特定的操作邏輯封裝在「Mesos 框架」中來實現應用程序感知調度。資源管理器Mesos Master 提供了這些框架基礎架構的部分,同時保持隔離。這種方法允許每個工作負載都有自己的專門構建的應用程序調度程序,可以瞭解其部署、擴展和升級的特定操作要求。應用程序調度程序也是獨立開發、管理和更新的,這讓Mesos 擁有高度可擴展的能力,支持新的工作負載或隨著時間的推移而增加更多的操作功能。

Mesos的運行機制是新版本的應用運行起來時,原先舊版本的軟體依然還正常運轉著,然後當舊應用被銷毀時流量將會切換到新的應用上。但是升級數據工作負載例如HDFS 或者Cassandra 要求節點停機一次,此時需要持久化本地數據卷以防止數據丟失,並且按照特定的順序執行原位升級,在升級之前和升級完成之後,都要在每一個節點類型上執行特定的檢查和命令。任何這些步驟都是應用程序或服務特定的,甚至可能是版本特定的。這讓使用常規容器編排調度程序來管理數據服務變得非常困難。

總結

三種項目的運行機制和運行目的並不相同,所以當人們將Docker 和Kubernetes 與Mesos 進行比較時,他們實際上是將Kubernetes 和Docker Swarm 與在Mesos 上運行的Marathon 進行比較。

Mesos 坦率地講並不在乎它上面運行了什麼。Mesos 可以在共享的基礎設施上彈性地為Java 應用伺服器提供集羣服務、Docker 容器編排、Jenkins 持續集成任務、Apache Spark 分析、Apache Kafka 流,以及更多其他的服務。Mesos 甚至可以運行Kubernetes 或者其他的容器編排工具。所有這三種技術都與Docker 容器有關,可以讓你在容器編排上實現應用程序的可移植性和擴展性。至於選擇哪種項目,這主要取決於你的身份。

  • 如果你是一個應用開發人員,正在尋找現代化的方式來構建和打包你的應用程序,或者想加速你的微服務計劃,Docker 容器和開發工具就是最好的選擇。
  • 如果你是一個開發人員或者DevOps 的團隊,並希望構建一個專門用於Docker 容器編排的系統,而且願意花時間折騰集成解決方案與底層基礎設施,Kubernetes 是一個可以考慮的好技術。
  • 如果你想要建立一個運行多個關鍵任務工作負載的可靠平臺,包括Docker 容器、傳統應用程序和分散式數據服務,並希望所有這些可依移植到雲端提供商或者數據中心,那麼Mesos,更適合你們的需求。

推薦閱讀:

相關文章