企业级容器云架构开发指南(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-10 16:02:04

点击下载

作者:HPE ku8s team

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

企业级容器云架构开发指南

企业级容器云架构开发指南试读:

前言

美国国家标准与技术研究所(NIST)对云计算有如下定义:云计算是一种允许用户通过网络便捷地接入可动态配置的共享资源池(包括网络、存储、计算能力、应用以及业务),并以最小的管理成本实现对这些可配置计算资源的快速申请、使用和释放的技术架构和服务模式。作为新一代的技术架构和服务模式,云计算改变了很多行业的现状,大量企业可以像使用水电等资源一样来使用IT资源。云计算提高了IT系统的扩展性,许多企业现在愿意将云平台作为他们的IT基础设施,云计算模式正在成为标准,成为一场改变人们生活方式和企业经营方式的革命。

云计算从最初的概念出现到如今的应用普及,已有十余年的时间。相比云计算诞生初期的情况,目前的技术条件和行业环境已经发生了巨大的变化,云计算开始进入大规模应用阶段,显著改变着我们生活的各个方面,而产生当前效应的一个重要因素就是容器技术的大规模应用。

2013年年初,dotCloud公司将内部项目Docker开源,之后Docker这个名字迅速蔓延到整个信息产业。容器技术并不是全新的概念,Docker所采用的关键技术也早已存在,但正是由于Docker的出现,使得以容器技术来构建云计算平台变得更加方便和快捷。容器技术不仅改变了系统架构的设计方式,还改变了研发过程和系统运维的方式,使得我们一直期望的开发速度更快、系统质量更好、更易维护的IT系统变成现实。Docker的出现是云计算发展的重要里程碑,成为云应用大规模推广的基石。

本书由慧与大学组织,由慧与(中国)有限公司容器云项目组的人员完成,书籍内容的蓝本为慧与大学颇受学员欢迎的容器云系列课程的课件。参与本书编写的诸位作者常年活跃在技术一线,同时作为慧与大学的讲师和技术顾问,为大量客户提供了专业的培训服务,并且将他们在技术一线的经验传递给慧与大学的学员。慧与大学为了能够让更广泛的人员受益,组织了本书的编写。本书从技术实践者的角度出发,介绍了当前主流的Docker、Kubernetes、Mesos等容器和管理技术,同时对微服务架构设计与实现、DevOps开发与交付的方法和实践进行了介绍。书中既有对技术概念、流程和方法的介绍,也有对具体技术实现和案例场景的介绍,我们期望通过这样的内容设计,帮助读者在全视角了解云计算和容器技术的情况下,能将涉及的相关技术和方法直接应用到工作中,解决实际问题。

全书分为五个部分。第一部分(第1章)对云计算进行了概要性介绍,使读者建立对虚拟化、容器技术、公有云和私有云的基本概念。第二部分(第2章)对微服务架构的设计和实现进行了介绍。第三部分(第3章)关注研发生产力,介绍了DevOps的概念和实践。第四部分(第4~6章)对Docker、Kubernetes、Mesos分别进行了介绍。第五部分(第7章)介绍了企业级容器云在电信行业的应用实践,使读者对从容器技术到大规模容器集群管理架构,到不同分布式应用混合架构这一系列技术,再到企业级容器云的应用实践均能够有所了解。本书的五个部分既彼此独立,又相互关联,能够帮助读者建立起云计算和容器技术的完整技术储备。

本书适用于系统架构师、开发和测试人员、运维人员、企业IT主管、系统管理员,也适合作为高等院校计算机专业学习云及容器技术的教材。

凌云意气,有容乃大。在信息技术快速发展的今天,希望本书能为读者带来实际的收益。慧与大学愿意和读者一起积极投身到容器云产业的实践中,促进信息产业的蓬勃发展。慧与大学第1章云计算概述1.1 虚拟化技术简史1.1.1 虚拟化技术的起源

虚拟化(virtualization)技术总体上是软硬件相互协作而产生和发展的技术,可以将其视作服务器的“多路复用”技术,即将一台物理服务器模拟(分割)成为多台逻辑上相互独立的服务器——虚拟机。虚拟化技术确保了运行于一台物理机上的多个虚拟机之间具有严格的隔离机制,彼此不会相互影响。对于一个高配置的物理机,通常可以虚拟化为几十台虚拟机,每个虚拟机可以安装不同的操作系统,以供不同的租户选择使用,而在每个虚拟机的租户看来,他们完全“独占”该物理机。

在计算机发展的初期,大型机非常昂贵,也经常得不到充分利用,采用虚拟化技术,将一个大型机虚拟化成几十个虚拟机供其他部门使用,可提升资源的使用效率。因此虚拟化技术是计算机发展的必然结果。

大型机的虚拟分区技术最早可以追溯到20世纪六七十年代。早在1965年,IBM公司就发明了虚拟化技术,允许用户在一台IBM的大型主机上运行多个操作系统,从而让用户尽可能地充分利用昂贵的大型机资源。最早使用虚拟化技术的产品是IBM 7044主机,而“虚拟机”这个专用术语也是首次被IBM 7044主机所正式采纳。到了1965年,IBM System/360Model 67成为真正意义上的虚拟机的鼻祖,它通过VMM(Virtual Machine Monitor)对所有的硬件接口都进行了虚拟化。而后来的IBM VM/370则更进一步,首次实现了虚拟化嵌套能力,即在一个虚拟机上继续虚拟出多个虚拟机,而在X86服务器上这项技术直到2000年左右才获得了突破。

虽然早在20世纪60年代就已经出现了成熟的虚拟机产品,但直到1977年IBM的管理层才完全接受虚拟机这个强大的新生事物,而仅在一年后(1978年)IBM就已经在全球创建了1000多个虚拟机了。之后虚拟化技术快速发展,以IBM System z系列为代表的大型机虚拟化技术逐步渗入UNIX小型机的领域,成为小型机的标配技术之一。

在IBM之后,惠普也在自己的UNIX服务器上提供了虚拟化技术,并提供了多种虚拟化方案,每种方案都有针对的需求场景,因此惠普逐渐成为小型机(后文简称小机)虚拟化领域的实力厂商。如图1-1所示,惠普的虚拟化方案总体分为以下几种:

·硬件分区。

·虚拟分区(软分区)。

·安全资源分区。图1-1 惠普的虚拟化方案

其中,硬件分区是指一个单一物理服务器分割为几个不同的虚拟机;虚拟分区则是进一步在一个硬件分区里继续划分多个虚拟分区(或多个虚拟机);而安全资源分区则是在一个虚拟机内划分多个应用隔离区,类似后来的容器技术。

这3种分区技术的应用场景有所区别:硬件分区适合于性能与隔离程度要求高的虚拟化场景,在这种情况下,不同分区内的物理资源完全独立,CPU、内存、I/O等都完全隔离;虚拟分区是从软件层面进行的资源分区,由于同一个物理分区下的多个虚拟分区共享同一份底层物理资源(CPU、内存、I/O等),因此资源的隔离性与性能会差一点,但其优点是分区很灵活,可以随心所欲地设计虚拟分区的大小和数量,多用于测试性能要求不高的虚拟化场景;安全资源分区主要是在安全的场景下进行分区,类似后来的Docker容器技术,具备快速实施以及所占资源少的优点,是一种轻量级的虚拟化技术。1.1.2 X86平台虚拟化历史

虚拟化技术在大型机时代诞生,在随后的小机时代得到进一步发展,而虚拟化技术的真正爆发则是在“X86时代”,图1-2是X86平台虚拟化进程的示意图。1999年虚拟化技术首次亮相X86平台,随后加速普及到个人计算机,正所谓“旧时王谢堂前燕,飞入寻常百姓家”。图1-2 X86平台虚拟化进程

长期以来,由于X86CPU缺乏虚拟化技术所需的关键指令,不能很好地支持虚拟化技术,导致上层相关的虚拟化软件很难实现。后来Intel与AMD意识到虚拟化的重要性,在其新一代的CPU上提供了专门用于虚拟化的指令集,从而加速了X86虚拟化的发展。此外,X86处理器的性能长期以来大大落后于UNIX小机的处理器,因此虚拟化的价值并不大,但随着X86处理器的加速多核化发展,其性能也得到了飞跃式提升。随着硅谷互联网泡沫的破灭,UNIX服务器的市场份额快速萎缩,被X86服务器侵蚀了大部分市场。后来在云计算浪潮的推动下,X86虚拟化技术才首次被真正重视起来。我们看到,X86虚拟化具备了天时、地利、人和的优势,所以注定爆发。

1999年是X86虚拟化技术发展的一个重要里程碑:这一年,VMware公司首次解决了X86平台的虚拟化问题,推出了面向X86平台的商业化虚拟机软件——VMware Workstation,使虚拟化技术开始走向普通用户。

VMware公司的Workstation虚拟机软件可以让普通用户在自己的Windows笔记本式计算机或者台式计算机上很方便地创建出一个虚拟机,并且可以在这个虚拟机上安装各种版本的Linux系统或者Windows系统。我们知道,企业级应用大部分都是安装和部署在Linux服务器上的,为了开发并测试这些应用,项目组通常需要一个专门的服务器,有了VMware Workstation之后,一个普通的笔记本式计算机就可以创建出几个Linux虚拟机来,在无须其他IT人员介入的情况下,开发和测试人员就可以独立完成整个系统的部署和测试过程,从而大大方便了软件开发工作。此外,有了VMware Workstation之后,销售或者售前团队很容易为客户演示一个复杂且庞大的软件系统,只要配备一个高性能的笔记本式计算机,即可在本机虚拟出多个虚拟机,将待演示的系统部署到虚拟机中,随时进行“移动演示”。此外,得益于虚拟机快照功能,采用虚拟机方式进行的软件回归测试、系统备份恢复以及POC演示等活动都极大地节省了工作量和时间。

VMware Workstation技术主要是针对Windows用户开发的,总体上来说属于客户端的虚拟化技术,而VMware服务器端的虚拟化产品则是ESXi。VMware的这些虚拟化产品都是商业软件,并不符合Linux开源精神。所以,2003年Linux(X86平台)上首次出现了开源虚拟化技术——Xen。

Xen是英国剑桥大学推出的一种半虚拟化技术,其特点是需要对部署在虚拟机上的操作系统的代码进行少量修改,使其适应虚拟化环境,因此Xen使用起来有些麻烦。但从另一方面来看,因为修改虚拟机的操作系统代码可以实现比较高的虚拟化性能,所以目前公有云巨头如亚马逊、阿里巴巴的公有云虚拟机都是基于Xen技术定制演变而来的。虽然目前Xen技术已经没落,但它大大加速了X86与Linux虚拟化技术的研究与应用过程,可以说功不可没。但Xen需要修改虚拟机上的操作系统才能实现虚拟化,因此也存在种种弊端和限制,如第三方修改Windows这种闭源操作系统的代码是违反软件许可证的做法。为了更好地支持全虚拟化,2005年Intel和AMD相继推出支持虚拟化技术的全新CPU和芯片组,从而在硬件基础上第一次有了重大突破,实现了硬件辅助虚拟化技术。其原理是在CPU中加入虚拟化指令,这种指令的加入大大加速了整个X86的服务器端虚拟化的发展进程,也促进了新一代Linux虚拟化软件的诞生,这就是后起之秀——KVM。

2006年以色列公司Qumranet宣布了新一代Linux虚拟化软件KVM的诞生,KVM在不到一年的时间里即被纳入Linux内核中并得到支持,成为第一个Linux内核级支持的开源虚拟化软件。KVM实际上已经成为云计算标配的虚拟化技术,也就是从KVM被推出之后,大规模的云计算开始在各个行业当中得到推广,OpenStack底层的虚拟化技术即采用了KVM。

总体来说,X86平台的虚拟化从技术上来讲,主要分为半虚拟化和全虚拟化两种。Xen属于半虚拟化技术,需要对客户操作系统进行定制化改造,这样才能在虚拟层上运行,半虚拟化为用户提供了一个可以改造的通道,可以对虚拟机操作系统进行定制化的改造;后来的KVM则属于全虚拟化,即无须对操作系统进行任何改造,直接就可以在虚拟机上安装。Xen需要对操作系统进行一定的改造,而且长期以来没有被纳入Linux内核中,慢慢地被边缘化了,而KVM则成为真正的赢家。

因为X86平台可以提供便宜、高性能和高可用的服务器,所以X86平台的虚拟化技术突飞猛进,并且首次向人们展示了虚拟化应用的广阔前景。更重要的是,一些用户已经开始在生产环境中大量使用虚拟化技术,他们需要得到新的管理工具,反过来进一步促进了虚拟化技术的发展。不过,与已经有多年历史的UNIX服务器、大型主机上的虚拟化技术相比,X86服务器上的虚拟化仍旧处于早期阶段,但自2006年以来,从X86处理器层面的AMD和Intel积极发布新的芯片,到操作系统层面厂商(如微软、红帽等公司)的推动,以及服务器厂商的积极跟进和数量众多的第三方软件厂商不断涌现,我们看到一个趋于完整的服务器虚拟化的产业生态系统正在逐渐形成。时至今日,虚拟化技术已经不是一个新技术,而是一个越来越普遍的重要基础技术,随着云计算、大数据、物联网、人工智能等新技术的飞速发展,虚拟化技术还将进一步深入发展,最终实现软件定义一切的终极梦想。1.1.3 三大虚拟化产品

在云计算领域有三大虚拟化产品,它们分别是VMware公司推出的ESXi商业产品以及开源的Xen和KVM,如图1-3所示。

最早一批尝试虚拟化技术的公司,特别是实力雄厚的大公司,基本上都购买并使用过VMware的ESXi系列产品。ESXi系列产品十分完善,其虚拟化技术是独有的,性能也不错,使用起来很方便。但其缺点是十分昂贵,当规模部署以后,成本就很高了。因此一般公司实施小规模云计算的时候,都会以VMware产品为起点,但随着集群规模的扩大,慢慢地都会迁移到开源的Xen或者KVM之上。

Xen是一个开放源代码的虚拟机监视器,最早由剑桥大学开发完成,Xen允许在单个计算机上运行多达100个虚拟机,虚拟机上的操作系统必须进行显式的修改(移植)才能在Xen上运行,虽然修改过操作系统的代码,但操作系统仍然保持用户应用的兼容性。通过修改操作系统代码,使得Xen无须特殊硬件和新的CPU支持就能达到高性能的虚拟化。Xen开通了一个通道,允许虚拟机操作系统跨过虚拟化层直接操作底层硬件,这能保证虚拟机的性能基本达到裸机运行的性能,因此前期诸如亚马逊、阿里巴巴等公有云的提供者基本上都会在这个基础上做一些自己的定制化,以此来提供高性能的公有云服务。Xen在早期不被Linux内核支持,要实现Hypervisor功能,IT管理员需要把开源Xen作为主流内核的补丁来安装,甚至安装后不能对内核进行升级,否则会破坏Xen的功能。难与Linux内核集成的这个缺陷导致后来者KVM一出现就备受关注。图1-3 三大虚拟化产品

与Xen半虚拟化不同的是,KVM是全虚拟化技术,直接在Linux内核运行,KVM创建的虚拟机直接可以安装Windows、Linux等系统,使用起来也相对方便,但其缺点是由于存在虚拟化的硬件层,所以其网络I/O和存储I/O的吞吐性能会受到影响。虽然可以通过一定的技术降低这个影响,但总体来说虚拟化还是会对I/O吞吐性能产生一定的影响,在做系统设计的时候要充分考虑这个问题。

前有VMware,后有KVM,为了能在虚拟化的地盘上继续分一杯羹,Xen也不断努力,经过漫长的改进,终于在2011年年初获得了Linux的完全支持,但已经错过了提高市场占有率的绝佳机会。而且就在Xen努力靠近Linux内核的这些年,KVM已经获得了长足的发展,之前支持Xen的厂商也改变风向。例如:红帽很快就收购了KVM技术,不断完善自家产品,Red Hat Enterprise Linux(RHEL)5采用的还是Xen Hypervisor,但在RHEL 6中就移除了所有Xen相关组件,只用KVM,并且提供了Xen到KVM的虚拟机迁移工具;另一家Linux厂商Ubuntu则明确表示选择KVM作为其Hypervisor。除了红帽和Ubuntu,KVM也受到了IBM的关注,IBM KVM(北京)卓越中心落户北京,帮助中国客户、软件开发商及合作伙伴更好地采用开放的虚拟化技术,以支持其云计算项目的发展。此外,KVM作为默认的开源软件Hypervisor,获得了开源虚拟化联盟(OVA)的认可。由于大厂商和众多团体机构都在推广KVM,这使得Xen在开源虚拟化市场上难以立足,Xen这个成熟的虚拟化平台昔日在可用资源、可管理性、性能等方面的优势在快速发展的KVM面前也略显暗淡,随着时间的推移,慢慢地无人再提及,可能在不久的将来,Xen将被人遗忘。如果坚持在Linux平台上使用开源Xen,SUSE Linux Enterprise Server和Oracle将是唯一的选择,但Oracle VM(来自SUN的产品)这个基于Xen的虚拟化平台很难直接用于Oracle现有的用户群,Oracle公司在企业Linux领域只是小玩家,对Xen的支持也很有限。1.1.4 私有云与公有云

在私有云的建设当中,除了VMware可以提供商业化的产品,目前比较流行的是基于OpenStack开源项目搭建自己的私有云。OpenStack本身并不是一个技术,实际上是一个产品体系,包含很多的模块和功能。例如,主机的虚拟化模块Nova用来创建KVM虚拟机;Neutron模块实现了网络虚拟化的功能;Swift是与存储相关的模块;Keystone模块是OpenStack平台的认证和鉴权模块;Horizon提供了Web界面来方便用户使用,是整个平台的管理工具;Ironic项目则希望OpenStack把裸机的管理也纳入进来,被纳入的裸机上面不运行虚拟机,Ironic的发展是为了适应目前虚拟化的新趋势,即越来越多的基于Docker的应用直接运行在裸机上,而不是在虚拟机上再进行容器化,因为后者的性能损耗比较多;另外一个新的与容器相关的模块最近也被纳入OpenStack中,即谷歌在背后支持的Magnum项目,它的目标是让Docker容器以及谷歌的Kubernetes架构成为OpenStack上的“一等公民”,被OpenStack完美支持,Magnum项目可以被视作容器技术首次与虚拟机技术平起平坐的一次重要尝试。虽然OpenStack仍然在不断改进和发展,也在尝试拥抱新一代的容器技术,但不可否认的是曾经的巨无霸OpenStack正在慢慢地没落。

在公有云方面,目前比较流行的几个公有云如微软的Azure、阿里云、Rackspace、Amazon Web Services、Gooole Compute Engine等都对外提供虚拟机,企业和个人可以在网上购买虚拟机,订购虚拟机的时候,用户可以选择任意规格的型号,如几个CPU、内存多大、硬盘多大,下单付款之后,可以立即在线开通虚拟机,这实际上就是我们比较熟悉的IaaS(Infrastructure as a Service)平台。公有云的最大好处就是提高了资源交付的能力和速度,加快了互联网应用的开发和上线速度,而这背后的最大功臣就是虚拟化技术。1.2 虚拟化热点技术与终极目标1.2.1 网络虚拟化

虚拟化技术体系的核心是计算虚拟化,体现为一个物理主机分割为多个虚拟机,但整个虚拟化技术体系中最难的则是网络虚拟化技术,这对绝大多数软件工程师和IT人员来说,都是一个高门槛的领域。

互联网已经成为我们生活中必不可少的一部分,可能对于很多人来说,一年的语音通话时长要远远少于上网和网络即时通信所花费的时间。对于一台无法联网的计算机来说,它的价值甚至不如一个能上网的手机。对于虚拟机也是一样的,如果虚拟出来的虚拟机不能与其他虚拟机进行通信,不能访问外网或不能被外网访问,那么虚拟机的价值将会大打折扣,公有云将不会存在。

怎么理解网络虚拟化?简单来说,原来是一个物理服务器作为单独的通信端点存在,但虚拟化后,变成多个拥有独立IP的虚拟机。这些虚拟机跟物理机一样,也需要挂接到交换机上进行通信,虚拟机的IP地址与物理机的IP地址属于两个不同的IP地址平面,相互是隔离的,如果一个物理机上的虚拟机与另外一个物理机上的虚拟机要进行通信,那么通信的报文就必须通过物理机的IP地址和物理链路进行传递,所以就出现了所谓的报文封装的概念和技术,如GRE隧道或者VXLAN以及其他厂商的私有方案。

通常来说,位于一个机房或数据中心的所有物理机属于同一个局域网,延伸开来,这些物理机上的所有虚拟机也属于同一个虚拟局域网。由于虚拟机的数量可能是物理机数量的10倍甚至100倍,所以这个虚拟局域网又被称为“大二层”交换网,即总体上是一个扁平的二层网络,只有交换而没有路由。我们知道,网络通信严重依赖于网络设备,如网卡、交换机、路由器,与CPU不同的网络相关规范标准与硬件升级都是一个很缓慢的过程,所以网络虚拟化发展缓慢,目前主要还是采用软件模拟的方式来兼容已有的网络协议和网络设备,导致虚拟化网络的性能成为明显的瓶颈。但可以预见的是,不久的将来,越来越多的网络设备将会直接支持网络虚拟化技术,如VXLAN与GRE。1.网络虚拟化之SDN

除了“大二层”的底层网络虚拟化技术之外,网络虚拟化目前在朝着两个比较热门的高层领域加速发展。第一个是SDN(Software Defined Network,软件定义的网络)。SDN实际上是想抛弃传统的网络管理模式,通过虚拟化平台提供的网络管理界面,采用软件的方式来完成任意业务所需的底层网络的规划、部署、扩容和自动化管理能力,即通过简单的软件操作就能完全控制网络的定义和管理。SDN希望虚拟机所依附的网络也像虚拟机那样能够实现灵活定义、动态改变和自动化管理。

SDN之所以会兴起,背后有深刻的原因:传统网络的规划建设很多时候没有办法覆盖可能承载的各类业务,而且一旦建成,就基本上一成不变,但业务则是不断发展和变化的,底层网络的不变与其上业务的不断变化就产生了矛盾。此外,在这个竞争加剧的互联网时代,软件敏捷交付以支持业务快速上线的能力正变得越来越重要,虚拟化技术的不断发展也进一步促进了这方面的进步。但网络这部分则始终游离在软件交付的控制范围之外,如果待交付的软件需要对网络做一些定制的配置,如开启某些端口、配置某些路由,则软件团队必须要提交一个工单给网络管理员(或者网运部门),后者经过漫长的审批和施工才能完成工单。如果在这个过程中信息有所缺失或者沟通不畅,那么等待的时间将会大幅增加。在这个场景中,我们看到底层网络与上层应用的第二个越来越突出的矛盾:网络与应用完全隔离,缺乏联动。因此,SDN技术必然出现,可以将其看作以软件为核心的虚拟化技术进一步蚕食传统网络供应商地盘的结果,SDN要淘汰原先与应用无关的传统网络管理和运维模式,使得软件敏捷交付变得更加敏捷,进一步提升了软件技术在整个IT行业的领导力和价值。

SDN把网络这一层拆分为三部分:第一部分是数据平面(Data Plane),专门负责数据传输,相当于网络底层的传输部分;第二部分是控制平面(Control Plane),它属于SDN的核心和主要模块,负责对网络设备下发管理指令,所有网络设备都由集中的一个Controller控制,底层的协议是标准的,纳入SDN系统的所有设备都要遵循标准协议,因此Controller可以无缝对接和管理不同厂家的数据平面网络设备,成为实际上标准化的大网管平台;第三部分就是SDN Controller定义的网络管理接口,这些接口采用了流行的REST API方式进行定义,这样一来,上层应用就可以采用REST API来实现SDN的宣传理念——软件定义网络,如编程方式定义路由策略、流量控制策略,修改防火墙规则,映射NAT端口,创建子网等。SDN的提出和发展也进一步促进了云计算的大规模推广。但是目前SDN碰到了一个比较棘手的问题,即Controller对下面的数据平面有标准接口,但是Controller开放出来的RESTful API没有一个公开认可的标准,所以这一块的接口比较杂乱,每个厂家的接口都不一样,因此上层应用需要针对不同厂家的SDN Controller的特点进行相应的适配,这增加了开发的工作量和难度。2.网络虚拟化之NFV

除了SDN,网络虚拟化的另外一个重点发展方向就是NFV(Network Function Virtualization网络功能虚拟化)技术,NFV主要针对电信行业,背后的推动力量也是电信行业与相关的供应商,图1-4为我们展示了NFV与SDN的关系。

在传统电信领域中的网元设备基本上都是各个专业厂商生产的,这些网元设备的软件与硬件相对都很封闭,大部分采用了专有的硬件,因此成本相对较高,而对于其性能我们也无法很客观地进行评价,专有系统也不利于大规模自动化运维。随着云计算的规模化发展,电信行业希望将网元设备标准化,底层的网络功能完全采用标准化的X86设备支撑,从而搭上了网络虚拟化的顺风车。图1-4 网络虚拟化之NFV和SDN

NFV将网元底层硬件交给X86,并且将底层网络功能交给网络虚拟化技术实现以后,网元中的上层电信应用则可以统一在X86平台上提供,各个厂商的软件只要符合NFV标准规范即可,从而实现了网元设备软硬件的彻底分离及标准化目标。未来各个电信软件开发商只需要提供具有标准化功能的网元软件(程序代码),这些网元软件既可以安装在标准的X86通用服务器上,也可以部署在X86虚拟机上,这些虚拟机可能是电信运营商内部的资源,也可能是公有云上的资源,因此电信业务很容易根据用户规模的变化而快速弹性伸缩,并且电信新业务的试点和开展也变得更加容易。正因为前景一片光明,NFV已成为目前电信行业的一个重点技术,并已在国外很多运营商中得到了大规模的推广,如韩国、美国及欧洲的电信行业中都有相应的NFV商用案例。目前国内的中国移动、中国联通、中国电信都在进行NFV试点,摸索和积累整个网络向NFV迁移的问题和经验。根据规划,2017~2018年将是NFV大规模地推广或者至少是生产过亿的一年。1.2.2 存储虚拟化

云计算虚拟化的另外一个重点方向是存储虚拟化,即VMware率先提出的“软件定义存储”,如图1-5所示。之所以存储设备也会被纳入虚拟化阵营,有两个重要的原因:首先,虚拟机需要硬盘存储,但一台物理机上的硬盘是远远不够数量众多的虚拟机来瓜分的,所以需要将外部大容量存储设备纳入进来;其次,物理机可能发生永久损坏,在这种情况下,虚拟机的文件和数据需要存储在可靠的外部存储上,以便故障后快速恢复。

存储设备实际上是最缺乏标准化支持的,目前的存储产品都是不同厂商根据市场需求进行研发的,相对于网络设备来说,更加专有化和封闭化。不同的场景里有不同的存储虚拟化技术,在选择存储虚拟化方案时,需要综合考虑成本和性能。

例如,在成本不是问题的情况下,可以采用基于光纤的SAN存储设备——FC-SAN。其特点是性能特别高,网络存储速度快,一般用在高性能I/O的场景,如Oracle用SAN存储数据库文件;但SAN的缺点是端口数量有限,交换机不能任意扩展,所以不适合较大规模的云计算领域。此时可以采用IP-SAN存储设备,它基于IP的SAN技术,其优势是可以在大规模的云计算当中部署并使用;但是它的性能比FC-SAN要差一个档次,大概有10%~15%的性能损耗,但也基本上能满足一般企业的存储需求,对于Hadoop这样的存储要求来说,IP-SAN绰绰有余。

之前的SAN设备实际上提供了块存储能力,除了块存储之外,我们经常使用的还有文件共享存储。这种系统通常由多个X86服务器或者存储设备组成一个超大的存储网,并且在其上提供了分布式文件系统,典型的如开源的GlusterFS、Ceph等,我们所熟悉的云盘,如百度云盘、360云盘等,其上都是这类文件的共享存储模式。文件共享存储的特点就是可以建得很大,但是它的读写性能比较差,I/O存储比较慢,尤其是小数据量的读取,因此适合用作文件备份或者是文件存储,但不适合存储数据库的数据文件。

存储虚拟化的思路与NFV的设计理念相似,即把原来各个厂商闭塞的存储设备拆解成真正的存储单元和相关控制单元,并且提供标准的REST API接口网关。目前企业级存储虚拟化的思路基本上以IP-SAN为核心。其最下层是一个存储池(storage pool),可集成各个厂家的存储设备,如IBM、惠普、EMC的存储。其最上层有一个标准的网关,负责控制存储池里的所有存储单元,而在网关之上会开放一些REST API接口,允许上层的应用调用。例如,以软件编程的方式动态定义逻辑卷,并自动挂接存储卷到指定的目标服务器。图1-5 存储虚拟化1.2.3 虚拟化的终极目标

虚拟化技术可以通过软件的方式在任何时间将一台物理机划分为多台虚拟机来使用,从而大大提高了IT硬件资源的利用率,使得IT资源能够真正成为一项社会基础设施。我们已经看到,建立在虚拟机技术基础之上的以亚马逊为首的一批公有云服务商正在加速影响我们所熟悉的IT生态区,越来越多的应用“跑”在公有云的虚拟机上,服务于各行各业。此外,以虚拟化技术为关键核心的IaaS平台则进一步强化了我们对IT基础设施资源的灵活调度、按需分配、弹性扩展、跨域共享、容灾备份等高级管理能力。

那么,虚拟化的终极目标是什么?

从主机虚拟化到网络虚拟化再到存储虚拟化,我们发现所有的IT基础设施和资源都已经全盘虚拟化,在虚拟化的基础上再进一步实现运维的自动化、管理的标准化,就实现了整个数据中心的虚拟化目标,打造了虚拟化技术的终极目标:实现一个“软件定义”的纯虚拟化的数据中心,如图1-6所示。图1-6 虚拟化终极目标:软件定义数据中心

当数据中心中所有的功能都能通过软件去管理和控制时,未来世界就是一个软件的世界,我们通过软件定义和控制一切,就如同电影中所展示的情景:有了云计算和“软件定义一切”的基础之后,未来可能会出现真正控制整个世界的Skynet。1.3 脱颖而出的容器技术1.3.1 容器技术的历史

X86上的虚拟机技术与容器技术基本上是并行独立发展的,初期虚拟机技术占上风,到了2005年,容器技术开始慢慢脱颖而出。容器技术的发展离不开谷歌的推动,我们一直以为Docker公司是容器技术的领头羊,但实际上谷歌才是容器技术真正的幕后推手。

谷歌的整个生产系统中一直没有使用虚拟机技术,而是全部采用容器技术来支撑。在2015年的EuroSys会议上,谷歌公布了多年以来的容器集群方面的秘密:谷歌早些年构建了一个管理系统,它可以用来管理集群、容器、网络以及命名系统。第一个版本被称为Borg,后续版本称为Omega。目前每秒会启动大约7000个容器,每周可能会启动超过20亿个容器。利用多年在大规模容器技术上的实践经验和技术积累,谷歌构建了一个基于Docker容器的开源项目Kubernetes,借此奠定了自己在容器界的霸主地位。

2006年KVM开始发展,随后谷歌也开源了容器的底层核心技术Cgroups,Cgroups随后被纳入Linux内核中,接下来的开源项目LXC(Linux Container)提供了创建Linux容器的一站式API封装,从此之后,容器技术开始被大家所关注,而Docker早期就采用了LXC项目来完成具体容器的创建过程。但LXC技术对环境的依赖性很强,在一台机器上用LXC打包出来的镜像,如果迁移到别的机器上运行就会出现问题。所以,容器技术一直没有流行开来,Docker的出现彻底改变了容器技术的尴尬状况。Docker对容器技术做了一次革命性升级,创建了自己一整套的分层文件系统,标准化了容器镜像,使容器化在不同的环境、不同的操作系统迁移的时候,完全不受外界环境的影响,提高了整个系统的可迁移性,使容器化技术真正成为可实用的技术,彻底解决了LXC迁移性、独立性、可管控性的问题。于是2013年以Docker为代表的容器技术开始爆发,从此以后,Docker成为容器技术的代言人。

2015年也成为容器化发展历程上的一个重要里程碑,全球容器化标准组织云原生计算基金会(Cloud Native Computing Foundation,CNCF)正式成立,这是由谷歌策划、Linux基金会支持的一个新组织,旨在推动容器技术标准化发展。2016年,微软在其Windows Server 2016操作系统版本里首次支持Docker,解决了基于Windows系统使用容器的难题。这样一来,未来Docker不仅可以运行在Linux上,也可以在Windows上运行,我们可以看到,容器正在改变整个世界,不管是什么样的操作系统,容器技术都已经开始得到支撑。

提到容器,我们经常会碰到一个问题:容器和虚拟机真正的区别是什么?图1-7很好地解释了虚拟机和容器的区别。

图1-7左侧是虚拟机,我们看到,虚拟机需要一个完整的操作系统,而容器则是共享同一个宿主机的操作系统,因此容器是非常轻量级的,容器里面仅仅包括相关的用户代码和所依赖的类库,因此容器也被称为是进程级的虚拟化。在一个操作系统上建立一个容器,实际上就相当于在一个操作系统上建立一个应用,因此它的启动速度和响应速度与虚拟机完全不在一个层面上。

另外,两者打包的镜像尺寸大小也不同,因为要包含一个完整的操作系统和各种类库,所以虚拟机的镜像非常大,一个生产环境中的虚拟机的镜像经常超过1GB,但是容器化镜像通常只有几十到几百兆。此外,镜像大小会大大影响整个系统弹性伸缩和快速部署的速度,例如,容器可以实现秒级的快速弹性伸缩,最主要的原因就是它的镜像尺寸比虚拟机要小很多,很快就能通过网络下载到目标机器并启动起来,而虚拟机可能仅仅下载镜像就需要几分钟,甚至更长的时间。图1-7 虚拟机和容器的区别

容器也可以部署在虚拟机上,那么,容器直接部署在物理机上还是部署在虚拟机上好?这是目前业界经常争论的焦点,目前的容器尤其是电信行业的容器,一般部署在裸机上,因为在虚拟机上部署容器会经过两层的虚拟化,网络I/O和存储I/O都会受到很大的影响,因此建议容器尤其是关键类的应用最好部署在裸机上,这样在管理上、扩展上就完全没有障碍。但是如果公司内部已经有基于虚拟机的私有云平台,在上面部署容器也没有太大问题,不过需要将性能损耗考虑其中。1.3.2 dotCloud发现了“金矿”

谷歌发明了容器,Docker成就了容器,那么就有必要了解一下Docker是如何诞生的?

Docker公司的原名叫做dotCloud,最初的产品是一个商业化的PaaS平台,但PaaS市场从未真正火热起来,有实力的公司都是自己开发PaaS平台,很少有公司会花钱买。市场本来就很小,又有很多厂商争夺,所以每家的日子都不好过,对于创业型的小公司dotCloud来说日子越来越难,背后的投资公司则急着要创办者找到新出路,于是dotCloud的创办人Solomon Hykes(目前在Docker公司担任CTO)决定放手一搏,效法开源运动的精神,把公司在开发PaaS平台时为了方便采用Linux Container而研发的一套工具(即Docker的原始版本)开源出来。开源之后的这套新颖的容器工具受到了很多软件工程师的追捧,开发人员开发完程序之后只要用Docker打包成镜像交给测试人员,测试人员在本机就能使用这个镜像启动容器并进行快速测试,不同的版本被固化为不同的镜像,所以很容易进行回归测试,几个不同的镜像版本可以同时测试。由此开始,Docker在业界赢得了很好的口碑并迅速风靡开来。后来dotCloud公司就改名为Docker,2014年6月对于Docker来说是非常重要的一个发展节点,谷歌宣布支持Docker,并且投资了Docker公司,有了互联网巨头谷歌的号召,其他公司纷纷跟风,越来越多的企业开始尝试并使用Docker技术。

以下是Docker发展过程中的一些重要事件。

·2013年3月27日,正式作为public项目发布。

·2014年1月,被Black Duck评选为2013年十大开源新项目。

·2014年6月9日,Docker社区正式发布了Docker 1.0。

·2014年6月,谷歌宣布自主融合Docker技术的云计算服务Google App Engine和Google Compute Engine。

·2014年9月,获得4000万美元的融资,此时已经累计融资6600万美元。

·2015年4月,获得了9500万美元的融资,已经确立了在第三代PaaS市场的主导地位。

·2015年,容器技术异军突起,其融合DevOps的敏捷特性备受业界关注,IBM、微软等传统厂商纷纷向Docker伸出橄榄枝。

·2015年1月,腾讯云计算公司对外宣布成为中国首家支持Docker Machine的云计算厂商,并将自身定位于Docker基础设施的服务商。

·2015年6月,Linux基金会与行业巨头联手建立云原生计算基金会(CNCF)。

2015年6月容器化标准组织OCP成立后,更多的大企业和创业公司开始拥抱Docker,2015年谷歌开源的Kubernetes奠定了其在容器领域微服务架构之王的地位,随后Docker公司的Swarm项目开始“模仿”Kubernetes,Mesos则第一时间拥抱了Kubernetes这个重量级新事物。2016年中国移动率先成功地在电信领域尝试大规模地部署和应用Docker&Kubernetes平台。Docker项目的社区代码贡献者也由2016年年初的900多增加到目前的1200多。

图1-8为我们展示了Docker生态圈的样貌,我们可以看到,操作系统厂商、虚拟化厂商、公有云厂商、服务器厂商和传统的IT巨头都成为Docker生态圈的一份子,而IBM、微软、惠普等公司都是Docker主要的战略伙伴和投资人,容器技术不仅仅对运维的帮助很大,它对软件开发的生命周期管理也带来了很大的冲击,大大促进了DevOps理念的落地。图1-8 Docker生态圈1.3.3 容器技术带来的变革

容器技术带来了诸多的变革。首先,Docker推动了微服务架构设计理念的落地,把一个原来很庞大的复杂的单体(单进程)应用拆成一个个基于业务功能的完全独立的小程序,并且分布式部署在一个集群中,以增加系统的稳定性、水平扩展能力,这就是微服务架构的核心思想和做法。微服务架构相对于传统单体应用来说,有两个明显的优势:第一,在开发上一个很大的团队完全可以拆成一个个小的专业团队,各自关注不同的业务功能的开发,因此系统的开发迭代、更新和升级就会变得非常敏捷;第二,由于微服务架构本身就是分布式架构,所以很容易实现系统的高可用以及快速弹性扩容能力,当某一个业务随着访问量的增大而出现性能瓶颈时,我们就能快速地对其进行弹性伸缩,增加服务实例数量,以改善整个系统的性能。

实际上微服务的理念很早就已经提出,微服务要求我们把一个完整的应用拆成一个个独立部署的微服务进程,并且部署在多个机器组成的一个集群中,每个机器上会部署很多微服务进程,不仅大大增加了系统发布、测试和部署的工作量,后续系统升级和运维管理的难度和复杂度也会大大提升。因此在缺乏自动化工具和相关平台支撑的情况下,微服务架构很难落地,长期以来只在一些大的互联网公司推行。

但Docker的出现改变了这一切。在Docker的帮助下,我们可以把每个微服务进程打包成独立的镜像,存储在统一的镜像仓库中,升级后的版本打包新镜像,采用新的Tag标签来区别于旧版本。只要写一个简单的脚本,以容器方式启动各个微服务程序,就能很快地在集群中完成整个系统的部署。还可以借助Docker引擎提供的API,以编程方式来实现图形化的管理系统,一键发布系统、一键升级、自动修复系统等高级功能也都容易实现了。实际上谷歌开源的Kubernetes平台首次将微服务架构的思想贯穿到底,在Kubernetes的世界里,任何一个应用都由一个个独立的服务(Service)组成,一个具体业务流程实际上是由一个个服务串联在一起而完成的,部署应用的时候也按照服务的方式部署,不用关注服务到底会分布到哪些机器上,因为Kubernetes会自动调度Service对应的容器实例到可用的节点上,并提供高可用和弹性伸缩功能。实际上Kubernetes目前实现的功能特性早已超过微服务架构本身的要求,因此越来越多的公司开始使用Kubernetes平台打造自己的微服务架构系统。

其次,Docker大大提升了软件开发和系统运维的效率,促进了DevOps体系的成熟与发展。

Docker最大的特点是对应用的发布版做了一个标准化的封装,解决了应用的环境依赖难题,并且不再需要安装部署过程。开发人员打包应用镜像之后就可以将镜像原封不动地转给测试人员,只要执行一个简单的启动命令,测试人员就可以在任意支持Docker的机器上成功运行应用程序并进入测试阶段。如果测试通过了就可以把这个镜像上传到镜像库中,随后运维人员可以直接从镜像库里把镜像拿出来并部署在生产集群中。这个过程完全可以建立一套标准化流程,因为每个环节传递的都是经过认证的标准化镜像,因此可以在后台通过一系列工具来控制整个流程的实现和度量。

通过一个流水线串联并驱动整个应用的开发生命周期过程,包括源码编译、镜像打包、自动部署或升级(测试环境)、自动化测试,以及运维阶段的监控告警、自动扩容等环节,这就是DevOps的实践思路。由于在这个过程中引入了Docker技术,从而很大程度上提升了系统运维的可管控性、可度量性、可监控性等重要指标,这就是Docker带来的第二个重要变革:进一步促进了DevOps的落地和发展。因此,在容器化平台改造建设完成之后,下一个重点目标就是建设DevOps平台,以促进整个软件的开发运维流程进一步向自动化、可管控性的目标迈进。

容器技术虽然是由Docker公司开源出来并发扬光大的,但背后是以谷歌为首的IT巨头在推进并且其已经成为标准规范,类似当年的J2EE组织,所以容器技术的影响力和影响范围会进一步扩张。

容器技术也是搭建企业PaaS平台以及新一代私有云最核心的技术,当前流行的Kubernetes和Mesos,其底层都是以容器技术为基础搭建的,而且越来越多的企业正基于Docker和Kubernetes来改造或新建自己新一代的PaaS平台。

容器技术正在加速侵入IT的各个领域,并且影响和改变着整个生态圈,软件的设计理念、软件生命周期流程都因为容器技术的引入而发生革命性的变革。因此,可以毫不夸张地说,容器技术正在改变整个世界。1.4 重新流行的PaaS1.4.1 PaaS平台发展史

PaaS平台的诞生虽然早于容器和虚拟机技术,多年来一直处于不愠不火的状态,但PaaS平台却因Docker的兴起而再次成为大家关注的焦点,新一代的PaaS平台开始以Docker为底层核心,更加接近PaaS最初的愿景。

最初的一批PaaS平台基本上以支持某种具体的编程语言为主,特别是很多公司自己开发的内部PaaS平台,这些PaaS平台通常提供了一套框架和工具以简化上层的应用开发。但实际上大部分平台都没有实现这个目标,反而增加了很大的限制,如开发语言的限制、框架特殊的API接口的限制、支持的中间件种类的限制等。很多情况下,在PaaS平台上部署一个应用反而更加复杂,这些固有的缺陷导致PaaS平台不受欢迎,特别是不受开发人员的喜爱。

2007年以后,出现了新一代的有一些影响力的PaaS产品,典型的代表有Cloud Foundry和Heroku,它们开始基于最早的容器技术实现,采用了LXC技术,但由于彼时容器技术还没有普及,加之LXC的固有缺陷,因此这两款PaaS产品都卖得不好,最后Heroku被Salesforce并购,而Cloud Foundry则成为开源产品。前面提到,Docker公司一开始也是做PaaS平台的,但与前辈们不同,Docker公司在研发自己的PaaS平台的时候,突破性地解决了容器技术长期以来的缺陷,发明了Docker这个新一代的容器引擎并用于自家的PaaS产品,因此Docker在很多人看来实际上属于第三代PaaS技术的范畴。

自从Docker开源并流行开来以后,为PaaS平台注入了新的活力和发展方向,很多公司开始基于Docker开发自家的PaaS平台。最典型的Kubernetes也可以理解为一个思想超前的开源PaaS平台,红帽的PaaS平台——OpenShift——在3.0的时候也抛弃了原先的底层架构,而是彻底拥抱Kubernetes。此外,Mesos也在0.2版本之后加入了对Docker的支持。目前Kubernetes与Mesos这两个平台在大规模生产当中已经得到了应用和验证,这些案例分布在互联网企业、传统的金融电信行业,以及其他行业当中,这也说明这个容器技术已经非常成熟了,而且新一代的PaaS平台正在慢慢地提供商业化特点来满足不同行业的需求。

图1-9是PaaS的发展进程。图1-9 PAAS的发展进程

PaaS的发展阶段可以分为3个阶段。

第一阶段:PaaS的过去(2007—2012年)。

这个阶段最成功的其实是Salesforce,Salesforce.com作为最成功的SaaS公司,同时也是PaaS的鼻祖,因为SaaS应用在底层需要一个好的PaaS平台支撑,一方面他们需要PaaS平台来运行自家的SaaS软件,另一方面PaaS平台可用于支持用户的定制软件。2007年,Salesforce推出的force.com可以看作PaaS平台的“始祖”,它用来支持客户开发和部署定制软件,用户可以通过Apex(与Java类似)和Visualforce(UI)来开发运行在force.com上的应用,并与Salesforce.com应用进行集成。由于force.com平台采用了meta data驱动的架构来实现多租户机制,因此也有人把force.com称作“Metadata-PaaS”。

2008年,谷歌为了与亚马逊的AWS争夺公有云市场,推出了GAE(Google App Engine)平台,GAE其实与Salesforce的force.com平台一样,也是一个PaaS平台,只不过谷歌的GAE建立在公有云技术之上,并且更加通用。2009年11月,新浪也模仿了谷歌的GAE创建了自己的PaaS平台——SAE,一时间,国内其他互联网巨头纷纷效仿并推出自己的×AE平台,但国内这些PaaS平台因为都只是立足于自己的开放平台战略,并不是真正的中立性开放,而且实力也有限,所以都没有发展起来。与此同时,国外的Heroku也成功模仿GAE并推出了运行于亚马逊AWS之上的公有PaaS服务,虽然Heroku依托AWS不断发展,并且深受Ruby/Rails开发人员的欢迎,但是Heroku并没有达到人们的预期。虽然对于比较简单的、常用的Web应用,Heroku的确非常适合,可以让开发人员专注于业务本身的开发。但是Heroku在一定程度上限制了开发人员的选择,使开发人员失去了全栈的控制权,一旦业务系统复杂起来,将迫使用户从Heroku转向亚马逊自身提供的更底层的IaaS平台。最终Heroku在2010年被Salesforce.com收购,但Salesforce.com有force.com这个PaaS平台,为何还要收购Heroku?最合理的解释是force.com平台已经不能满足其发展需求了。

作为公有云IaaS的绝对领导厂商,亚马逊也在反击,我们可以看到AWS不断向PaaS方向延伸:一是推出各种Application Services,二是在2011年推出了PaaS范畴内的与资源管理和服务编排相关的工具

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载