Mesos、Kubernetes和Swarm比較指南

banq發表於2016-11-24
本文展示如何為您選擇最好的容器編排?

正如Marc Andreesen所說,“Software is eating the world”,所以現在所有公司,無論他們的時間長短火大小規模正在轉型為軟體公司。

隨著這些公司軟體組織的成熟,他們將需要改變對軟體架構的思考方式,包括團隊和軟體的平臺的思考方式。

70年代,整個應用程式執行在塵土飛揚的資料中心的一個“大型機”上非常良好,但現在企業是執行在雲端的高可用性軟體,同時他們的敏捷團隊傾向於快速交付。

在過去,軟體團隊在那些大型機器中執行了數百萬行程式碼的龐大應用程式,但是現在越來越多的公司採用“分而治之的策略”,而不是一個“Monolith單片整體”,你的應用程式被分為十個甚至數百個較小的應用程式。 我們稱這些小應用程式為微服務

執行許多微服務可能很複雜,因此管理它們需要一個協調器(有時也稱為排程程式),用於跨資料中心釋出分散式服務。 排程器有很多選擇。

這篇部落格文章將討論排程器是什麼,以及如何選擇最適合您團隊需求的排程器。

微服務是真棒
有很多文章已經對什麼是微服務和為什麼要採用它們進行了長期論述。因此,我們這裡不再解釋為什麼它們很棒,我們只強調一些最好的特點:

1.微服務具有較小的程式碼庫,構建起來更快,並且更容易測試和維護
2.微服務允許在整個組織中標準化工具
3.微服務透過將程式碼的關鍵任務部分與較低優先順序的其他任務分開來以降低風險

所以,你決定你想“做微服務”
假設您已經使用微服務進行了beta測試,您的團隊已在您的資料中心部署了第一個或第二個微服務。 慢慢地,你意識到這些部署不會像你想要的那麼快...

什麼減慢了微服務部署
傳統的配置週期可能需要長達6周。

a. 不得不處理依賴和基本映像image
如果你想執行一個服務,你需要一臺機器來執行它。對於這臺機器不僅需要訪問它必須執行的程式碼,還需要訪問整個環境。 這臺機器需要一個Java / Ruby / PHP環境,包括所有的packages / gems / modules等程式碼依賴的任何靜態庫。

雖然像工具封隔器簡化了建立基礎image,但是維護多個不同的image可能會非常耗時。

b. 不斷更新您的基礎設施
每當您更改有關您的環境(證照,憑據或依賴關係)時,您需要將這些更改傳播到整個基礎架構。
像工具T Terraform, Chef 和 Puppet 簡化了您的基礎架構更新,可以在你的雲供應商建立依賴關係(AWS,Azure,谷歌雲引擎等)

C. 擁有和維護多個可用區是不容易的
為了保證您的應用程式正常執行,重要的是有冗餘服務。擁有多個可用區域現在是任何大型軟體公司的基本要求。 但是,即使將基礎架構作為程式碼的這種方式也是很不容易的,需要保持所有區域的同步,這對於即使是最好的開發和運營團隊來說也是艱鉅的苦差事。

容器救援
微服務可以以多種方式執行,或者直接執行在現有應用程式的機器上(會導致單點故障和維護噩夢),在單獨的機器上(更昂貴),或者執行在編排器上的容器中,後者提供了應用程式的標準部署策略。

容器是一種低階虛擬化方法,它不是建立整個全部的虛擬機器,只是建立一個僅包含應用程式程式碼+環境的映像。 這允許單個機器執行多個容器,而不必處理應用程式環境或依賴關係。兩種最流行的是LXC和RKT。

在容器中執行應用程式提供了最靈活的方法,包括最佳化特定應用的使用,同時允許根據需要進行擴充套件服務。

使用排程器來管理容器而不是機器
排程器是您的應用程式居住的ship。排程器有不同的顏色和尺寸,包括從高貴的Kubernetes Nomad groups到Docker swarm。
最流行的排程程式是:
1.Mesos(Mesosphere)
2.Kubernetes(Google)
3.Nomad(Hashicorp)
4.Docker Swarm(Docker)
5.Cloud Foundry(Pivotal,HP,IBM,其他)
6.OpenShift(Redhat)

他們有什麼不同?
雖然大多數排程程式執行Docker(或rkt)容器,但它們在兩個主要方面策略和功能上有所不同。
策略:
1. Monolithic單片整體:Hadoop YARN,Docker swarm
單片戰略有一個單點協調,知道整個系統的整個狀態,並做聰明的分配。 它們通常是漂亮的靜態系統,例如YARN,它允許在同一個硬體上執行像Hadoop和Spark這樣的東西 -所以沒有太多的可移動部件

2.雙層(悲觀併發):Mesos
兩層排程程式比較自由:一箇中央授權機構為執行在其上的每個框架提供資源,這些框架接受他們認為合適的資源。 因此,如果我們使用Mesos作為排程器,那麼作為一個消費者,我們實際上會談到像Marathon這樣的一個框架,例如啟動長時間執行的程式。

2.共享狀態(樂觀併發):Nomad,Kubernetes。
有共享的狀態排程器,這些傢伙啟動容器最快。Nomad有一個基準測試,他們在5分鐘內在5k個節點上啟動1mm容器。 相當了不起。

對於大多數應用程式,策略並不重要,因此我們大部分將專注於功能。

功能 :

[img index=1]
上圖說明如下:
1.企業支援
除了Google之外,所有提供商都可以使用企業支援。Kubernetes支援僅適用於其GCE雲產品,但有一些第三方提供商提供支援。

2.多資料中心/可用區支援
並非所有排程程式都支援多可用區。

3.Bare Metal裸機
大多數排程器除了Cloud Foundry以外可以安裝在資料中心內的“裸機”或物理機器上。 這可以節省你對管理程式許可費用。

4.Volume卷安裝
卷安裝允許跨容器部署實現持久儲存資料。 這是一個關鍵的區別,取決於您的應用程式的需求。 Mesos是這裡的領導者,Kubernetes正在慢慢趕上。

5.安全管理
安全管理是一個很大的配置編排,它不會在你開始使用排程程式時消失。Docker和Mesos在這裡沒有內建的解決方案。

如何選擇?
這是棘手的地方,所有的解決方案執行容器並擴充套件得很好,你最好需要選擇一個適合你的工程團隊。

1.功能方面
功能差異可能看起來很小,但是它們最終會非常顯著,具體取決於您的應用程式需求。 例如卷的持久和私人私有dock註冊支援通常是一些平臺的限制。

2.合規性需求
您有嚴格的稽核能力或合規性需求嗎? 只有Cloud Foundry提供任何型別的使用者/許可權模型,它可能是太基本的您的要求。

3.動態支援
隨著排程器越來越受歡迎,更多的選項每天都會出現

4.成熟度
下面是建立日期:
Cloud Foundry - 2011
Mesosphere - 2013
Kubernetes - 2014
Nomad - 2015



A Handy Guide to the Mesos-Kubernetes-Swarm Jungle

[該貼被banq於2016-11-24 10:26修改過]

相關文章