openstack,docker,mesos,k8s什麼關係?

誰能用簡單的通俗易懂的語言告訴我,openstack,docker,mesos,k8s,這些技術的關係和用途。


謝邀,簡單說一下吧。

  • OpenStack:公認的雲計算IaaS平台,其管理的核心目標對象是機器(虛擬機或物理機),當然也可以管理存儲和網路,但那些也大都是圍繞著機器所提供的配套資源。近年來容器技術火了之後,OpenStack也開始通過各種方式增加對容器的支持,但目前OpenStack還不被視為管理容器的主流平台。
  • Docker:這裡我假定你指的是Docker engine(也叫做Docker daemon,或最新的名字:Moby),它是一種容器運行時(container runtime)的實現,而且是最主流的實現,幾乎就是容器業界的事實標準。Docker是用來創建和管理容器的,它和容器的關係就好比Hypervisor(比如:KVM)和虛擬機之間的關係。當然,Docker公司對Docker engine本身的定位和期望不僅僅在於在單機上管理容器,所以近年來一直在向Docker engine中加入各種各樣的高級功能,比如:組建多節點的Docker集群、容器編排、服務發現,等等。
  • Kubernetes(K8s):搭建容器集群和進行容器編排的主流開源項目(親爹是Google),適合搭建PaaS平台。容器是Kubernetes管理的核心目標對象,它和容器的關係就好比OpenStack和虛擬機之間的關係,而它和Docker的關係就好比OpenStack和Hypervisor之間的關係。一般來說,Kubernetes是和Docker配合使用的,Kubernetes調用每個節點上的Docker去創建和管理容器,所以,你可以認為Kubernetes是大腦,而Docker是四肢。
  • Mesos:哈,終於說到我目前正在做的啦!Mesos是一個通用資源管理平台,它所管理的核心目標對象既不是虛擬機/物理機,也不是容器,而是各種各樣的計算資源(CPU、memory、disk、port、GPU等等)。Mesos會收集各個節點上的計算資源然後提供給運行在它之上的應用框架(比如:Spark、Marathon、甚至是Kubernetes)來使用,應用框架可以將收到的計算資源以自己喜歡的任何方式創建成計算任務來完成特定工作(比如:創建一個大數據任務計算個π什麼的)。由於容器技術近年來的火熱,Mesos也對容器進行非常深層次的支持,它內部完整地實現了一個容器運行時(類似於Docker),所以,上層的應用框架可以方便地把自己的計算任務以容器的方式在Mesos管理的計算集群中運行起來。使用Mesos的門檻相對較高(需要應用框架編寫代碼調用Mesos的API和其集成),但一旦用起來之後靈活性和可擴展性更高,因為Mesos並不限制應用框架如何使用計算資源(可以以容器的方式使用,也可以是其它方式,比如:傳統的進程),主動權完全在應用框架自己手中。作為對比,Kubernetes只能管理容器,所有任務都必須以容器的方式來運行。為了解決門檻較高的問題(當然也是為了賺錢),Mesosphere(Mesos這個開源項目背後的商業公司)推出了DC/OS,其核心就是Mesos加一個內置的應用框架Marathon(可以用做容器編排),能夠達到開箱即用的效果,安裝好之後立刻就可以創建和管理容器和非容器類的任務了。


Openstack從開始的模仿AWS集成設施開始,一直在構建開放、私有的上雲的架構。但是因為利益紛爭,僅有實踐而沒有業界標準可以定下來。分支太多的結果是在落地過程中,不斷的改良技術演進,最終會發展成四不像的基礎設施環境。複雜、沒解決業務問題是最被吐槽的痛點。

好在2013年,Docker異軍突起,立刻在業界吹出一套,Build、Ship、Run的方法論。橫掃DevOps運維圈2年有餘,在容器熱點過後,大家期望技術落地,應用到日常的業務事務中。這個時候容器就懵逼了。能幹啥呢?啥也幹不了。

好在這個時候,Google振臂一呼,推出了Kubernetes,基於容器的集群管理平台,把這個矛盾轉成成動力,建立了雲原生基金會,為樹立業務場景技術選型提供既定的方案。好了,這個時候開始進入實踐期。

Mesos是Apache的頂級開源項目,是最開發的二級資源調度開發Kernel,通過定製上面的編排工具,可以快速定製一套自家的PaaS解決方案,非常受開發者喜歡。畢竟在一家公司不做出一點驚天地泣鬼神的業績,也不好對上級交代。所以,Mesos是製作分散式系統最佳的基礎組件平台。


推薦閱讀:

TAG:OpenStack | Docker | Kubernetes | Mesos |