Docker 与 Mesos 的前生今世 | 数人云CTO肖德时@KVM分享实录

“315”当天,小数给大家带来一篇技术正能量满满的分享——来自KVM社区线上群分享的实录,分享嘉宾是数人云CTO肖德时。

嘉宾介绍:

肖德时,数人云CTO

十五年计算机行业从业经验,曾为红帽 Engineering Service 部门内部工具组 Team Leader,Docker/Mesos 社区代码贡献者。现负责数人云云计算的研发及架构设计工作,深入研究 Docker,Mesos 集群, 云计算等领域。

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 时代存在多年
(图2) 3.容器技术在 Linux 技术栈中的分布
(图3) 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

(图4) 5.Docker Containers vs. Traditional VMs

传统 VMs 包括有浪费资源的 Guest OS,而 Docker通过分层共享通用的 OS 和类库部分 (图5)

什么是应用容器

  1. 基于集装箱分发的成功经验,一个应用容器是包含了一个应用程序运行时的完整部署单元,用来保证部署过程中自动化、版本控制和快速部署的实现

(图6) 2. 应用部署的难点主要集中在应用的二进制本身和应用的依赖的部署(Java JRE,Ruby Gems,Python, App Server等等)

(图7) 3. Docker images 包括了应用依赖库和应用程序本身

(图8)

Docker 的特点

1.Dockerfiles:

  • 描述了容器的组织内容,以及在启动后执行什么命令

  • 通常一容器一进程模式

  • Dockerfiles 应该作为源码的一部分放在代码仓库中

(图9) 2.Docker layers 是一层一层依赖堆叠在一起,每层只保存不一样的内容

(图10)

3.镜像仓库

(图11) 4.DockerHub ,DockerCloud

(图12)

Docker 的发展现状

(图13)

(图14) Enterprise Technology Research通过6年数据统计得出 Docker 是最有投资价值的企业

(图15)

Docker 的性能介绍

IBM 研究院评测(2014)显示 Docker 能达到和 KVM 同样的性能,接近裸机的执行性能

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

(图16)

Docker 的发展介绍

1.DockerCon14 Europe宣布

Docker 编排服务

Docker Machine

Docker Swarm

Docker compose

Docker Hub Enterprise

2.Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

(图17) 3.Docker Swarm是 Docker原生的集群编排工具,它能管理多个 Docker 主机,组成一台虚拟的容器集群主机
4.支持 etcd,consul,zookeeper 3种服务发现系统
5.支持集成到Bluemix,Mesos,Kubernetes,AWS, Azure

(图18)

6.Docker Compose是一个可以简化多容器应用组合的编排工具,通过使用Compose,你可以在一个配置文件中定义应用的组件,包括容器、配置、连接、卷等,然后你可以通过一个简单的命令将所有的组件组合并运行。

(图19)

Docker 对应用管理的影响

1.因为 Docker 全新的设计理念,让应用必须重构才能很好的在 Docker 上运行。十二要素应用和微服务架构都是很好的指导方法

(图20) http://12factor.net/zh_cn/

(图21) 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

(图22)

Docker 带来的挑战

1.单台主机上的容器之间网络互联可以很容易做到,但是当容器需要跨越主机之间的网络互联,复杂度就提高了。

2.通过选择以下方案得到解决:

  • 服务发现

    Docker Swarm

    Etcd

    Consul

    Zookeeper

  • 软件定义网络(SDN)

    Docker Networking

    Weave

    Coreos’ Flannel

    Project Calico

(图23) 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)

(图24)

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 的业界标准

(图25)

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也推荐你使用