kubernetes 和 mesos + marathon的對比


Kubernetes概述

根據Kubernetes網站的說法,“Kubernetes是一個自動化,容器化應用程序部署擴展和管理的開放源代碼系統。”Kubernetes由Google根據他們在生產中運行容器的經驗使用稱為Borg的內部集群管理系統(有時簡稱Omega)。 Kubernetes的體系結構依賴於這種經驗,如下所示:

 

 

從上圖可以看出,有一些與Kubernetes集群相關的組件。主節點將容器工作負載放置在工作節點。其他組件包括:

etcd:該組件存儲配置數據,可以通過簡單的HTTP或JSON API由Kubernetes master API服務器訪問(可以看作集群數據庫)。

APIserver:此組件是Kubernetes主節點的管理中心。它有助於各個組件之間的通信,從而保持集群的健康。

Controller Manager:該組件確保通過向上和向下擴展工作負載來使群集的期望狀態與當前狀態相匹配。

Scheduler:該組件將工作負載放置在適當的節點上。

Kubelet:該組件從API服務器接收pod規范並管理在主機中運行的pod。

以下列表提供了與Kubernetes相關的一些其他常用術語:

pod:Kubernetes編排調度容器以pod 為單位。同一個pod中的容器運行在同一個節點上,並共享資源,如文件系統,內核命名空間和IP地址。

Deployments:可以創建管理一組pod。部署可以與服務層一起用於水平擴展或確保可用性。

Services:可以直接訪問。 Kubernetes為集群提供一個DNS服務器,用於監視新服務,並允許他們通過名稱進行尋址。服務是您的容器工作負載的“外在表現”。

Labels:關聯到實際各種對象的鍵值對。它們可以用來搜索和更新多個對象作為一個單一集合。(例如:可以用標簽區分,實驗環境,測試環境)

Mesos + Marathon概述

Mesos是一個分布式內核,旨在為您的數據中心提供動態的資源分配。想象一下,你管理一個中型企業的IT部門。您需要在一天中的100個節點上運行工作負載,但是需要在25個小時后運行。 Mesos可以重新分配工作負載,以便其他75個節點在不使用時可以關閉電源。 Mesos也可以提供資源共享。如果您的某個節點發生故障,則可以將工作負載分配到其他節點中。

Mesos帶有許多使用其資源共享功能的框架和應用棧。每個框架由一個調度器和一個執行器組成。 Marathon是一個框架(或元框架),可以啟動應用程序和其他框架。 Marathon還可以作為容器編排平台,為容器工作負載提供擴展和自我修復。下圖顯示了Mesos + Marathon的架構。

 

 

Mesos和Marathon中有許多不同的組件。以下列表提供了一些常用術語:

Mesos Master:master這種類型的節點可以給多種框架共享資源,例如用於容器編排的Marathon,用於大規模數據處理的Spark以及用於NoSQL數據庫的Cassandra。

Mesos Slave:Slave這種類型的節點執行實際工作任務,並且向master匯報可用資源。

Framework:Framework向Master注冊,master允許Framework的任務在slave節點執行。

Zookeeper:這個組件提供了一個高度可用的數據庫,這個數據庫可以讓群集保持現在的狀態,並且穩定。

Marathon Scheduler:這個組件接收來自Mesos master的報告。 Mesos master 提供當前集群可用的內存,CPU

Docker Executor:這個組件接收來自Marathon調度器的任務,並啟動slave節點上運行容器。

Mesosphere DCOS

Mesosphere Enterprise DC / OS利用Mesos分布式系統內核,在容器和大數據管理基礎上構建,提供安裝,用戶界面,管理和監視工具等功能。下圖顯示了DCOS的高級體系結構。

 

 

kubernetes 對比 mesos + marathon

1. 應用定義

k8s: 可以使用Pod,部署和服務的組合來部署應用程序。一個pod是一組位於同一節點的容器,是部署的原子單位。部署可以在多個節點上具有副本。服務是容器工作負載的“外部表現”,並與DNS集成配合訪問。

marathon:從用戶的角度來看,應用程序將作為Marathon在節點上調度的任務運行。 對於Mesos,應用程序是一個框架,可以是Marathon,Cassandra,Spark等等。 Marathon將容器調度為在從節點上執行的任務。marathon 1.4引入了pod 的概念( 如同 Kubernetes pod),但這不是marathon核心的一部分。 節點可以根據機架,連接的存儲類型等進行標記。啟動Docker容器時可以使用這些約束。

2.應用的可擴展性

k8s:每個應用程序層都被定義為一個pod,並且可以在通過聲明性指定的部署進行管理時進行縮放,例如,在YAML中。 縮放可以是手動或自動的。

marathon:可以使用Mesos CLI或UI。 可以使用JSON定義來啟動Docker容器,這些定義指定了存儲庫,資源,實例數量和要執行的命令。 可以通過使用Marathon UI進行擴展,Marathon調度程序將根據指定的標准將這些容器分布在從節點上。 支持自動縮放。 可以使用應用程序組來部署多層應用程序。

3.高可用

k8s:pod可以部署在不同節點上支持高可用。多個master節點,node 節點可以以負載均衡的方式對應客戶端的訪問。etcd 可以以集群方式部署

marathon: 容器可以不受限制的部署在任何節點上。使用Zookeeper支持Mesos和Marathon的高可用性。 Zookeeper提供Mesos和Marathon領導者的選舉並維護集群狀態。

4.負載均衡

k8s: Pod是通過服務暴露的,可以在集群內用作負載平衡器。

marathon :主機端口可以映射到多個容器端口,作為其他應用程序或最終用戶的前端。

5.應用程序自動伸縮

k8s:使用簡單的pod目標進行自動縮放是使用部署以聲明方式定義的。 還支持使用資源度量的自動縮放。 資源指標范圍從CPU和內存利用率到請求或每秒數據包甚至自定義指標。

marathon:馬拉松持續監視正在運行的Docker容器實例的數量。 如果其中一個容器發生故障,Marathon會將其重新安排在其他從屬節點上。 只有通過社區支持的組件才能使用資源指標進行自動擴展。

6.應用程序滾動升級,回滾

k8s : 在deployment中有滾動升級和回滾的策略。可以設置pod最大數量。

marathon: 部署支持應用程序的滾動升級。失敗的升級可以使用回滾更改的更新部署進行修復。

7.健康檢查

k8s:健康檢查有兩種:活躍(即應用程序響應)和准備(應用程序響應,但正在忙着准備,還沒有能夠服務)。

marathon:運行狀況檢查可以指定為針對應用程序的任務運行。健康檢查請求可用於許多協議,包括HTTP,TCP和其他協議。

8.存儲

k8s:兩個存儲API:第一個提供個人存儲后端的抽象(例如NFS,AWS EBS,Ceph,Flocker)。 第二個提供存儲資源請求的抽象,這可以用不同的存儲后端來實現。 修改集群節點上Docker守護進程使用的存儲資源需要暫時從集群中刪除該節點。 Kubernetes提供了幾種類型的持續卷,支持塊或文件。 例子包括iSCSI,NFS,FC,亞馬遜網絡服務,Google雲端平台和微軟Azure。 emptyDir卷是非持久性的,可以用來讀取和寫入容器的文件。

mesos/marathon:本地持久性卷(測試版)支持有狀態的應用程序,如MySQL。 需要時,可以使用相同的卷在同一節點上重新啟動任務。 外部存儲(如Amazon EBS)的使用也在測試階段。 目前,使用外部卷的應用程序只能縮放到一個實例,因為卷一次只能附加到一個任務。

9.網絡

k8s:網絡模型是一個扁平的網絡,使所有的pod互相通信。 網絡策略指定pod如何相互通信。 平面網絡通常作為overlay來實現。 該模型需要兩個CIDR:一個從中獲取IP地址,另一個用於服務。

mesos/marathon:網絡可以在主機模式或網橋模式下進行配置。 在主機模式下,主機端口由容器使用。 這可能會導致任何給定主機上的端口沖突。 在橋接模式下,容器端口使用端口映射橋接到主機端口。 主機端口可以在部署時動態分配。

10.服務發現

k8s:可以使用環境變量或DNS來找到服務。 運行pod時,Kubelet會添加一組環境變量。 Kubelet支持簡單的{SVCNAME_SERVICE_HOST}和{SVCNAME_SERVICE_PORT}變量,以及Docker鏈接兼容變量。 DNS服務器可作為附件使用。 對於每個Kubernetes服務,DNS服務器創建一組DNS記錄。 在整個群集中啟用DNS后,pod將能夠使用自動解析的服務名稱。

marathon:服務可以通過“命名VIP”發現,它們是與IP和端口關聯的DNS記錄。 服務由Mesos-DNS自動分配DNS記錄。 可以創建一個可選的命名VIP; 通過VIP的請求是負載平衡的。

11.性能和節點支持

k8s:  Kubernetes可擴展到5,000個節點的集群。可以集群聯邦來擴展超出此限制。

mesos/marathon: Mesos的2層體系結構(包括Marathon)非常具有可擴展性。據Digital Ocean介紹,Mesos和Marathon集群已經擴展到10,000個節點。

優缺點

k8s:各種各樣的存儲選項,包括本地SAN和公共雲。 基於在Google上運行Linux容器的豐富經驗。 在組織中更頻繁地部署。 Kubernetes也得到來自Google(GKE)和RedHat(OpenShift)的企業支持。 容器編排工具中最大的社區。 超過50,000個提交者和1200個貢獻者。

mesos/marathon: Mesos + Marathon上的外部存儲,包括Amazon EBS在內。。 Mesos被Mesosphere所利用。 Mesosphere公司的DCOS產品主要由其創建者和唯一的商業發行Mesosphere支持。。 較小的社區。 超過12,000個提交者和240個貢獻者。

k8s缺乏單一的供應商控制,會使潛在客戶的采購決策復雜化。社區包括Google,Red Hat和2000多位作者。(來源:CNCF)Kubernetes僅為容器編排而建造。它基於10多年在Google管理Linux容器的經驗。Kubernetes 1.6可以擴展到5,000個節點的集群。超過5,000個節點的大規模可擴展性需要多個集群。

mesos/marathon: 單一供應商控制可能會考慮錯誤修復的問責制,以及與功能開發更好的協調。。 2層架構允許部署其他框架(工作負載)。 例子包括Spark,Chronos和Redis。 一些組織,如蘋果,彭博,Netflix等已經大規模地部署了超過10,000個節點的Mesos。 (來源:Mesosphere博客)

共同特點

開源項目。任何人都可以貢獻,但是Kubernetes享有更多,更多元化的社區參與。網絡功能,如負載均衡和DNS。記錄和監視。 Kubernetes的外部工具包括Elasticsearch / Kibana(ELK),sysdig,cAdvisor,Heapster / Grafana / InfluxDB(參考:Kubernetes的記錄和監測)。對於Mesos / Marathon,節點提供可以匯總的日志,可以使用外部工具進行監視。 (參考:為Mesos / Marathon監控日志記錄和調試)可以克服Docker和Docker API的限制。自動縮放支持本地。使用單獨的一套管理工具。 Kubernetes操作可以通過kubectl CLI和Kubernetes Dashboard來執行。 Mesos使用多種界面:Mesos CLI,Mesos UI,Marathon CLI,Marathon UI。對於Kubernetes和Mesos,Marathon,自己動手安裝可能會很復雜。 Kubernetes的部署工具包括kubeadm,kops,kargo等。 Kubernetes部署指南中的更多詳細信息。由於采用Marathon的2層架構,集群管理的Zookeeper設置,負載平衡的HA代理等,Mesos的安裝過程可能非常復雜。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM