基於雲的基礎設施,容器,微服務和新編程平臺在世界範圍佔據了一大塊媒體領域,橫掃IT界。Docker、容器的使用在這幾個月內呈爆炸式增加,已經提交了20億的鏡像「pulls」;鏡像數在2015年11月就已達12億。從大型國際公司到小型創業公司,容器技術的使用都有明顯增加。前端
很明顯,容器在建立和交付應用程序的過程當中有着新發展。然而,大範圍控制容器部署也會有一些併發症。容器確定是跟資源相匹配的。故障確定是越快解決越好。這些挑戰會致使集羣管理和編排的併發需求。
集羣管理工具是一個經過圖形界面或者經過命令行來幫助你管理一組集羣的軟件程序。有了這個工具,你就能夠監控集羣裏的節點,配置services,管理整個集羣服務器。集羣管理能夠從像發送工做到集羣的低投入活動,到像負載均衡和可得性的高介入工做。在這篇文章中,咱們來看一下目前比較受歡迎的集羣管理工具,並討論一下他們的優勢和麪臨的挑戰。編程
Docker Swarm讓你彙集一些Docker引擎到一個虛擬引擎。在一個分佈式應用程序環境中,計算元素必須也是能夠被分佈的。Swarm容許你在本地彙集Docker引擎。有了單個引擎,應用程序能夠被擴展得更快,更有效率。Swarm可以擴容到50000個容器,1000個節點,同時當容器添加到集羣的時候一點都不影響性能。
再加上,Swarm的角色至關於Docker API。任意能夠操做Docker Daemon的工具均可以運用Docker Swarm的力量在不少主機上進行擴容。這些包括了像Flynn,Compose,Jenkins和Drone之類不一樣的主機。
Swarm也能夠在後端運行Mesos或者Kubernetes的時候,被用來做爲前端Docker客戶端。Swarm在它的核心內部是一個簡單的系統:每一個主機運行一個Swarm代理與管理員。管理員處理容器的操做和調度。你能夠在高可用狀態下運行,它使用的是Consul,ZooKeeper或者etcd來發送容錯events到後端系統。
Docker Swarm的一個優勢就是,它是一個本地解決辦法——你能夠用Docker命令來實施Docker網絡,插件和數據卷。Swarm管理員爲leader選舉建立一些master和特定的規定。這些條例實施在初級master故障的event裏。Swarm調度器以各類各樣的過濾包爲特點,也包括緊密性和節點標籤。過濾包可以附加容器到底層節點,資源獲得更好的利用,性能獲得提高。後端
Core OS被建立來容許彈性擴容,容許管理計算能力。與其經過apt或者yum安裝包,Core OS以爲倒不如利用Linux容器來處理更高抽象水平的service,提供好處給虛擬機,可是重點是在應用程序上而不是在完成虛擬化主機上。安全
Fleet可以在它分享個體初始系統的場景中將Core OS集羣虛擬化。有了Fleet,每一個機器都有一個代理和一個引擎。雖然單個引擎在集羣中的任意節點都是活躍的,可是整個引擎社區一直都是活躍的。Fleet也能夠處理套藉口激活——容器能夠被用來處理在特殊接口的鏈接。這就容許系統在須要的時候建立進程而不是等待需求的時候再去建立。
大家的開發運維人員將他們的時間重點花在管理做爲service建立基礎的容器上,同時不須要擔憂可能出如今單個機器上的潛在問題。Fleet確保在集羣中的容器在操做狀態。在發生機器故障的時候,容器會自動轉移到健康的機器上。服務器
Kubernetes由谷歌開發,容許你在許多不一樣的主機上管理容器化應用程序。它提供工具讓你部署,彈性擴容和維護應用程序。Kubernetes的開發者致力於保持它一直處於可訪問、輕量級狀態,而且易於使用。它能夠在不少雲環境中使用,包括私有云,公有云,多雲端和混合雲。Kubernetes能夠在fly上進行自我修復,它以自動複製,自動再啓動,自動定位爲特點。它能夠被不斷擴展,它的特色是hookable,可插拔和模塊化。它已經被徹底開源,谷歌在2014年首次宣佈開發它,初版在2015夏天的時候發佈。除了最近幾年的收穫,Kubernetes自己也是基於谷歌內部十多年使用容器技術的經驗。網絡
Kubernetes使用容器組pod,而且在同時被調度和部署。調度的基礎配置是pods,由於相比於系統,單個容器會被當成是基礎單元。大部分的pods最多有5個容器,這就組成了一個service。Pods會按照需求在現實生活中建立和刪除,或許修改。
Kubernetes是一系列寬鬆的、能夠在不少不一樣的工做負載下操做的鬆散耦合原語。它很大程度上依賴於Kubernetes API的可擴展性。API在內部使用,一樣的,在外部被容器和拓展版本運行在系統中。目前,已經應用Kubernetes的項目和企業包括:Wikimedia Foundation從本土設置轉移到Kubernetes;eBay在OpenStack上運行Kuberenetes和容器;Viacom用Kubernetes建立了一個先進的容器化基礎設施。併發
Apache Mesos是一個集羣管理工具,它着重於資源隔離,以及分佈式網絡或者在框架上分享應用程序,它的構想和開發源於加州大學伯克利分校。
一個開源系統,它會給管理員分享資源、提高集羣利用率的功能。目前使用Apache Mesos的公司包括:Apple,Airbnb和Twitter。
Apache Mesos對於像CPU,Disk和RAM之類的計算元件來講是一個抽象層。它運行在每臺機器上,其中一臺機器被設計來做爲master來運行其它機器。任意Linux程序均可以運行在Mesos上面。Mesos的一個優勢就是應對故障,它會提供額外的安全層。負載均衡
Mesos被設計來處理成千上萬的主機,支持各類各樣主機上的工做負載。在一個Mesos配置上,你可能會發現Docker和Hadoop並排運行。幾年前,當系統支持Twitter的快速擴張的時候Mesos作到了可視化。
Mesos使用代理節點系統來運行任務。代理髮送一張可得資源清單到master。在任意時刻,都會有成千上萬的代理節點在進行操做。一樣,master也會分佈任務到代理上。框架
Kubernetes是一個全徑且全面的容器管理平臺,有動態調度、升級、自動伸縮和持續健康監測的功能。相較而言,Docker Swarm只是從單個容器引擎提供一個集羣系統的視角。
Mesos和Kubernetes比較類似,由於他們都是被開發來解決在集羣化環境中運行應用程序的問題。但Mesos在運行集羣方面不如Kubernetes,它重點放在它強大的調度功能和它被插在各類各樣的調度器的性能上。Mesos並非爲容器而生的,在容器流行以前就已經被開發出來,它的一些地方被修改來支持容器。
Fleet利用etcd,一個和Core OS一塊兒作出來被系統化的鍵值對,對於Linux來講是一個系統和service管理員。系統化是爲單個容器設計,可是fleet延展它的性能到一個集羣的機器。Fleet經過容許你運行service的一些實例,來幫助項目應對故障。它能夠部署單個的容器到任意本地,運行容器在一個或者多個機器上,而且部署一個容器的多個實例。
從另外一個方面來講,Fleet並不適用於處理一些像服務註冊,在調度基礎上利用,服務發現或者容器間的交流這些在分佈式微服務環境中發生的狀況。Fleet在這四個工具中屬於比較低調的引擎,因此它最好處於一個像Kubernetes或者其它解決方案能夠在上面操做的層次。運維
現今的企業須要可以知足他們需求不會出現故障的冗餘系統。另外,大數據和數據挖掘須要不少資源來過濾海量信息。除非這些公司適應和修改他們的登陸信息系統的方式,否則他們面對更快、更靈活的競爭對手會很快失去陣地。在如今這個高速網絡規模的時代,修復單個機器不是一個有效的解決方法。分佈式系統容許你快速調度出故障的機器到垃圾箱,而且從新分配資源到健康集羣的節點上。這就是管理Docker和其它容器集羣重要性。
(若是須要轉載,請聯繫咱們哦,尊重知識產權人人有責:)