Docker 与 Mesos 的前生今世|华章KVM分享实录

Posted 云技术实践

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 与 Mesos 的前生今世|华章KVM分享实录相关的知识,希望对你有一定的参考价值。

 



分享嘉宾


肖德时,数人云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 时代存在多年

Docker 与 Mesos 的前生今世|华章KVM分享实录


3. 容器技术在 Linux 技术栈中的分布

Docker 与 Mesos 的前生今世|华章KVM分享实录


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



Docker 与 Mesos 的前生今世|华章KVM分享实录


5. Docker Containers vs. Traditional VMs

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

Docker 与 Mesos 的前生今世|华章KVM分享实录

什么是应用容器

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


Docker 与 Mesos 的前生今世|华章KVM分享实录


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


Docker 与 Mesos 的前生今世|华章KVM分享实录

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


Docker 与 Mesos 的前生今世|华章KVM分享实录


Docker 的特点

1. Dockerfiles:

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

  • 通常一容器一进程模式

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


Docker 与 Mesos 的前生今世|华章KVM分享实录


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


Docker 与 Mesos 的前生今世|华章KVM分享实录


3. 镜像仓库

Docker 与 Mesos 的前生今世|华章KVM分享实录


4. DockerHub ,DockerCloud


Docker 与 Mesos 的前生今世|华章KVM分享实录


Docker 的发展现状


Docker 与 Mesos 的前生今世|华章KVM分享实录
Docker 与 Mesos 的前生今世|华章KVM分享实录

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

Docker 与 Mesos 的前生今世|华章KVM分享实录


Docker 的性能介绍


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

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

    Docker 与 Mesos 的前生今世|华章KVM分享实录


Docker 的发展介绍

1. DockerCon14 Europe 宣布

Docker 编排服务

  • Docker Machine

  • Docker Swarm

  • Docker compose

Docker Hub Enterprise


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


Docker 与 Mesos 的前生今世|华章KVM分享实录

3. Docker Swarm 是 Docker原生的集群编排工具,它能管理多个 Docker 主机,组成一台虚拟的容器集群主机

4. 支持 Etcd,Consul,Zookeeper 3种服务发现系统

5. 支持集成到 Bluemix,Mesos,Kubernetes,AWS, Azure


Docker 与 Mesos 的前生今世|华章KVM分享实录


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

Docker 与 Mesos 的前生今世|华章KVM分享实录


Docker 对应用管理的影响


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

Docker 与 Mesos 的前生今世|华章KVM分享实录

http://12factor.net/zh_cn/

Docker 与 Mesos 的前生今世|华章KVM分享实录

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 与 Mesos 的前生今世|华章KVM分享实录


Docker 带来的挑战


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

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

服务发现

  • Docker Swarm

  • Etcd

  • Consul

  • Zookeeper

软件定义网络(SDN)

  • Docker Networking

  • Weave

  • Coreos’ Flannel

  • Project Calico

Docker 与 Mesos 的前生今世|华章KVM分享实录


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 与 Mesos 的前生今世|华章KVM分享实录


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


Docker 与 Mesos 的前生今世|华章KVM分享实录


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 --- 它被用来管理和选取基于键值对为基础的对象组。


所以,伴随着 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 容器是一个进程,所以都是写到磁盘的。



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 集群中的网络互连是怎么实现的?
 目前 Mesos 社区对网络主要推荐试用 Calico,但 Docker 的 Weave 也推荐你使用


群分享由数人云协助完成



Docker 与 Mesos 的前生今世|华章KVM分享实录
数人云,将应用弹性做到极致的轻量级 PaaS 平台


 


KVM社区群分享奖品由华章科技学院支持电子读书卡


一卡读尽所以华章电子书!

---------------------------

欢迎加入“云技术实名群”,入群要求如下:

1 工作满5年;

2 目前从事云相关技术工作;

3 实名;

4 愿意分享。

入群联系北极熊:




以上是关于Docker 与 Mesos 的前生今世|华章KVM分享实录的主要内容,如果未能解决你的问题,请参考以下文章

区块链的前生今世

架构前生今世与流量负载架构设计

V2X的前生今世

主动降噪技术(ANC)的前生今世--概念历史

关于http协议前生今世(转自“博客:老李的地下室”)

HBase GC的前生今世 - 身世篇