您的位置:首页 > 运维架构 > Docker

管中窥豹:Docker生态系统一览

2016-03-14 14:31 441 查看
转自点融黑帮

导语

容器化是一种便携、可控的分发和部署应用方式。为了达成此目标,需要将应用封装进一个相对标准化的、轻量的独立环境内,即容器。当下许多组织设计的应用和服务,都力求实现一个轻易部署的分布式系统,即扩展方便又得有一定故障承受能力。Docker作为一个追求将容器化过程变得更加简单、标准化的平台,辅一出现就被广泛接纳,也深深影响了应用服务的设计实现与管理。随即,一大波的工具也围绕着这个平台,如雨后春笋般兴起。

Docker和容器化

Docker是目前最广泛使用的容器化技术。相比别家的容器技术,Docker更为人熟知的原因是它管理简便以及和其他开源项目的紧密集成合作。Docker是目前最广泛使用的容器化技术。相比别家的容器技术,Docker更为人熟知的原因是它管理简便以及和其他开源项目的紧密集成合作。

服务发现和全局配置存储

服务发现是全局中得一个重要组件,旨在使容器的部署具备可扩展性和灵活性。服务发现这一设计,使容器在没有管理员的干预下感知识别不同的环境。容器也可以找到与之交互的组件的连接信息,并且它们可以自己注册,以便其他工具知道它们是可用的。



这类组件通常是部署在一个集群中的各个节点上,以简单的键-值对存储。通常来说,键-值对存储的形式都会提供HTTP API来取值、设置。有些也会提供加密存储、访问控制等提升安全的机制。服务发现需要承担的职责:

允许应用获取与它自身所依赖的服务连接信息

允许服务注册自身的连接信息,以供依赖方获取访问

提供一个可全局访问的资源来存储任意配置信息

存储集群成员相关的信息,以供其他集群组件调用

目前常见的服务发现软件有:

consul–基于raft协议实现,自带的DNS查询服务和跨数据中心级别的服务发现比较亮眼。

etcd–同样基于raft协议实现,出自CoreOS项目,因为Docker的缘故而红火起来,经历了几个大版本后,也还算可以。

zookeeper–基于更复杂的zab协议实现,优点是使用广泛、适应场景也多;缺点是相对上述两者,略显臃肿。

网络工具

应用容器化引领了微服务式的设计与实现。虽然这使得管理和扩展更简单,但它对各个微服务间的网络及其应用自身的健壮性,提出了更高要求的可靠性保障。

Docker自身提供了几种基础的网络模型,用于满足容器与容器间、容器与主机间的通讯。

Docker的原生网络模型提供了2种容器间通讯机制。第一种是暴露一个容器端口,然后映射到主机上的一个高位端口。这中访问方式满足了绝大部分的场景。另一种是建立 link 来促使容器间通讯,建立 link 最直观的效果就是:主动创建 link 的容器会hosts生成一条关于被链接容器的解析记录。

基础的网络模型适用于单机模型,或者紧密协作的环境。因此Docker生态系统早已迸发出了大量改进网络能力的项目,其中大部分项目都希望提供一些额外的功能:

引入Overlay网络,简化、统一多主机间的地址空间管理

引入虚拟私有网络,提供不同区域间的安全通讯

根据单个主机或单个应用来分配子网

创建可通讯的macvlan接口

自定义配置容器的网络栈资源

这里也介绍几个有关扩展Docker网络的项目:

docker 1.8起,开始提供原生的overlay网络功能,不过1.8时还是试验阶段,目前最新的1.9版本已正式标注 production-ready:

fannel–overlay网络,每个主机有个独立的子网

weave–overlay网络,所有容器在一个网络

pipework–更像是一个利用linux原生网络能力来发挥自定义能力的高级工具套件

调度、集群管理和编排

另一个构建容器集群环境的重要组件,就是调度器;在容器的世界里,调度器(或者某个子部件)需要承担一个特有的职责:编排



编排概念的由来

应用容器化的过程,势必会被细分成若干个功能模块,一个功能模块封装成一个容器;当我们再需要提供一个完整的服务的时候,后端需要就是一组容器了。如何将这组容器在单机或多主机上,以正确地先后顺序部署起来,就是编排的过程。

回过头来说下调度器,这些调度器主要是为了完成在管理员既定规则下的操作,这些既定规则可能是:

根据一个指定的容器,调度新容器至同一主机,或不同主机

通过标签或者metadata来匹配选择主机,并将容器调度至此

根据资源使用率来调度

目前一些比较热门的集群调度工具:

swarm–Docker原生的集群服务管理调度器,支持良好,使用案例不多

mesos–立意高远,针对数据中心级别的调度

kubernetes–出身名门(谷歌),自带光环(师从Brog),目前开发节奏很快,被寄予厚望

总结

至截稿之时,笔者仅以自己的经验和眼界,从最主要的三方面:服务发现、网络、集群调度管理,讲述了我自身的所见所闻所感。Docker生态系统的发展之迅猛,当然绝不止于此,Docker发展过程中,众多的优秀工具或废弃、或吞并、或历久弥新,笔者此刻凝思回想,也是唏嘘不已。

Docker的发展历程,借用一句矫情的话:唯一不变就是变化。本文仅为一家之言,欢迎高手赐教、指正;如果你还是徘徊在Docker大门外的新人,那就不要光憧憬了,赶紧去官网下个toolbox玩一玩,体验下吧~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: