基于云的基础设施,容器,微服务和新编程平台在世界范围占据了一大块媒体领域,横扫IT界。Docker、容器的使用在这几个月内呈爆炸式增加,已经提交了20亿的镜像“pulls”;镜像数在2015年11月就已达12亿。从大型国际公司到小型创业公司,容器技术的使用都有明显增加。前端
很明显,容器在建立和交付应用程序的过程当中有着新发展。然而,大范围控制容器部署也会有一些并发症。容器确定是跟资源相匹配的。故障确定是越快解决越好。这些挑战会致使集群管理和编排的并发需求。
集群管理工具是一个经过图形界面或者经过命令行来帮助你管理一组集群的软件程序。有了这个工具,你就能够监控集群里的节点,配置services,管理整个集群服务器。集群管理能够从像发送工做到集群的低投入活动,到像负载均衡和可得性的高介入工做。在这篇文章中,咱们来看一下目前比较受欢迎的集群管理工具,并讨论一下他们的优势和面临的挑战。编程
Docker Swarm让你汇集一些Docker引擎到一个虚拟引擎。在一个分布式应用程序环境中,计算元素必须也是能够被分布的。Swarm容许你在本地汇集Docker引擎。有了单个引擎,应用程序能够被扩展得更快,更有效率。Swarm可以扩容到50000个容器,1000个节点,同时当容器添加到集群的时候一点都不影响性能。
再加上,Swarm的角色至关于Docker API。任意能够操做Docker Daemon的工具均可以运用Docker Swarm的力量在不少主机上进行扩容。这些包括了像Flynn,Compose,Jenkins和Drone之类不一样的主机。
Swarm也能够在后端运行Mesos或者Kubernetes的时候,被用来做为前端Docker客户端。Swarm在它的核心内部是一个简单的系统:每一个主机运行一个Swarm代理与管理员。管理员处理容器的操做和调度。你能够在高可用状态下运行,它使用的是Consul,ZooKeeper或者etcd来发送容错events到后端系统。
Docker Swarm的一个优势就是,它是一个本地解决办法——你能够用Docker命令来实施Docker网络,插件和数据卷。Swarm管理员为leader选举建立一些master和特定的规定。这些条例实施在初级master故障的event里。Swarm调度器以各类各样的过滤包为特点,也包括紧密性和节点标签。过滤包可以附加容器到底层节点,资源获得更好的利用,性能获得提高。后端
Core OS被建立来容许弹性扩容,容许管理计算能力。与其经过apt或者yum安装包,Core OS以为倒不如利用Linux容器来处理更高抽象水平的service,提供好处给虚拟机,可是重点是在应用程序上而不是在完成虚拟化主机上。安全
Fleet可以在它分享个体初始系统的场景中将Core OS集群虚拟化。有了Fleet,每一个机器都有一个代理和一个引擎。虽然单个引擎在集群中的任意节点都是活跃的,可是整个引擎社区一直都是活跃的。Fleet也能够处理套借口激活——容器能够被用来处理在特殊接口的链接。这就容许系统在须要的时候建立进程而不是等待需求的时候再去建立。
大家的开发运维人员将他们的时间重点花在管理做为service建立基础的容器上,同时不须要担忧可能出如今单个机器上的潜在问题。Fleet确保在集群中的容器在操做状态。在发生机器故障的时候,容器会自动转移到健康的机器上。服务器
Kubernetes由谷歌开发,容许你在许多不一样的主机上管理容器化应用程序。它提供工具让你部署,弹性扩容和维护应用程序。Kubernetes的开发者致力于保持它一直处于可访问、轻量级状态,而且易于使用。它能够在不少云环境中使用,包括私有云,公有云,多云端和混合云。Kubernetes能够在fly上进行自我修复,它以自动复制,自动再启动,自动定位为特点。它能够被不断扩展,它的特色是hookable,可插拔和模块化。它已经被彻底开源,谷歌在2014年首次宣布开发它,初版在2015夏天的时候发布。除了最近几年的收获,Kubernetes自己也是基于谷歌内部十多年使用容器技术的经验。网络
Kubernetes使用容器组pod,而且在同时被调度和部署。调度的基础配置是pods,由于相比于系统,单个容器会被当成是基础单元。大部分的pods最多有5个容器,这就组成了一个service。Pods会按照需求在现实生活中建立和删除,或许修改。
Kubernetes是一系列宽松的、能够在不少不一样的工做负载下操做的松散耦合原语。它很大程度上依赖于Kubernetes API的可扩展性。API在内部使用,一样的,在外部被容器和拓展版本运行在系统中。目前,已经应用Kubernetes的项目和企业包括:Wikimedia Foundation从本土设置转移到Kubernetes;eBay在OpenStack上运行Kuberenetes和容器;Viacom用Kubernetes建立了一个先进的容器化基础设施。并发
Apache Mesos是一个集群管理工具,它着重于资源隔离,以及分布式网络或者在框架上分享应用程序,它的构想和开发源于加州大学伯克利分校。
一个开源系统,它会给管理员分享资源、提高集群利用率的功能。目前使用Apache Mesos的公司包括:Apple,Airbnb和Twitter。
Apache Mesos对于像CPU,Disk和RAM之类的计算元件来讲是一个抽象层。它运行在每台机器上,其中一台机器被设计来做为master来运行其它机器。任意Linux程序均可以运行在Mesos上面。Mesos的一个优势就是应对故障,它会提供额外的安全层。负载均衡
Mesos被设计来处理成千上万的主机,支持各类各样主机上的工做负载。在一个Mesos配置上,你可能会发现Docker和Hadoop并排运行。几年前,当系统支持Twitter的快速扩张的时候Mesos作到了可视化。
Mesos使用代理节点系统来运行任务。代理发送一张可得资源清单到master。在任意时刻,都会有成千上万的代理节点在进行操做。一样,master也会分布任务到代理上。框架
Kubernetes是一个全径且全面的容器管理平台,有动态调度、升级、自动伸缩和持续健康监测的功能。相较而言,Docker Swarm只是从单个容器引擎提供一个集群系统的视角。
Mesos和Kubernetes比较类似,由于他们都是被开发来解决在集群化环境中运行应用程序的问题。但Mesos在运行集群方面不如Kubernetes,它重点放在它强大的调度功能和它被插在各类各样的调度器的性能上。Mesos并非为容器而生的,在容器流行以前就已经被开发出来,它的一些地方被修改来支持容器。
Fleet利用etcd,一个和Core OS一块儿作出来被系统化的键值对,对于Linux来讲是一个系统和service管理员。系统化是为单个容器设计,可是fleet延展它的性能到一个集群的机器。Fleet经过容许你运行service的一些实例,来帮助项目应对故障。它能够部署单个的容器到任意本地,运行容器在一个或者多个机器上,而且部署一个容器的多个实例。
从另外一个方面来讲,Fleet并不适用于处理一些像服务注册,在调度基础上利用,服务发现或者容器间的交流这些在分布式微服务环境中发生的状况。Fleet在这四个工具中属于比较低调的引擎,因此它最好处于一个像Kubernetes或者其它解决方案能够在上面操做的层次。运维
现今的企业须要可以知足他们需求不会出现故障的冗余系统。另外,大数据和数据挖掘须要不少资源来过滤海量信息。除非这些公司适应和修改他们的登陆信息系统的方式,否则他们面对更快、更灵活的竞争对手会很快失去阵地。在如今这个高速网络规模的时代,修复单个机器不是一个有效的解决方法。分布式系统容许你快速调度出故障的机器到垃圾箱,而且从新分配资源到健康集群的节点上。这就是管理Docker和其它容器集群重要性。
(若是须要转载,请联系咱们哦,尊重知识产权人人有责:)