Swarm、Fleet、Kubernetes和Mesos的比較
因此,一些大型公司和單位經常有多個這樣的備份系統在執行,另外一種情況是,一些系統區別於主要系統,是為了偶爾執行的資料探勘任務,但是又需要更多資源而且需要和現存系統互動。
當擁有這樣多個資源系統時,重要的是要確保他們有效地使用,不要被閒置,可以應對突然激增的需求。因此需要在成本效益與迅速擴張的規模之間平衡是一項非常艱鉅的任務。
管理這樣的不平凡系統是一項具有挑戰性工作,複雜性是不能確定的,也是不可能在某個層次特別關照某個機器,當一臺機器發生問題是,應該是立即關機消失並被替換,而不是像護士醫生治病一樣修復後再上線。
當前有各種工具和解決方案能夠幫助實現這些挑戰,這裡主要集中幾個orchestration工具,這些工具能幫助我們以叢集方式在主機上啟動容器,並能夠彼此連線,同時也要考慮擴充套件性和自動失敗恢復特性。
Swarm
Swarm是一個基於Docker的原生叢集工具,Swarm使用的是標準Docker API,這意味著容器能夠使用docker run命令啟動,Swarm將會接管一切,選擇合適的主機來執行容器,這也意味著其他使用Docker API的工具比如Compose 和 bespoke指令碼也能在無需任何改變情況下使用Swarm,從而享受到叢集的優點而不是單個主機。
Swarm基本架構是直接的,每個主機執行一個Swarm代理,一個主機執行一個Swarm管理者,這個管理者負責指揮和排程這些主機上的容器,Swarm能以高可用性模式執行,etcd, Consul or ZooKeeper 中任何一個都可以用來將失敗恢復提交給後備管理者處理,當有新主機加入到叢集,有幾種發現主機的方式,也就是discovery發現方式,預設預設情況,基於discovery的token被使用,也就是主機地址會被儲存到一個列表中,而列表儲存在Docker Hub上。
Fleet
Fleet是一個來自CoreOS的叢集管理工具,自詡為低階別的叢集引擎,也就意味著,它可支援從基礎層到高層解決方案如Kubernetes。
fleet最顯著的特點是基於systemd建立,後者提供單個機器的系統和服務初始化,fleet擴充套件到叢集上的機器,Fleet能夠讀取systemd單元檔案,然後能在單個機器或叢集中叢集中進行排程。
上述圖顯示每個機器執行一個引擎和一個代理,任何時候在叢集中只有一個引擎會被啟用,但是所有代理會一直執行,Systemd unit單元檔案被提交給引擎,然後在 “least-loaded” 最少載入的機器上用來呼叫任務工作,單元檔案會簡單執行一個容器,代理會照顧啟動單元unit和報告狀態,Etcd用來啟用機器之間的通訊,儲存叢集和unit單元的狀態。
這個架構用來設計為失敗冗餘,如果一個機器當機,這個機器上的任何單元unit會在新的主機上被重新啟動。
Kubernetes
Kubernetes是一個由google推出的容器管理工具,基於他們上個世紀基於容器產品化管理的經驗,它的幾個概念比較特殊需要理解。如Pods、Flat Networking Space、Labels 和Services
Mesos 和 Marathon
Apache Mesos是一個開源叢集管理器,是為大型叢集入數百數千臺主機規模而設計,支援在多租戶之間分發工作負載,一個使用者的Docker容器執行另外一個使用者的Hadoop 任務。
詳細見使用Mesos和Marathon管理Docker叢集
總結比較
1. Swarm的優點和缺點都是使用標準的Docker介面,使用簡單,容易整合到現有系統,但是更困難支援更復雜的排程,比如以定製介面方式定義的排程。
2.Fleet是低層次且相當簡單的管理指揮層,能作為執行高階別管理工具如Kubernetes 的基礎。
3.Kubernetes 是自成體系的管理工具,有自己的服務發現和複製,需要對現有應用的重新設計,但是能支援失敗冗餘和擴充套件系統。
4.Mesos是低階別 battle-hardened排程器,支援幾種容器管理框架如Marathon, Kubernetes, and Swarm,現在Kubernetes 和 Mesos穩定性超過Swarm,在擴充套件性方面,Mesos已經被證明支援超大規模的系統,比如數百數千臺主機,但是,如果你需要小的叢集,比如少於一打數量的節點伺服器數量,Mesos也許過於複雜了。
原文:
Swarm v. Fleet v. Kubernetes v. Mesos
相關文章
- 對比剖析Swarm Kubernetes Marathon編排引擎Swarm
- Jenkins vs Kubernetes:比較 DevOps 工具Jenkinsdev
- js 深比較和淺比較JS
- Go和Python比較的話,哪個比較好?GoPython
- ImageMagic 和 GraphicsMagick 的比較
- ArrayList和LinkedList的比較
- ==和equals方法的比較
- Oracle date 型別比較和String比較Oracle型別
- Twitter 宣佈拋棄 Mesos,全面轉向 Kubernetes
- Twitter 宣佈拋棄 Mesos,全面轉向Kubernetes
- Spark on Yarn 和Spark on MesosSparkYarn
- not in 和 not exists 比較和用法
- TreeMap和HashMap的元素比較HashMap
- Apache Hadoop Yarn與Kubernetes比較選擇 - codehunterApacheHadoopYarn
- Go 與 C++ 的對比和比較GoC++
- etcd和redis比較Redis
- TCP和UDP比較TCPUDP
- Redis 和 Memcached 比較Redis
- Java和JavaSciprt比較Java
- kubernetes ingress 在物理機上的nodePort和hostNetwork兩種部署方式解析及比較
- Kubernetes決勝Swarm的優勢在這裡?Swarm
- powershell中的where和foreach比較
- tbase和postgres-xl的比較
- EXCEL,POI,EASYEXCEL的使用和比較Excel
- 類和類之間的比較
- mongodb和hbase的簡單比較MongoDB
- jQuery的prop和attr方法比較jQuery
- Mysql中的Datetime和Timestamp比較MySql
- BigDecimal的equals() 和 compareTo() 方法比較Decimal
- [C#] string 和 StringBuilder 的比較C#UI
- 比較器-Comparable和Comparator
- PyTorch和TensorFlow比較 - thegradientPyTorch
- 驗證Kubernetes YAML的六個工具比較 - learn8sYAML
- C++宏和函式的比較C++函式
- Dalvik 和 Java 位元組碼的比較Java
- MySQL 的 timestamp 和 datetime 型別比較MySql型別
- Java™ 教程(比較字串和字串的部分)Java字串
- JavaScript - 函式 setTimeout 和 setInterval 的比較JavaScript函式
- MySQL 中的 distinct 和 group by 的效能比較MySql