如何進行docker容器集群管理平臺的比較,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
10年的武清網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。網(wǎng)絡營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整武清建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“武清網(wǎng)站設計”,“武清網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
容器化和微服務是當前最熱話題,不久之前,筆者(據(jù)說因為現(xiàn)在都不用筆了,“筆者”的稱謂已經(jīng)不合適了,因為輸入用鍵盤,叫“鍵人”更為合適)參加QCon上海一個微服務監(jiān)控的Session,場面爆棚,我不得不在擁擠的過道聽完了整個session。隨著要管理的容器越來越多,容器的集群管理平臺成為了剛需!
Swarm是Docker公司在2014年12月初新發(fā)布的容器集群管理工具。它可以把多個主機變成一個虛擬的Docker主機來管理。Swarm使用Go語言開發(fā),并且開源,在github上可以找到它的全部source code。Swarm使用標準的Docker API,給Docker用戶帶來無縫的集群使用體驗。2016年7月, Swarm已經(jīng)被整合進入Docker Engine。
Docker Swarm提供API 和CLI來在管理運行Docker的集群,它的功能和使用本地的Docker并沒有本質(zhì)的區(qū)別。但是可以通過增加Node帶來和好的擴展性。理論上,你可以通過增加節(jié)點(Node)的方式擁有一個無限大的Docker主機。
Swarm并不提供UI,需要UI的話,可以安裝UCP,不過很不幸,這個UCP是收費的。
Swarm的架構并不復雜,可以說非常簡單。Manager負責容器的調(diào)度,Node負責容器的運行,Node運行Docker Daemon和Manager之間通過HTTP來通信。Docker Client通過Manager上暴露的標準Docker API來使用Docker的功能。
Swarm的集群協(xié)調(diào)和業(yè)務發(fā)現(xiàn)可以支持不同的第三方組件,包括:
Consul
Etcd
ZooKeeper
Docker Hub
如果對集群協(xié)調(diào)的概念不熟悉,可以參考我的另一篇博客《使用Python進行分布式系統(tǒng)協(xié)調(diào) (ZooKeeper,Consul, etcd )》
Swarm的基本容器調(diào)度策略有三種:
spread 容器盡可能分布在不同的節(jié)點上
binpack 容器盡可能分布在同一個節(jié)點上
random 容器分布在隨機的節(jié)點上
Swarm集群的高可用配置很容易,以下圖為例:
manager配置在不同的AWS AZ中,通過領導選舉選出Primary manager。
多個節(jié)點分布在不同的AZ中,同時Consul/etcd/ZooKeeper也需要配成冗余的。
Docker Swarm的特點是配置和架構都很簡單,使用Docker原生的API,可以很好的融合Docker的生態(tài)系統(tǒng)。
Kubernetes是Google開發(fā)的一套開源的容器應用管理系統(tǒng),用于管理應用的部署,維護和擴張。利用Kubernetes能方便地管理跨機器運行容器化的應用。Kubernetes也是用Go語言開發(fā)的,在github上可以找到源代碼。
Kubernetes 源于谷歌公司的內(nèi)部容器管理系統(tǒng)Borg,經(jīng)過了多年的生產(chǎn)環(huán)境的歷煉,所以功能非常強大。
Kubernetes主要提供一下的功能:
使用Docker對應用程序包裝(package)、實例化(instantiate)、運行(run)。
以集群的方式運行、管理跨機器的容器。
解決Docker跨機器容器之間的通訊問題。
Kubernetes的自我修復機制使得容器集群總是運行在用戶期望的狀態(tài)。
應用的高可用和靠擴展
支持應用的在線升級(Rolling Update)
支持跨云平臺(IaaS)的部署
為了支持這些功能,Kubernetes做了做了很多的抽象概念,所以,剛開始使用Kubernetes,需要學習不少的新概念,包括:
Pod
Pod是Kubernetes的基本操作單元,把相關的一個或多個容器構成一個Pod,通常Pod里的容器運行相同的應用,或者是相關的應用。Pod包含的容器運行在同一個Minion(Host)上,看作一個統(tǒng)一管理單元,共享相同的volumes和network namespace/IP和Port空間。
Job
Job是一個生命周期比較短的應用,一般只會在出錯的情況下重啟,可以通過配置Job的并發(fā)和運行次數(shù)來擴展Job
Service
Service是一個生命周期比較長的應用,會在任何退出時重啟,可以通過配置Service的復制(Replica)來達到高擴展和高可用
Recplica Controller
Replication Controller確保任何時候Kubernetes集群中有指定數(shù)量的pod副本(replicas)在運行, 如果少于指定數(shù)量的pod副本(replicas),Replication Controller會啟動新的Container,反之會殺死多余的以保證數(shù)量不變。Replication Controller使用預先定義的pod模板創(chuàng)建pods,一旦創(chuàng)建成功,pod 模板和創(chuàng)建的pods沒有任何關聯(lián),可以修改pod 模板而不會對已創(chuàng)建pods有任何影響,也可以直接更新通過Replication Controller創(chuàng)建的pods
以上是一些核心概念,除了這些,Kubernetes還提供其它一些概念,來支持應用程序的運維,包括:
Label
對系統(tǒng)中的對象通過Label的方式來管理
Namespace
對對象,資源分組,可以用于支持多租戶
Config Map
提供全局的配置數(shù)據(jù)存儲
總之,功能強大,系統(tǒng)概念繁多,比較復雜。
Kubernetes支持安裝UI的addon,來管理整個系統(tǒng):
下圖是Kubernetes的基本架構:
Master
Master定義了Kubernetes 集群Master/API Server的主要聲明,Client(Kubectl)調(diào)用Kubernetes API,管理Kubernetes主要構件Pods、Services、Minions、容器的入口。Master由API Server、Scheduler以及Registry等組成。
Scheduler收集和分析當前Kubernetes集群中所有Minion節(jié)點的資源(內(nèi)存、CPU)負載情況,然后依此分發(fā)新建的Pod到Kubernetes集群中可用的節(jié)點。由于一旦Minion節(jié)點的資源被分配給Pod,那這些資源就不能再分配給其他Pod, 除非這些Pod被刪除或者退出, 因此,Kubernetes需要分析集群中所有Minion的資源使用情況,保證分發(fā)的工作負載不會超出當前該Minion節(jié)點的可用資源范圍
Minion
Minion負責運行Pod,Service,Jobs, Minion通過Kubelet和Master通信。Proxy解決了外部網(wǎng)絡能夠訪問跨機器集群中容器提供的應用服務。
etcd
負責集群的協(xié)調(diào)和服務發(fā)現(xiàn)
Kubernetes提供了很多應用級別的管理能力,包括高可用可高擴展,當然為了支持這些功能,它的架構和概念都比較復雜,當然我覺得為了獲得這些功能,值!
Mesos是為軟件定義數(shù)據(jù)中心而生的操作系統(tǒng),跨數(shù)據(jù)中心的資源在這個系統(tǒng)中被統(tǒng)一管理。Mesos的初衷并非管理容器,只是隨著容器的發(fā)展,Mesos加入了容器的功能。Mesos可以把不同機器的計算資源統(tǒng)一管理,就像同一個操作系統(tǒng),用于運行分布式應用程序。
Mesos的起源于Google的數(shù)據(jù)中心資源管理系統(tǒng)Borg。你可以從WIRED雜志的這篇文章中了解更多關于Borg起源的信息及它對Mesos影響。
Mesos的主要功能包括:
高度的可擴展和高可用
可自定義的兩級調(diào)度
提供API進行應用的擴展
跨平臺
下圖是Mesos的管理界面:
Mesos的基本架構如下
Master
Master負責資源的統(tǒng)一協(xié)調(diào)和Slave的管理。 Master協(xié)調(diào)全部的Slave,并確定每個節(jié)點的可用資源,聚合計算跨節(jié)點的所有可用資源的報告,然后向注冊到Master的Framework(作為Master的客戶端)發(fā)出資源邀約。Mesos實現(xiàn)了兩級調(diào)度架構,它可以管理多種類型的應用程序。第一級調(diào)度是Master的守護進程,管理Mesos集群中所有節(jié)點上運行的Slave守護進程。集群由物理服務器或虛擬服務器組成,用于運行應用程序的任務,比如Hadoop和MPI作業(yè)。第二級調(diào)度由被稱作Framework的“組件”組成。
Slave
Salve運行執(zhí)行器(Executor)進程來運行任務。
Framework
Framework包括調(diào)度器(Scheduler)和執(zhí)行器(Executor)進程,其中每個節(jié)點上都會運行執(zhí)行器。Mesos能和不同類型的Framework通信,每種Framework由相應的應用集群管理。
Framework可以根據(jù)應用程序的需求,選擇接受或拒絕來自master的資源邀約。一旦接受邀約,Master即協(xié)調(diào)Framework和Slave,調(diào)度參與節(jié)點上任務,并在容器中執(zhí)行,以使多種類型的任務
ZooKeeper
Zookeeper負責集群的協(xié)調(diào),Master的領導選舉等
Mesos相比Kubernetes和Swarm更為成熟,但是Mesos主要要解決的是操作系統(tǒng)級別的抽象,并非為了容器專門設計,如果用戶出了容器之外,還要集成其它的應用,例如Hadoop,Spark,Kafka等,Mesos更為合適。Mesos是一個更重量級的集群管理平臺,功能更豐富,當然很多功能要基于各種Framework。
Mesos的擴展性非常好,最大支持50000節(jié)點,如果對擴展性要求非常高的話么,Mesos是最佳選擇。
ECS (Amazon EC2 Container Service )是亞馬遜開發(fā)出的高度可擴展的高性能容器集群服務。在托管的 Amazon EC2 實例集群上輕松運行容器應用和服務。他最大的好處就是在云上,不需要自己管理數(shù)據(jù)中心的機器和網(wǎng)絡。
ECS繼承了AWS服務的高擴展和高可用性,安全也可以得到保證。
在基本容器管理的基礎上,ECS使用Task和Service的概念來管理應用。
Task類似Docker Compose,使用一個JSON描述要運行的應用。Service是更高一層的抽象,包含多個task的運行實例,通過修改task實例的數(shù)量,可以控制服務的伸縮。同時Service可以保證指定數(shù)量的Task在運行,當出現(xiàn)錯誤的時候,重啟失敗的Task
下圖是ECS的架構圖:
使用EC2,ELB,安全組等大家熟悉的AWS的概念,AWS用戶可以輕松管理你的容器集群。并且不需要付初基本資源以外的費用。
通過ECS agent可以是Container連接到ECS集群。ECS Agent使用Go開發(fā),已開源。
我們并不清楚ECS的調(diào)度策略,但是AWS提供了一個例子,如果繼承第三方的調(diào)度策略。
通過Cloud Watch Log,我們可以很方便的對整個集群進行監(jiān)控。
如果你是一個AWS的重度用戶,ECS是個不錯的選擇,因為你可以是把你的容器集群運行在AWS的云上,管理起來非常方便。
這里對幾個平臺做一個簡單的比較:
Swarm | Kubernetes | Mesos | ECS | |
基本功能 | Docker原生的集群管理工具 | 開源的容器集群工具,提供應用級別的部署,維護和擴張功能 | 基于數(shù)據(jù)中心的操作系統(tǒng) | 基于云的高可用,高擴展容器集群 |
高層次抽象 | 無 | Pod | 無 | Task Service |
應用擴展性 | 無 | 支持 | Framework 支持 | 支持 |
應用高可用性 | 無 | 支持 | Framework 支持 | 支持 |
集群協(xié)調(diào)和服務發(fā)現(xiàn) | etcd | etcd | ZooKeeper | / |
調(diào)度策略(Schedule) | 內(nèi)置,可擴展 | 內(nèi)置 | 兩級別,可擴展 | 可擴展 |
監(jiān)控 | Logging Driver | Heapter,ELK Addon | 內(nèi)置 | CloudWatch |
用戶界面 | CLI | CLI API UI | API UI | CLI |
開發(fā)語言 | Go | Go | Java | NA |
開源 | 是 | 是 | 是 | 否 |
最大支持管理節(jié)點數(shù) | 官方1000 | 官方1000 | 10000 | / |
四個平臺,Swarm是最輕量級的,功能也最簡單,適于有大量Docker實例環(huán)境的用戶。Kubernetes增加了很多應用級別的功能,適用于快速應用的部署和維護。Mesos最重,適用于已經(jīng)有了相當?shù)膽煤腿萜骰旌系沫h(huán)境。ECS則推薦給AWS的用戶或者不希望自己管理數(shù)據(jù)中心的云用戶。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。