本文主要介绍计算机互联网时代,随着容器及虚拟技术的发展演进,要求对分散的计算资源进行整合集中分配,实现具有高效调度、动态扩展,弹性伸缩、服务共享、高可用等大数据时代特征的模型体系。Google将Borg的优势特征应用到开源版本Kubernetes上,经过1年的社区努力,v1.0发布并可运行于生产环境。Kubernetes的出现,极大促进了微服务架构的研究和发展,刺激了容器周边生态的快速迭代,同时为众多IT互联网企业构建高效大规模计算体系提供了技术基础。 容器化技术大大提升数据计算能力,改变了计算模型 容器虚拟技术已经出现很多年,从2000年到2010年,作为容器内核实现基础的命名空间、Cgroup先后出现,而之后的LXC轻量级工具将容器的生命周期流程化。2013年Docker Version 0.10发布,作为基于LXC的高级容器引擎,极大地简化了容器的创建和管理, 这使容器虚拟技术得以普及和大众化。相比于LXC复杂的操作过程和对使用者内核知识的高度依赖,Docker的使用者仅仅用简单的命令行就可以实现容器的运行管理,其带来的最直接的便利,是对服务镜像的快速打包、迁移。而潜在的价值不仅是对软件交付、部署等传统运维的极大简化,其应用特征也开始逐渐改变传统的软件模型思维,人们已经不再讨论SOA的没落,而是逐渐认识到微服务架构的崛起。 图1 Docker的容器构建方案 国际上,与泛云计算相关的公司,几乎都在某种程度上开始支持并集成Docker。2014年6月,Microsoft、Amazon、IBM、Google、Facebook、Twitter、Red Hat、Rackspace和Salesforce等诸多公司,以Docker支持者的身份,在DockerCon中齐聚一堂,共同讨论并展望未来容器技术的生态发展。 容器虚拟化技术通过内核的共享及资源的隔离,将主机计算资源进一步切分细化,以进程级别的粒度将服务运行在具有独立的PID管理、命名空间和网络堆栈的系统环境中。容器技术增强了对资源控制的力度,是对系统的再次抽象。相比传统的虚拟机,容器运行时共享了的系统内核,通过隔离使其具有独立的进程和网络空间,这样减少了进程启动时的运行消耗,具有更高效的资源使用率。再加上对容器的操作不需要重启或关闭整个操作系统,仅是终止运行在自身独立空间的进程,因此可以快速创建和删除容器。容器技术极大地简化了服务应用的部署,应用可以快速打包成单一地址访问,且采用Registry存储的仅一行命令即可完成的组件,也可很方便的迁移到其他的Linux系统环境。 容器技术的轻量级也在推进着微服务架构理论的进化和实践。容器技术的应用使服务可以独立部署到不同的进程,而服务之间通过轻量级通信机制来交互。这样从设计层面就可以依据业务功能进行划分,并清晰定义各个组成间的边界,使它们之间分离解耦。相对于传统的库引用方式,升级时刻需要整体重新部署的特点,微服务方式将应用拆分为一系列服务并以进程颗粒运行,其意义在于,无需牵动整个系统就可以将局部的过时组件进行升级部署,而这种跨进程的调用方式必然需要在设计之初考虑边界的清晰和各个职责的明确。模块化的服务使组件间高度离散化,微服务模式下的系统的每个组件均可以独立部署,这使软件生命周期的后期发生很大变化,即在生产环境的发布阶段,即便局部发生故障也不必停止其他部分的系统工作。快速部署、快速配置,这些微服务的先决条件必然会促使其在软件的持续交付方面的应用。 容器的便利在于单机上的快速部署及迁移,但在真实的生产环境中,单一的主机往往无法支撑足够的资源请求,而在多主机模式下,也需要做到动态的资源调度和应用的负载均衡,在更深层次的要求中,服务发现不但需要集群范围的可达,同时容器间需要可靠稳定的虚拟网络。以目前Docker引擎的进展,主机上容器以网桥的方式建立连接,但跨主机的通信仍然在开发阶段,Libnetwork作为未来的网络解决方案仍不能应用到生产环境。 大规模容器集群管理工具,从Borg到Kubernetes 在Docker 作为高级容器引擎快速发展的同时,Google也开始将自身在容器技术及集群方面的积累贡献出来。在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用,在它的支持下,无论是谷歌搜索、Gmail还是谷歌地图,可以轻而易举地从庞大的数据中心中获取技术资源来支撑服务运行。 Borg是集群的管理器,在它的系统中,运行着众多集群,而每个集群可由成千上万的服务器联接组成,Borg每时每刻都在处理来自众多应用程序所提交的成百上千的Job, 对这些Job进行接收、调度、启动、停止、重启和监控。正如Borg论文中所说,Borg提供了3大好处: 1)隐藏资源管理和错误处理,用户仅需要关注应用的开发。 2) 服务高可用、高可靠。 3) 可将负载运行在由成千上万的机器联合而成的集群中。 作为Google的竞争技术优势,Borg理所当然的被视为商业秘密隐藏起来,但当Tiwtter的工程师精心打造出属于自己的Borg系统(Mesos)时, Google也审时度势地推出了来源于自身技术理论的新的开源工具。 2014年6月,谷歌云计算专家埃里克·布鲁尔(Eric Brewer)在旧金山的发布会为这款新的开源工具揭牌,它的名字Kubernetes在希腊语中意思是船长或领航员,这也恰好与它在容器集群管理中的作用吻合,即作为装载了集装箱(Container)的众多货船的指挥者,负担着全局调度和运行监控的职责。 虽然Google推出Kubernetes的目的之一是推广其周边的计算引擎(Google Compute Engine)和谷歌应用引擎(Google App Engine)。但Kubernetes的出现能让更多的互联网企业可以享受到连接众多计算机成为集群资源池的好处。 Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。Kubernetes在模型建立之初就考虑了容器跨机连接的要求,支持多种网络解决方案,同时在Service层次构建集群范围的SDN网络。其目的是将服务发现和负载均衡放置到容器可达的范围,这种透明的方式便利了各个服务间的通信,并为微服务架构的实践提供了平台基础。而在Pod层次上,作为Kubernetes可操作的最小对象,其特征更是对微服务架构的原生支持。 Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。 图2 Borg架构 Borg中将Job定义成在一定边界内执行的活动,并可以附加相关的需求信息。用户可以通过RPC的方式向Job发送命令。一个Job可以包含多任务Task, 并可以控制Task的运行状态,Pending、Running、Dead。但Job对于Task来说仅仅是分组的约束,在更高层次对多个Job进行组织还不够灵活,只能以取巧的方式对Job的名字进行定义,通过命名格式的定制和解析进行条件筛选以达到分组选择的目的。在Kubernetes中,ReplicationController和Pod,在某种意义上吸收了Job-Task多任务实例的理念,用户可以将实际运行的容器放入Pod,通过ReplicationController来动态设置Pod副本个数,并在服务层次实现对多实例的负载均衡。同时Kubernetes增加了label作为Service、ReplicationController和Pod属性,通过Key-Value的方式来动态组织Service、ReplicationController和Pod的联系,用户可以使用label的查询来定位应用所属的实例。相对于Borg中单一固化的分组方式,label极大地增加了Kubernetes各层次不同种类元素间动态关联的灵活性。 图3 Job-Task多任务实例 在Borg项目中的Alloc,对应了Kubernetes的Pod, 它是在主机中预留的一块资源,用来让一个或一组Task运行在其中,而这同组的Task交互较为紧密,同时对外又以整体的方式运作。同样,Kubernetes中的Pod以巧妙的构成方式让多个容器实现资源共享,包括磁盘和网络,容器间的通信仅需要localhost即可完成,同时支持进程的状态检测和hook,通过细致的设置可以让容器间的组合在具有高性能的同时也具备很高的容错性,而对于上层调用者来说,放置着多个容器的Pod以整体的方式被创建启动运行或删除。 在监控调试方面,Borg提供了多层面的界面和调试工具,用户可以快速定位到相关Job的日志信息,并以此追踪到应用程序及底层服务的详细事件和错误信息。对此,Kubernetes沿用了众多Borg的运行方式,以Cadvisor来进行主机及实例监控,基于Elasticsearch/Kibana对日志进行收集等。 架构方面,Kubernetes的Master-Slave模式及多组件轻量级API交互的方式也是来自于Borg的灵感。Borg系统将资源调度基础界面等分解成多个进程来分别运行。Kubernetes更进一步地将Master设置为仅是处理请求和维护对象状态的核心,而调度和控制等由其他组件通过RESTAPI的方式和Master交互,其本身也是微服务架构的典型应用。 Kubernetes作为容器集群管理工具,于2015年7月22日迭代到 v 1.0并正式对外公布,这意味着这个开源容器编排系统可以正式在生产环境使用。与此同时,谷歌联合Linux基金会及其他合作伙伴共同成立了CNCF基金会( Cloud Native Computing Foundation),并将Kuberentes 作为首个编入CNCF管理体系的开源项目,助力容器技术生态的发展进步。Kubernetes项目凝结了Google过去十年间在生产环境的经验和教训,从Borg的多任务Alloc资源块到Kubernetes的多副本Pod,从Borg的Cell集群管理,到Kubernetes设计理念中的联邦集群,在Docker等高级引擎带动容器技术兴起和大众化的同时,为容器集群管理提供独了到见解和新思路。 作者简介 杨乐,时速云联合创始人,主要负责时速云产品基础架构、研发和产品安全等工作。 本文选自程序员电子版2015年11月A刊,该期更多文章请查看这里。2000年创刊至今所有文章目录请查看程序员封面秀。欢迎订阅程序员电子版(含iPad版、Android版、PDF版)。
本网页所有文字内容由 imapbox邮箱云存储,邮箱网盘, iurlBox网页地址收藏管理器 下载并得到。
ImapBox 邮箱网盘 工具地址: https://www.imapbox.com/download/ImapBox.5.5.1_Build20141205_CHS_Bit32.exe
PC6下载站地址:PC6下载站分流下载
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox 网页视频 工具地址: https://www.imapbox.com/download/ImovieBox4.7.0_Build20141115_CHS.exe
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 程序员专区