Docker 與 Mesos 的前生今世 | 數人云CTO肖德時@KVM分享實錄

今天小數給你們帶來一篇技術正能量滿滿的分享——來自KVM社區線上羣分享的實錄,分享嘉賓是數人云CTO肖德時。html

嘉賓介紹:git

肖德時,數人云CTO算法

十五年計算機行業從業經驗,曾爲紅帽 Engineering Service 部門內部工具組 Team Leader,Docker/Mesos 社區代碼貢獻者。現負責數人云雲計算的研發及架構設計工做,深刻研究 Docker,Mesos 集羣, 雲計算等領域。sql

Docker 成長曆程與生態環境

Docker 成長曆程

  • Docker提供了業界領先的容器引擎,基於 Apache 2.0 版權開放源代碼數據庫

  • 容許應用能夠攜帶運行環境在任意的主機上運行(容器技術)安全

  • 2014年6月9日發佈v1.0版本服務器

  • 實現了在主流 Linux 系統中可使用 Docker容器微信

  • 號稱「虛擬化2.0」的產物,去掉了hypervisor部分網絡

  • 容器更好的利用了硬件資源,輕量的執行效率優於傳統虛擬化架構

  • 結合 DevOps 社區的最佳實踐,提高了應用發佈、部署的流程

  • 迅速吸引開發人員和運維人員的興趣,並大量使用

  • Docker 已經在業界領軍企業的產品中被積極採納,已知的企業有:IBM、Microsoft、Google、Amazon、VMWare、Red Hat等等

  • Docker 公司已得到超過10億美圓的VC 投資

  • Docker 技術已發展有2年多時間,2016年開始走向成熟技術發展

Docker 在雲計算時代的應用

1.Docker Engine: A 「Hypervisor」 for Containers
圖片描述
2.容器技術不是新概念,在 Unix 時代存在多年
圖片描述
3.容器技術在 Linux 技術棧中的分佈
圖片描述
4.部署方式已經轉變爲 VMs 和 Images

  • VMs 和 Images 在雲端場景大量使用

AWS Xen and Amazon Machine Images

SoftLayer Xen and Standard/Flex Images

Microsoft Azure – Customized Hyper-V and VM Images

Google Compute Engine – KVM

OpenStack – KVM

  • 相似技術也在傳統數據中心採用

VMWare vSphere

Citrix Xen

KVM

Microsoft Hyper-V

圖片描述
5.Docker Containers vs. Traditional VMs

傳統 VMs 包括有浪費資源的 Guest OS,而 Docker經過分層共享通用的 OS 和類庫部分
圖片描述

什麼是應用容器

  1. 基於集裝箱分發的成功經驗,一個應用容器是包含了一個應用程序運行時的完整部署單元,用來保證部署過程當中自動化、版本控制和快速部署的實現

圖片描述

  1. 應用部署的難點主要集中在應用的二進制自己和應用的依賴的部署(Java JRE,Ruby Gems,Python, App Server等等)

圖片描述

  1. Docker images 包括了應用依賴庫和應用程序自己

圖片描述

Docker 的特色

1.Dockerfiles:

  • 描述了容器的組織內容,以及在啓動後執行什麼命令

  • 一般一容器一進程模式

  • Dockerfiles 應該做爲源碼的一部分放在代碼倉庫中

圖片描述
2.Docker layers 是一層一層依賴堆疊在一塊兒,每層只保存不同的內容

圖片描述

3.鏡像倉庫

圖片描述
4.DockerHub ,DockerCloud

圖片描述

Docker 的發展示狀

圖片描述

圖片描述

Enterprise Technology Research經過6年數據統計得出 Docker 是最有投資價值的企業

圖片描述

Docker 的性能介紹

IBM 研究院評測(2014)顯示 Docker 能達到和 KVM 一樣的性能,接近裸機的執行性能

《An Updated Performance Comparison of Virtual Machines and Linux Containers》

圖片描述

Docker 的發展介紹

1.DockerCon14 Europe宣佈

Docker 編排服務

Docker Machine

Docker Swarm

Docker compose

Docker Hub Enterprise

2.Docker Machine是一個簡化Docker安裝的命令行工具,經過一個簡單的命令行便可在相應的平臺上安裝Docker,好比VirtualBox、 Digital Ocean、Microsoft Azure。

圖片描述

3.Docker Swarm是 Docker原生的集羣編排工具,它能管理多個 Docker 主機,組成一臺虛擬的容器集羣主機
4.支持 etcd,consul,zookeeper 3種服務發現系統
5.支持集成到Bluemix,Mesos,Kubernetes,AWS, Azure

圖片描述

6.Docker Compose是一個能夠簡化多容器應用組合的編排工具,經過使用Compose,你能夠在一個配置文件中定義應用的組件,包括容器、配置、鏈接、卷等,而後你能夠經過一個簡單的命令將全部的組件組合並運行。

圖片描述

Docker 對應用管理的影響

1.由於 Docker 全新的設計理念,讓應用必須重構才能很好的在 Docker 上運行。十二要素應用和微服務架構都是很好的指導方法

圖片描述

http://12factor.net/zh_cn/

圖片描述

http://www.slideshare.net/adrianco
http://martinfowler.com/articles/microservices.html
2.專一於Docker 的操做系統將受到關注,它被稱之爲「極簡 OS」,這些操做系統提供以下關鍵特性:

經過隔離技術和精簡的系統接口提高安全能力

鏡像變的更小,啓動速度加快

提供事務級別組件升級和回滾

3.「極簡 OS」包括以下:

CoreOS

Red Hat’s Project Atomic

Ubuntu’s Snappy Ubuntu Core

RancherOS

Microsoft’s Nano Server

圖片描述

Docker 帶來的挑戰

1.單臺主機上的容器之間網絡互聯能夠很容易作到,可是當容器須要跨越主機之間的網絡互聯,複雜度就提升了。

2.經過選擇如下方案獲得解決:

  • 服務發現

Docker Swarm

Etcd

Consul

Zookeeper

  • 軟件定義網絡(SDN)

Docker Networking

Weave

Coreos’ Flannel

Project Calico

圖片描述

3.企業特性在現代虛擬化平臺中很常見,但Docker 缺失,這些特性以下:

  • 細粒度的管理控制權限

  • 容器熱遷移

  • 備份和恢復選項

  • 超大規模部署的管理工具

  • 審計和日誌支持

  • 符合安全規範

4.Docker 社區正在設法解決這些缺失,而且第三方廠商也在推出這些領域的解決方案

容器安全受到多方面的重視,潛在的漏洞都會獲得關注,安全風險領域包括:

  • Docker engine daemon以 root 用戶運行

  • 缺少安全參數

  • Docker API 入口

  • 鏡像完整性簽名

  • 容器能夠執行system calls

  • 容器能夠訪問主機文件系統

Docker 社區正在協做解決這些安全問題

在多租戶部署場景下安全問題關注度最高:

"These containers aren't secure. They don't have that kind of isolation. They're sharing so much of their underlying operating system that they can't be effectively secured, at least not to the kind of level of risk that we'd be comfortable running two different customers in containers side by side" – Microsoft Azure CTO Mark Russinovich

5.CoreOS 發佈Rocket 引擎 v1.0

  • App Container Image

  • App Container Runtime

  • opencontainers/runc (libcontainer)

圖片描述

Docker 的成長趨勢

  • 04/14/2015 – Docker Raises $95M Series D Round for Its Container Platform

  • Docker 正在構建全平臺的容器服務支持

  • 有策略的收購:Orchard,Kitematic,Socketplane,Tutum

  • 經過企業合做加強企業特性
    (IBM,Amazon,Google,Red Hat,VMWare,Microsoft,等等)

  • 經過與 Microsoft 的合做,增長對 Windows Containers 的支持

  • 成爲微服務架構的默認部署方式

  • 成爲 Images 和 Containers 的業界標準

圖片描述

Mesos基礎入門

Mesos是Apache下的開源分佈式資源管理框架,它被稱爲是分佈式系統的內核。Mesos最初是由加州大學伯克利分校的AMPLab開發的,後在Twitter、Netflix、AirBnb、Autodesk、Apple 等獲得普遍使用,國內有愛奇藝、360、小米、去哪兒等公司也在使用 Mesos 技術。

Mesos實現了兩級調度架構,它能夠管理多種類型的應用程序。第一級調度是Master的守護進程,管理Mesos集羣中全部節點上運行的Slave守護進程。集羣由物理服務器或虛擬服務器組成,用於運行應用程序的任務,好比Java、Mysql Cluster、Hadoop 等。第二級調度由被稱做Framework的「組件」組成。Framework包括調度器(Scheduler)和執行器(Executor)進程,其中每一個節點上都會運行執行器。Mesos能和不一樣類型的Framework通訊,每種Framework由相應的應用集羣管理。Mesos Master協調所有的Slave,並肯定每一個節點的可用資源,聚合計算跨節點的全部可用資源的報告,而後向註冊到Master的Framework(做爲Master的客戶端)發出資源邀約。Framework能夠根據應用程序的需求,選擇接受或拒絕來自master的資源邀約。一旦接受邀約,Master即協調Framework和Slave,調度參與節點上任務,並在容器中執行,以使多種類型的任務,好比Hadoop和Cassandra,能夠在同一個節點上同時運行。

Mesos與K8s等技術的對比

假如你剛入門集羣計算,那麼Kubernetes將會是很好的出發點;它快捷,易用,輕量的方式來處理集羣導向開發的集成和體驗。它提供了很是高瞻遠矚式的可移植性,讓它得以支持多家提供商(微軟,IBM,紅帽,CoreOS,Mesosphere, Kismatic, VMware等等)。

Kubernetes是一個開源項目,由Google Cloud Platform組開發,給全球的虛擬機帶來了容器集羣管理的能力,固然還包括裸機硬件。它能和當代的操做系統很好的一塊兒工做,例如:Ubuntu, RedHat, Project Atomic/CentOS, 或者CoreOS。這些系統提供了輕量的計算節點來受你託管。Kubernetes是用Golang語言寫的,它輕量、模塊化、可移植還有擴展性。Google的Kubernetes開發組正在和數個不一樣背景的技術公司一塊兒制定基於Kubernetes做爲標準的計算集羣的標準方案。這個想法就是借鑑Google在構建分佈式應用上積累的經驗來幫助須要構建分佈式應用的開發者。這些核心的理念包括如下一些基本概念:

• Pods --- 是鏈接在一塊兒的容器組合並共享文件卷。它們是最小的部署單元,由Kubernetes統一建立、調度、管理。Pods是能夠直接建立的,但推薦的作法是你使用replication controller,即便是建立一個Pod。

• Replication controllers --- 管理Pods的生命週期。它們確保指定數量的Pods會一直運行,經過建立和殺掉Pods能夠保證到這個效果。

• Labels --- 它被用來管理和選取基於鍵值對爲基礎的對象組。

• Services --- 提供獨立、可靠名稱和地址的Pods集合。它就像一個基礎版本的負載均衡器。

因此,伴隨着Kubernetes,你將得到一些簡單、易用的即起即用性,可一致性和擴展性。當加入「分佈式」這個術語到你管理的事情上,這個事情將是一個真正輕量的方式。在一個集羣裏運行應用程序,再也不擔憂單獨的主機。在這個例子中,一個集羣是一個靈活的資源就像一個虛擬機。它是一個邏輯計算單元,你能夠啓動它,使用它,調整集羣大小,關閉它,既快速也容易。

對於Mesos,這裏有不少基本觀點的重疊定義,可是產品確實有一些不用的點在他們的生命週期之中,而且有一個亮點。Mesos是一個分佈式系統內核,編織不一樣類型的主機放在一塊兒當一臺邏輯計算電腦。它的出現是基於你擁有大量的物理機資源讓你可以使用,來建立大型的靜態計算集羣。很重要的事情是它能讓不少現代可擴展的計算處理應用能運行的很好在Mesos集羣之上(Hadoop, Kafka和Spark)。它很是棒的地方在於能夠在一樣的基礎資源環境裏同時能夠運行這些計算處理應用,包括同時運行微服務時代的容器類型的應用。有些地方它確實比Kubernetes重,可是它愈來愈易用,這要歸功於Mesosphere公司的團隊貢獻。

如今讓這個事情更有趣的是Mesos已經開始採用並加入更多Kubernetes的概念來支持Kubernetes API。假如你須要Mesos的特性,這樣會是一個網橋鏈接Mesos,以讓你的Kubernetes程序能到更多兼容性的特性(好比:高可靠Master,更多調度的概念,以及管理大量節點的能力)。而且它已經很好的適配到生產環境中(Kubernetes仍然是一個預覽版測試階段,V1的調度將在1到2個月被髮布出來)。
假如你已經有了特殊的環境(Spark, Hadoop, Kafka等等),Mesos將給你一個框架,讓你插入這些系統到你的集羣裏,而且能夠混合運行一些Kubernetes程序。Mesos給你提供了一個安全閥,在你須要這些計算能力但社區尚未提供實現的狀況下能夠實現支持。

假如你來自虛擬機的世界,或者傳統的服務器架構,Kubernetes將是很好的選則。Mesos須要一個自定義的"Framework"來支持例如運行 MariaDB,可是Kubernetes的容器化應用卻能夠直接運行,並不須要任何修改。這是一個進入可擴展容器集羣的最佳辦法。

深刻解析 Mesos 生態,問題和發展方向

2015年我去西雅圖參加 Mesos Conf 時,會議規模在600多人左右,因此Mesos應該是在2015年開始發展迅猛起來的。如今Mesos社區貢獻代碼的主要是Mesosphere,Twitter,IBM和Intel 等,大多數committer都來自Mesosphere。可是,這個社區的組織很是穩定,Mesosphere 並不會強制增長新 Feature,你們都是在一塊兒討論過程當中去實現 Roadmap 中的新特性。讓我在參與過程當中,能夠很方便的和世界各地的開發者一塊兒交流本身的觀點。你們交流的方式是按照 Apache 項目傳統的方式-郵件列表來組織的,只要按照 Apache 的開發模式,你能夠很容易的融入到社區裏面。只是須要很長時間,你才能真正成爲 Committer。這個也是 Apache 項目的一個特色。

Mesos的生態系統我也是在2015年纔開始真正關注,我首先關注到Spark 的原生支持很是好,接着看到 Mesos 對大數據的整個生態圈是全面支持的。這個是 Mesos 社區的一個自然優點。而後對於各種應用,業界也貢獻了不少好用的框架,好比 Marathon、Chronos、Spark、Kubernetes、Cassandra、Elasticsearch、Swarm 等等。因此,這個讓我有了很大的想象空間。這些Frameworks,我能夠任意的組合和調配,徹底知足我對新功能的探索和定製工做。

目前我比較關注的點和當前 Docker 有關係:Unified Container Mesos-2840,Mesos 以前是直接經過命令行來調用 Docker的。從以前的用戶反饋也大量反應出用戶對 Docker 使用兼容性的苦惱。因此,Mesos 的開發者在設想咱們能不能把 Docker 的依賴去掉,本身實現一套 Docker client 端,和 Docker 的服務端其實是經過 API 來約束。這個設計實現後,還能夠同時支持 CoreOS 的 rkt 引擎。讓Mesos 支持的容器生態圈更加繁榮。

行業使用場景分享(包括秒殺等互聯網高併發,以及生物、教育等領域)

對於行業使用場景,主要是須要參考業界的使用案例。好比浙江移動的 DCOS 在秒殺業務中的使用。去哪兒的 Mesos 日誌處理模塊的處理。咱們能夠參考的案例很是多,足以支持咱們對 Mesos 在互聯網高併發、生物、教育等等行業找到最佳實踐。
對於秒殺業務,你們都會把關注點集中在性能上。可是若是沒有一個分佈式的架構,怎麼可能發揮應用的完整性能呢?這個時候 Mesos 這個框架就是一個很好的參考。它提供了一個分佈式的 Core 框架模型。秒殺的場景下,讓應用作成無狀態的水平擴展來支撐流量成爲可能。

分佈式框架下,程序的組織方式也會被迫使作一些改變,慢慢往微服務架構方向轉變。因此,秒殺業務自己能夠有不少種解決方法,可是你能夠選擇Mesos 來構建這個池化的環境,讓業務流量被支撐。固然微服務的改造若是沒有 Docker 這個標準的隔離組件,業務上是須要作不少工做才能支持微服務環境的。用了 Docker 以後,同一臺機器是能夠安裝多份實例的,這個好處就是應用自己是一個單體模型的程序,經過 Docker 來動態的建立多實例。多個實例設計成無狀態,而且交互也經過 REST API 來限制接口,這個時候,這個微服務模型就出來了。固然,秒殺系統包含了隊列、數據庫、過濾規則引擎等模塊,如何合理的解構出微服務模塊又是另外一個應用開發的話題,這裏不表。總的來講,Mesos+Docker 的技術引進確實給秒殺系統的資源利用率提升了,業務結構也變得更模塊化。方便的開發模型和動態的資源利用是對秒殺業務系統的最直接的好處。

生物算是一個典型的分佈式計算的業務場景,生物雲計算最大的需求是算法的計算,可是這個計算須要耗費的資源是很是高的。如何把原有的老算法程序跑在分佈式環境下是一個難題。爲了匹配這個業務場景,發現 Mesos 是一個可靠的集羣方案。注意,生物公司的算法程序已經有了,涉及算法的複雜性,遷移過程是須要時間的,但生物的業務不能等這個遷移過程,這個須要有一個隔離環境來解決。這個時候,Docker 的優點就發揮出來了。Docker 是能隔離的,因此,對於老程序,你用 Docker 是能夠容器化的,而且直接就能夠把老程序丟到機器上跑。自然的隔離性讓一臺機器能夠跑多個算法實例,實現資源的高利用率。除此以外,生物公司還能夠繼續用 Spark 等大數據技術實現老算法的遷移,在不影響業務的狀況下,還能自主創新。一套集羣既能夠跑老業務算法,又能夠跑新業務算法,作到業務不中斷狀況下更新技術棧的效果。

對於教育行業,Mesos+Docker 的用處主要是提供一個固定的資源池。而後經過 Docker 的隔離封裝,給學員提供能夠重複練習的實驗 Lab環境。對於環境,其實 Docker 起到的做用是相當重要的。若是學員須要 Linux 主機,經過啓動一個 Docker 容器就能夠提供 Linux 環境。但目前支持的類型比較有限,最好是單容器的環境支持是最好的。

精彩問答:

微信羣 |《運維前線》
Q1:想學習Mesos,Docker,有沒有比較好的學習線路,謝謝
A1:先從 Docker 學起,而後根據須要在使用 Mesos 搭建你的業務平臺

Q2:Docker容許在CentOS6是否穩定?
A2:Docker 已經不作支持。

Q3:Docker 管理大規模訪問量的服務器存在什麼不足?
A3:目前瓶頸就是多緯度的管理,這方面 Mesos 能夠支持更好一點。

Q4:「有些地方它確實比Kubernetes重,可是它愈來愈易用」。可否請嘉賓談談到底哪方面比較重?如何在實戰中規避這些問題?謝謝
A4:Mesos 支持大數據和容器,確定重。實戰中咱們也是摸索中實踐來看看。畢竟已經有不少企業案例能夠參考了。

Q5:用Docker來部署Hadoop集羣是否可行,會不會由於是容器套容器而影響性能?目前在下正在研究將Hadoop集成到Docker容器中,這樣在離線環境能夠快速部署Hadoop集羣(咱們現有業務,須要部署不少這樣的集羣,除了Docker有沒有其餘的方式?)。
A5:能夠作到快速部署 Hadoop,須要PaaS 層作調度。

Q6:Mesos+Docker 最近常常踩的坑是啥?能稍微說下讓你們少走彎路
A6:目前最多見的問題就是系統兼容性,dm/aufs,但這些問題都是 Docker 原本就有的,咱們經過實踐已經取得很好的收益。
微信羣 | 雲實名
Q1:微軟的兩種容器(Windows Server Container、Hyper-V Container),對Docker有什麼影響?
A1:我理解微軟的容器技術是和 Docker 公司合做一塊兒推廣的,實際上是助推了 Docker 的商業版圖。

Q2:容器是否是打破了運行庫的共享性,原來在一臺電腦上安裝一套運行庫就能夠了,如今每一個容器裏都要安裝單獨的運行庫了。個人理解對嗎?
A2:不須要,它能夠複用運行庫,由於 image layter 是分層的。

Q3:剛纔PPT裏說到了Docker的網絡環境須要解決方案,例如多個主機上的容器的互聯,我知道Kubernetes是要藉助Flannel或者Ovs的,不知道Mesos是怎麼作的
A3:Mesos 也能夠用 Flannel or Ovs,不過 Mesos 社區正在推 Calico。我這裏使用Weave

Q4:Docker容器的隔離最大或者最深能到什麼程度?
A4: Docker 1.10已經能夠完整隔離Kernel Namespace 層的資源。能夠大膽使用 Docker 了。

Q5:我感受好像除了共用一個內核,其餘都隔離了。不知道對不對
A5:如今真的能夠這麼理解了 Docker Rocks

Q6:若是我備份整個系統的話,Docker會被保護嗎?換句話說,Docker有哪些是常駐內存的,有哪些是寫磁盤的?
A6:Docker 容器是一個進程,因此都是寫到磁盤的。
QQ羣
Q1:Docker 跟Openstack本質區別是什麼,有管理平臺麼
A1:按照以前的發展之路,你會發現,Docker 和 Openstack 是融合的。對於 Docker 的管理平臺,目前 Docker 官方有 Docker Datacenter 版本提供管理

Q2:數人云在Mesos/Docker的商業支持上主要有什麼看點,或者說選擇數人云的理由是什麼
A2:目前咱們支持:
1) 自動彈性伸縮--最大化提升資源利用率
2) 支持高併發--適用於企業大規模生產環境,實現百萬併發
3) OpenAPI--快速接入第三方服務無縫交互

Q3:如何看待Docker前段時間推出的Datacenter組件的定位呢?
A3:Datacenter 是 Docker 商業化的一次嘗試,目前來看,反應很是好。Docker 公司也須要盈利。

Q4:Mesos集羣中的網絡互連是怎麼實現的?A4:目前 Mesos 社區對網絡主要推薦試用 Calico,但 Docker 的 Weave也推薦你使用

相關文章
相關標籤/搜索