书名:OpenStack实战
ISBN:978-7-115-45013-5
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
• 著 [美] V. K. Cody Bumgardner
译 颜海峰
责任编辑 杨海玲
• 人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
• 读者服务热线:(010)81055410
反盗版热线:(010)81055315
Original English language edition, entitled OpenStack in Action by V.K. Cody Bumgardner published by Manning Publications Co., 209 Bruce Park Avenue, Greenwich, CT 06830. Copyright ©2016 by Manning Publications Co.
Simplified Chinese-language edition copyright ©2017 by Posts & Telecom Press. All rights reserved.
本书中文简体字版由Manning Publications Co.授权人民邮电出版社独家出版。未经出版者书面许可,不得以任何方式复制或抄袭本书内容。
版权所有,侵权必究。
本书的主题是通过OpenStack来部署企业私有云。本书不只是像技术手册一样介绍如何部署OpenStack,还会解释各个步骤涉及的原理以及这项技术对业界的影响。
本书分为3个部分,第一部分(第1章~第4章)是入门指南,先介绍OpenStack云操作系统,然后让读者直接通过一个快速部署工具和最小化的基础设施来快速体验OpenStack,再介绍OpenStack命令行工具(CLI),并通过使用OpenStack来理解组件的功能和整个OpenStack框架里各个组件之间的交互;第二部分(第5章~第8章)关注整个生态系统,深入介绍OpenStack的一个核心项目,并带领读者进行多节点环境下的OpenStack手动部署;第三部分(第9章~第12章)阐述在生产环境中如何使用OpenStack,重点介绍与生产环境中OpenStack部署相关的架构、组织和策略决策,Ceph存储的基本部署和操作,使用Fuel来进行OpenStack自动化HA(高可用)部署,以及通过OpenStack Heat和Ubuntu Juju进行云编排。此外,还有一个附录介绍从裸设备安装Linux操作系统的详细步骤。
本书适合对使用OpenStack来构建私有云环境有兴趣的基础设施专家、工程师、架构师和技术支持人员阅读。因为阅读本书不需要有很好的技术基础,只要了解Linux的基本操作,所以不同背景和技术能力的人群都可以阅读本书。
开源项目OpenStack从2010年7月诞生以来得到了迅猛发展,一路竞争,击败了其他各路云计算的开源项目,得到了全球400多家企业和近5万名个人会员的支持,成为云计算提供“基础架构即服务”的事实标准。CERN、沃尔玛、Comcast、NTT Group、Paypal、中国移动和国家电网等一批知名企业和机构都相继选择使用OpenStack作为自己的业务支撑平台,国内各企业、高校和开源社区也掀起了学习OpenStack的热潮,各类Meetup分享会、开源论坛和相关报道层出不穷,数不胜数。但OpenStack进入中国这几年,OpenStack的运维和开发方面的书籍并不多,系统地介绍OpenStack各主要模块部署的书更是鲜见,这与国内学习需求和热情产生了供需矛盾。究其原因,一是开源项目代码更新快,二是一般情况下国外运用实践早于国内且经验丰富,外加语言的因素。
《OpenStack实战》这本书系统地阐述了OpenStack计算、网络和块存储等节点的部署,内容丰富,得到了Jay Pipes等人的高度赞扬。及时地将这本书引进国内并翻译出版,让国内读者能轻松地理解私有云构建架构和过程,从部署实战的角度出发帮助广大国内OpenStack运维人员和开发者深入了解和掌握OpenStack,意义重大。相信通过阅读这本书,广大读者可以为规划和运维基于OpenStack的企业私有云打下坚实的基础。
——王庆
OpenStack基金会个人独立董事,英特尔开源技术中心云计算和网络部研发经理
一个开源软件的成熟的特征就是有相应的中文书籍,OpenStack也不例外。把国外的优质OpenStack书籍翻译成中文,可以培养更多的OpenStack专业人才,大大加快国内OpenStack在企业的普及速度。
——陈沙克
OpenStack技术博主,九州云信息科技有限公司副总裁
《OpenStack实战》不仅提供了真实案例,供读者学习如何开发自己的云平台,而且介绍了为什么要构建私有云、私有云技术栈选择、物理硬件集群规划等内容。阅读本书,读者将会系统地
了解如何构建面向用户的基础架构服务以及部署和运行OpenStack云的技术细节。
——叶璐
OpenStack中国区大使,Qunar DevOPS工程师
动手实践一直是技术人员对复杂技术加深理解的有效途径,这样一本理论和实践结合的OpenStack指导手册不仅为入门使用者提供快速参考,更为深入研究OpenStack者提供辅助。
——郭长波
OpenStack基金会个人独立董事,Oslo项目PTL
OpenStack项目的特点通过它的名字就很好地展示了—Open(开放)。我开始接触OpenStack时,CloudStack被认为是最稳定的,而且那时全球范围内有几家电信企业采用了CloudStack。电信企业的采用是很重要的信号,因为电信行业对可用性要求比较高。但后来居上的OpenStack从一开始就推崇“开放”,号称4个开放:开源(Open Source)、开放式设计(Open Design)、开放式开发(Open Development)和开放式社区(Open Community)。2016年下半年参加的OpenStack巴塞罗那峰会,在主题演讲会场上,OpenStack基金会首席运营官Mark Collier再次重申了上面这4个开放。
开源:有很多开源软件的所有者同时发布社区版与企业版(专业版),但OpenStack从一开始就只有社区版,没有任何企业版。
开放式设计:OpenStack有很多项目,每个项目都有一个项目技术领导(Project Technical Leader,PTL),还有若干个核心成员(Core Member)。这些职位都不是某个公司指派的,而是在很透明的机制下提名产生的。每年两次的OpenStack峰会就包括设计峰会,所有需求讨论都是公开的,并使用公开的文档记录工具记录,如社区使用比较多的Etherpad。除此之外,还使用IRC和邮件列表,IRC更适用于即时通信,即所有参与讨论者都是在线的情况,邮件列表则更多地考虑可能有不在线的参与者有必要参与讨论的情况。
开放式开发:除了在设计峰会上讨论需求外,平时的新功能(Blueprints,BP)实现需求都通过Launchpad进行管理 ,当然bug也通过Launchpad管理。所有人都可以注册为开发者,在Launchpad提bug或者BP,代码审查是通过社区基础设施团队架设的Gerrit服务器进行的,所有代码都是先提交到Gerrit上,所有开发者都可以评论和打分。因此,整个开发过程都是透明的。
开放式社区:基金会的13名技术委员(Technical Committee,TC)全部由所有活跃开发者(Active Technical Contributors,ATC)选举产生,基金会有3类董事成员,每类8名,共24名,其中有8名是个人董事,通过所有社区参与者选举产生。另外,在2016年的峰会上还讨论了成立用户委员(User Committee,UC),由CERN的Tim Bell来帮忙建立。这种大的决策不是某人关起门做出的,而是摆上桌面来讨论的。
也许正是OpenStack如此开放,才吸引了众多公司与全球170多个国家和地区超过5万名开发者参与进来。
感谢带领我进入实验室接触到OpenStack的邝颖杰老师,还有当时的队友区家华和林泽强两位同学。记得当时是从F版开始的,坑还是比较多的。那时很多人的博客文章都给了我很大的帮助,感谢他们无私奉献,分享自己的经验。感谢带领我进入唯品会构建云平台的陈展奇先生,让我真正接触到企业级需求。从接触OpenStack到现在4年左右的时间,我看到了OpenStack越来越稳定,也学到了很多东西,也有很多人都给予了我帮助,感谢各位。
颜海峰
OpenStack巴塞罗那峰会有感
颜海峰,目前就职于HPE,在云计算研发部门担任软件工程师。华南农业大学学生IT研发中心首届成员,也正是在此实验室开始了云计算的奇幻之旅。曾任唯品会企业私有云计算平台、网宿弹性计算服务的首批研发工程师。
很难相信从我开始看到Nova的最初源代码到现在已经5年了。当时这些代码刚发布,它们是由Anso Labs团队为NASA创建的。当时我在Rackspace公司工作,公司正在寻找一套新的代码库作为下一代Rackspace云。几个月后,Rackspace开源了它的Rackspace云文件平台作为Swift项目。Nova和Swift成为新生的OpenStack项目最开始的两个顶梁柱。
从那时开始,这两个项目都经历了显著的变化。Swift项目的核心团队和代码库还相对稳定些,尽管项目增加了不少新功能,性能和扩展性也有所提升。此外,与开始时的简陋相比,现在Nova项目的源代码基本上算是“脱胎换骨”了。新的代码库(如Glance、Cinder、Keystone和Neutron)的创建都是为了提供原本Nova提供的功能。
这些新的源代码被创建出来处理大规模计算基础设施的功能性管理,同时一个新型的开源社区也开始形成。在操作系统分发和打包、配置管理、数据库设计、自动化、网络和存储系统有经验的开源开发者和支持者聚拢起来为OpenStack贡献自己的力量。
我们的社区以极快的速度成长(并继续成长),快速成为全球最大、最活跃和最有影响力的开源社区之一。为了社区更好地发展,更好地面对管理上的挑战,OpenStack基金会应运而生。每年在世界各地举办的设计峰会和会议都会吸引全球超过3500名贡献者参与。社区创建了一个世界级的持续集成和构建系统来支持源代码和贡献者的快速增长。这些自动化构建系统的规模和范围可以比肩甚至超过了一些比较老的开源社区,如Apache和Eclipse基金会。
OpenStack的生态系统成为了一些新成立的公司(如SwiftStack和Piston Cloud)的沃土。同样,对原有的公司(如惠普、Mirantis和 Red Hat)也是相当有益,它们通过OpenStack社区旗下多个项目持续推动创新。
OpenStack社区的“膨胀”也让如何部署这些分布式软件组件以及如何运维它们变得更加复杂。如果想要“从零开始”部署OpenStack,就必须掌握从网络和存储到虚拟化和配置管理这些广泛的知识。获取这些必备的知识和技能已经成为使用OpenStack构建云平台要面临的关键挑战之一。这本书就提供了部署和运营OpenStack必备的知识。
在本书中,作者为读者剖析了OpenStack部署的复杂过程,介绍了3种部署方式:通过一个叫作DevStack的脚本工具,通过手动安装操作系统软件包,以及通过Fuel OpenStack安装器。在每一节中,网络和存储的设置都有详细的解释,让读者逐步接触云计算,并在读完本书后能够很轻松地深入云计算的海洋。
作者除了介绍了OpenStack技术,还解释了如何评估和怎样让你的组织从云计算中受益。云并不能神奇到把很多组织里基于人力的手动和耗时的过程问题解决掉。但通过灵活合理的应用过程,云可以让IT组织发生变革,并显著提高它们提供服务的质量。在第9章中,Bumgardner提供了任何正在考虑把现有的虚拟化IT基础设施替换成OpenStack或者正在为内部用户构建一个新的私有云平台的IT总监都必读的内容。
总的来说,本书就像是复杂的云计算世界和OpenStack软件生态系统里专业的启蒙导师。阅读它,吸收它所讲的知识,就可以彻底变成一个“Stacker”!
Jay Pipes
OpenStack技术委员会成员
Mirantis公司技术总监
我首次接触OpenStack是在2011年夏天,那时我就职于肯塔基大学(University of Kentucky)。我和我的同事兼好友Brent Salisbury被邀请参与一家财富50强技术公司关于产品研发项目的讨论。在会议期间,项目的执行发起人给了我们两个选择,使用现有的商业工具或者调研使用一个名为OpenStack的社区项目。自然结果是我们选择了调研我们一无所知的框架,就这样开始了我们的OpenStack之旅。这个开发项目没有任何产品产出,但与OpenStack的“不期而遇”却成为了我学术和职业生涯的转折点。Brent离开了肯塔基大学,与别人合办了一家创业公司,后来该公司被Docker收购了,于是他现在正就职于Docker公司。而我,走了与他不同的道路,从硕士变成博士并写了这本书。
在2013年年初,OpenStack的Grizzly版本跟当前的版本类似,但由于当时功能快速增加导致不稳定,让我们觉得在企业环境里,OpenStack还不能用于生产环境。虽然我没有冒险在企业里使用OpenStack,但研究计算是另一回事。作为研究生独立研究课程,我在研究计算时记录了使用OpenStack的案例、架构和策略。不止这样,我还描述了这个过程,最后在我们企业内部采用这个平台作为私有云。
我在原创的学术报告里使用图1来表示OpenStack在组件层面的分布式体现。我推测要烹饪一头大象,应该跟吃它一样,一次只能一块。在技术领域里,我们经常能接受技术分离作为一个组织的稳健做法——“我是存储人”或者“我是网络人”——但对很多人来说,首要任务就是只吃大象的一部分。在本书中,我会尽量将一些易懂的知识和新概念结合起来,让读者更容易理解。虽然可能你不想品尝大象的脚,但如果想成功地玩转云计算,最好在原理上知道它们是怎样工作的。
现在我写这个前言,刚好是Manning出版社的编辑第一次找我的两年后。当我开始这个项目时,还只有不到500名OpenStack贡献者,但现在已经有好几千名了。OpenStack不但成为了成长最快的开源社区之一,同时也被全球规模靠前的很多组织采用。更重要的是,至少对你来说,OpenStack现在已经足够成熟了,可以作为你的组织的私有云的基础。
图1 这幅图来自于16世纪Maestro Martino写的Libro de Arte Coquinaria(关于烹饪艺术的书)
没有我的博士导师兼好友Victor W. Marek教授的鼓励,就没有本书的出版。我有责任把这种鼓励和信心传递下去。
如果不是自己经历过,我无法想象出版一本书需要付出如此多的努力。这份努力是否能产生预期的结果将取决于读者,但毫无疑问,审稿人、编辑和其他贡献者都花费了大量时间来致力于打造一本高质量的书。通过我参与贡献和审阅其他作者的书,以及我现在写的这本书,我可以很肯定地说,Manning出版社为出版更好的书尽了最大的努力。我特别要感谢本书的策划编辑Susan Conant的孜孜不倦的工作,持续推进内容的改进。同时也要感谢出版人Marjan Bace以及编辑与生产团队的每一位成员,包括Mary Piergies、Cynthia Kane、Andy Carroll、Katie Tennant和幕后的所有工作人员。非常感谢Bill Bruns、Andy Hill、Michael Kidd、Jeff Lim和Fabrizio Soppelsa在本书编写期间帮忙做技术审阅。最后,还要感谢Andy Kirsch、Chris Snow、Fernando Rodrigues、Hafizur Rahman、Kosmas Chatzimichalis、Matt Harting、Mayur Patil、Michael Hamrah、Peeyush Maharshi和Toby Lazar,他们阅读本书初稿并提供了很多建议。
特别感谢我的妻子Sarah,感谢她照顾我们的两个孩子,同时理解和支持我出差、做研究生工作、编写这本书和其他各个方面,这些都是无私的。虽然论文、讲稿和书上都只有我的名字,但同样会带上我们共同拥有的姓。Sarah、Sydney和Jack,很抱歉没有花足够多的时间和精力陪伴你们。我希望,就像我以你们为傲一样,你们也以我为傲。我爱你们。
本书的主题是通过OpenStack来部署企业私有云。在本书中,我把私有云看成是企业内部的基础设施资源池,即基础设施即服务(Infrastructure as a Service,IaaS)。相反,公有云IaaS资源是由第三方服务提供商拥有和运营的。
从财务角度看,可以把私有云看成主要资产成本,而公有云通常是运营成本。很容易区别两者,在私有云部署中,不管实际使用量的大小,企业通常都要购买或者把在其他地方正常工作的基础设施挪过来使用。在公有云部署中,成本通常是跟直接的占用小时(开机或关机)数和通信开销有关。
组织采用私有云还是公有云通常与组织的IT职责的大小和规模有关。企业的IT部门负责为组织其他部门集中提供技术架构和资源,是使用私有云的“既得利益者”。一个多租户、充分编排的私有云为企业IT提供了非常高效的资源管理。在这方面,企业IT部门变成一个“云代理商”。相反,部门的IT单元通常缺乏数据中心设施和部署性价比高的私有云的人员。通常他们只有少量的资源需求,因此部门可以充分利用公有云资源。如果可以,部门也可以充分利用由他们的企业IT单元提供的私有云资源。基于工作负载同时使用私有云和公有云就是混合云架构了。
尽管云和想充分利用云的企业类型不同,但不同的云可以使用相同的技术来构建。虽然构建云资源的要素可以是相同的,但是使用形式和方式可以千变万化。
OpenStack是一个可以用来构建私有云和公有云的强有力的框架。从本质上讲,OpenStack为构建云的硬件和软件而抽象和提供了一组通用的API接口。这个框架提供了两个非常重要的东西:
第一点从财务角度来看是非常好的,第二点是现代IT变革的关键。对于企业IT部门来说,OpenStack为云部署带来了相同水平的高效变革。
本书希望通过一步步、自底向上的方式,为构建计算资源云提供指导。本书的目标读者包括打算部署OpenStack环境的研究人员、系统管理员和学生。阅读本书不需要有很好的技术基础,只要了解Linux的基本操作,本书的内容适合不同背景和技术能力的人群。同样,OpenStack适用于多种用例。
尽管不同的用例都使用相同的OpenStack框架,但不同服务提供商的私有云的要求和设计会有很大区别。企业都希望为企业内部提供私有资源云。这种类型的私有云不只是代表了一种额外的服务,更是代表了组织提供计算资源方式的一个转变。
本书由以下几部分组成:
本书介绍的架构适合于从小规模(5个节点)到大规模(100个节点)企业的私有云部署。另外,第12章还会介绍如何在新构建的私有云上使用应用编排工具,如OpenStack Heat和Ubuntu Juju。
本书会让读者理解私有云技术、这些技术的部署和运维,以及云编排对传统IT角色的长期影响。本书会帮助读者更好地说服企业在其内部部署OpenStack私有云,同时帮助读者提高私有云方面的技能。本书的配置和操作脚本可以到GitHub下载:https://github.com/codybum/OpenStackInAction。
对读者而言,需要理解的最重要的一点是,OpenStack私有云不是另一种简单的虚拟化工具。OpenStack是充分利用现有的虚拟化工具来构建和管理云的框架。读者将会学到如何构建、部署和管理云。从技术层面来看,读者将会理解OpenStack各个组件和支持技术,特别是OpenStack计算、网络、块存储、Dashboard和API组件。
本书划分为3个部分,第一部分(第1章~第4章)是入门指南,第二部分(第5章~第8章)深入介绍整个生态系统,第三部分(第9章~第12章)介绍在生产环境中如何使用OpenStack。
第1章介绍OpenStack云操作系统、开发这个框架的动机和OpenStack能为你的组织做些什么。
第2章将直接通过一个快速部署工具和最小化的基础设施来快速体验OpenStack。这个体验不只是演示OpenStack Dashboard的使用,还提供一个学习OpenStack框架时可以运行的模型。在第2章结尾,读者可以通过自己的OpenStack环境来创建虚拟机。
第3章会使用第2章构建的环境,介绍OpenStack命令行工具(CLI)。这一章介绍OpenStack的基本操作,如创建新租户(项目)、用户、角色和内部网络等。
第4章中,通过使用OpenStack来理解组件的功能和整个OpenStack框架里各个组件之间的交互。读者可以学到多种云设计方法,让自己可以准备自己的多节点部署。这一章还会介绍OpenStack组件是如何协同工作的,以及它们与厂商资源的关系。
第5章~第8章,每章分别深入介绍OpenStack的一个核心项目。这几章会带领读者进行多节点环境下的OpenStack手动部署。通过这几章,读者将会更好地理解在OpenStack生态里面它们是如何工作的。另外,这些手动部署工作将会带给读者宝贵的问题排查经验。
第9章介绍与生产环境中OpenStack部署相关的架构、组织和策略决策。第10章介绍Ceph存储的基本部署和操作。第11章会使用Fuel来进行OpenStack自动化高可用(HA)部署。最后,第12章会介绍通过OpenStack Heat和Ubuntu Juju进行云编排。
本书适合对使用OpenStack来构建私有云环境有兴趣的基础设施专家、工程师、架构师和技术支持人员阅读。本书对身为领导者和战略角色的人有一定的战略价值,其内容同时也适合技术型读者。阅读本书不需要有很好的技术基础,只要了解Linux的基本操作就可以。
本书所有的代码都会用等宽字体与其他文本内容加以区分。代码注释伴随在很多代码清单中,突出重要的概念。在一些例子中,数字编号链接到代码清单后面的解释。
读者可以在Manning出版社的网站和https:// github.com/codybum/OpenStackInAction下载本书的示例代码。
Cody Bumgardner有超过20年的IT行业的从业经验,在IT架构、软件开发、网络、研究、系统和安全领域扮演过技术、管理和销售角色。最近几年,作者主要专注于研究、实现和介绍云计算和计算经济学。他现在还是肯塔基大学计算机科学的博士生,专注于计算经济学和分布式资源管理。Cody现在还是一家公立大学的首席技术架构师(CTA)。作者作为首席技术架构师为就职的学校制定了一个5年的云计算战略和路线图。这个路线图概述了颠覆性的云技术,并给出了全体IT人员的相关转变。这个计划以企业OpenStack私有云部署为核心,支持超过4万个包括学术、研究和医疗卫生(学术)方面的用户。Cody主要负责OpenStack私有云、计算研究和云计算其他前沿技术的架构、账务建模、部署和长期战略规划。
本书封面上的图像的说明文字是“一位来自库唐斯的挤奶女工”。这张插图取自经Louis Curmer编辑并于1841年在巴黎出版的很多艺术家的作品汇集而成的作品集。这个作品集的名字是Les Français peints par eux-mêmes,翻译出来意思是“法国人眼中的自己”。每一幅图集都是精工细作并手工着色的,这些丰富多样的图集形象生动地提醒着,200多年前的文化是如何分隔在世界不同地区、城镇、乡村和居民区的。人与人之间相互独立,说着不一样的方言和语言。站在大街或者乡村小道上,从衣着打扮就很容易分清他们住在哪里、卖些什么、处于什么样的地位。
那时如此多元化的区域差异逐渐消失了,而从那时起衣服着装也开始变化。现在不同州的居民都很难辨认出来,更别说不同城镇和地区的了。也许我们以文化多元化换得了一个更加丰富多彩的个人生活,当然也是一个更加多变、快节奏的科技生活。
在一个科技类图书众多的时代,Manning以印有两个世纪以前丰富多样的地区生活的图书封面赞颂了计算机事业的创新性和自主精神,这些插图又将创新性和自主精神重新带回到我们的生活。
本书的第一部分是对OpenStack框架的介绍:为什么要使用它和如何使用它。剖析OpenStack各个组件,解释它们与底层资源(计算、存储、网络等)的关系。这一部分将会带领你在单个节点上通过DevStack部署工具来部署OpenStack。同时这一部分内容还会帮你思考如何能将OpenStack用在你的环境中,并激发你对这个框架的兴趣,继续探索本书后面的部分,更深入地了解它是如何运作的。
本章主要内容
一二十年前,很多大型的计算机硬件公司都通过自己生产制造专门的处理器来保持竞争优势。但随着成本的上升,能制造出足够数量的芯片来保持盈利的公司越来越少。于是,专门生产芯片的厂商出现了,它们可以大规模生产通用处理器,并且大大降低了成本。从一开始的只有少数计算机芯片厂商“鼓吹”的基于英特尔x86指令集的标准化台式机和服务器平台,到最后形成了采用通用硬件的客户-服务器的市场格局。
在21世纪初的互联网风潮下,互联网快速发展,从而出现了大量大规模使用通用硬件的数据中心。虽然通用硬件设备强大且便宜,但它的架构就跟我们看到的台式机一样,不是按中心化管理的思想来设计的。没有现成的工具可以用来像管理资源池一样管理这些通用硬件设备。更糟糕的是,在那时,这些服务器缺少硬件管理的能力(辅助管理卡),看起来跟台式机一样。不像大型机和大型对称多处理结构(symmetric multiprocessing,SMP)的机器,这些通用服务器跟台式机一样,需要通过软件管理层来协调其他独立的资源。
在这个阶段,公共或者私有的组织在自己内部开发出很多管理框架来管理公共资源。图1-1展示了跨越多个数据中心的相互连接的资源池。通过管理框架,这些公共资源可以基于其可用性或者用户需求来灵活使用。不知道谁创造了这个术语,这种通过管理框架来灵活使用通用硬件设备的计算方式,可以说是拥有了资源“云”。
图1-1 彼此互联的通用资源的云
在这个阶段,在很多商用或者开源的云管理软件之中,OpenStack是最为流行的一个。OpenStack提供了一个通用的平台来控制云计算里面的服务器(计算)、存储、网络,甚至应用资源。OpenStack可以通过基于Web的界面、命令行工具(CLI)和应用程序接口(API)来进行管理。这个管理平台不仅能管理这些资源,更妙的是它不需要你去选择特定硬件或者软件厂商。厂商特定组件可以轻松地被替换成通用组件,OpenStack为IT业界各类从业人员创造了价值。
一种更好理解OpenStack的方式是了解在亚马逊网站上购物的过程。用户登录亚马逊网站,然后购物,商品将会通过快递派送。在这种场景之下,一个高度优化的编排步骤是尽可能快并且以尽可能低的价格把商品买回家里。亚马逊成立12年后推出AWS(Amazon Web Services)。AWS把用户在亚马逊网站购买商品这种做法应用到了计算资源的交付上。一个服务器请求可能要花费本地IT部门几周的时间去准备,但在AWS上只需要准备好信用卡,然后点击几下鼠标即可完成。OpenStack的目标就是提供像AWS或者其他服务提供商一样水准的高效资源编排服务。
OpenStack是什么?
虚拟机和租户
在本书中,虚拟机指的是模拟物理服务器的一个实例。与物理机一样,虚拟机执行相同的功能,从操作系统的角度来看,无法区分是运行在虚拟机还是物理机上。导致虚拟机被使用的原因多种多样,但大多数的虚拟化推动力可以归结为:以牺牲性能来获得通过软件对资源的灵活控制。从一个更高的角度来说,你可以认为OpenStack之于数据中心,就像操作系统之于服务器,都带来了相同水平的运行效率。
读者将在本书多处看到租户这个词,在OpenStack里面这个词有特定含义。我们可以认为租户就是资源的配额限制集合,被虚拟机用来在逻辑上与不同租户互相隔离。例如,一个用户在租户A配错了网络,但租户B并不会受到影响。
OpenStack基金会拥有数以百计的官方企业赞助商,以及数以万计的覆盖130多个国家或地区的开发者组成的社区。像Linux一样,很多人将会被OpenStack吸引,作为其他商业产品的一个开源的替代品。但他们将会逐渐认识到,对于云框架来说,没有哪个云框架拥有OpenStack这样的服务深度和广度。也许更为重要的是,没有其他产品,包括商业或者非商业的,能被大多数的系统管理员、开发者或者架构师使用并为他们组织创造这么大的价值。
让我们来详述OpenStack作为管理、规定和利用云资源的框架的定义。OpenStack官方网站这样描述这个框架:“创建私有云和公有云的开源软件。”接着是:“OpenStack软件是一个大规模云操作系统。”如果读者有服务器虚拟化的经验,也许读者会很快地得出这样不正确的结论:OpenStack只是提供虚拟机的另外一种方式。虽然虚拟机是OpenStack框架可以提供的一种服务,但这并不意味着虚拟机是OpenStack的全部。
图1-2展示了OpenStack通过其几个资源组件协调来提供公有云服务和私有云服务。如图所示,OpenStack没有取代资源提供者,它只是通过框架内部的控制点来简单地管理这些资源。
图1-2 OpenStack是一个云操作系统
一个有经验的系统管理员也许会非常怀疑OpenStack是一个“云操作系统”的描述。OpenStack不像管理员通过启动盘引导启动几百台传统操作系统服务器那样,直接在裸设备上引导启动。相反,它通过对资源的管理,在云计算环境里共享操作系统的特性。
在OpenStack云平台上用户可以:
乍看之下,OpenStack确实不像是一个传统操作系统,但“云”同样不像传统计算机。我们必须回过头来重新考虑一个操作系统的根本作用。
最初,操作系统乃至硬件层面抽象语言(汇编语言)、程序都是用二进制机器码来编写的。然后传统操作系统出现了,允许用户不仅可以编写应用程序代码,还可以管理硬件功能。现在管理员可以使用通用的接口管理硬件实例,开发者可以为通用操作系统写代码,用户只需要学习一个用户交互接口即可。这样可有效地对底层硬件透明化,只需要操作系统是一样的。在计算机进化演变过程中,操作系统的发展和新操作系统的出现,给系统工程和管理领域带来了风险。
图1-3展示了现代计算系统的各个抽象的层次。
图1-3 计算抽象的层次
毫无疑问,过去的一些开发者不想因为使用操作系统而失去了对硬件的直接控制,正如有些管理员不想因为服务器虚拟化而失去对底层硬件和操作系统的控制。在每次转变过程中,从机器码到汇编,再到虚拟层,我们一直没有失去对底层的控制;每次都是通过抽象手段简单标准化而已。我们仍然拥有高度优化的硬件,我们仍然拥有操作系统,只不过更常见的是我们拥有这些层面之间的硬件虚拟化层。
新的抽象层被广泛接受,通常是因为对标准实现优化的好处大于在这些层面上做(虚拟化)转换。也就是说,当整体计算资源的使用率能通过牺牲原生性能来得到很好的提升,那这一个层面的抽象就会被接受。这个现象可以通过中央处理器(CPU)的例子来清晰展现,这几十年,中央处理器都遵守相同的指令集,但它们内部的架构却发生了翻天覆地的变化。
大多数人想到中央处理器时,都没想到硬件层面的虚拟化和执行形式的变化,但事实就是这样。很多在x86处理器上执行的指令可以被处理器内部虚拟化,一些复杂的指令可以通过一系列更简单、更快速的指令来执行。指令层面优化的复杂度不在本书的讨论范围内,但很有必要去了解,即使是使用裸设备,即使是在处理器层面,也是应用到了某种形式的虚拟化。现在,与其关注失去了控制,不如想象一下,通过使用一个共同的框架来管理、监控和部署基础设施和应用的私有和公有云。只有向前迈出转变的步伐,才会真正领会OpenStack。
数十年间CPU的抽象和虚拟化
英特尔的x86指令集首次出现在1978年推出的英特尔8086处理器上,作为英特尔8080处理器的向后兼容替代品。x86指令集定义了一系列对处理器变化透明的汇编指令。从那以后,新的“处理器扩展特性”不断被添加进来,处理器时钟周期也不断提升,但已存在的指令依旧保留下来。
随着更快的处理器需求的增长,因此产生了软件能在不同代处理器之间互操作的需求。CPU设计者需要对低级别抽象进行弹性优化,同时还要保留指令级别的兼容性(标准化)。设计者不用担心关于如何保持底层硬件一致的问题,这样他们可以在不同代处理器间极大地提升处理器的时钟速度。1995年,英特尔的奔腾Pro(Pentium Pro)处理器引入了微操作解码(micro-op decoding)这个概念。之前一个特定指令就是一个指令时钟周期,通过翻译这个指令为多个简单微指令,每个微指令就是一个指令时钟周期。
除了微操作,奔腾Pro处理器还引入了指令的无序执行和内存的虚拟化(通过32位总线对36位内存进行寻址)来对处理器进行优化。但这些对开发者来说是完全抽象化的,允许相同的应用运行在不同厂商出品的不同代的处理器上。这种保持指令级别兼容性的方式依然使用在当前的x86_64处理器中。
本书主要关注如何通过使用OpenStack来部署企业私有云。同时,我会把私有云描绘成其所在的组织内部拥有和管理的基础设施(虚拟机、存储等)资源池,也就是我们所说的基础设施即服务(Infrastructure as a Service,IaaS)。相反,公有云IaaS资源由第三方服务提供商拥有和运营,如亚马逊的AWS、微软的Azure等。本书的目标是帮你把公有云服务的简单和高效带到你的企业。
经济考量:私有云与公有云
从财务角度看,我们可以把私有云看成主要资本支出,公有云则是运营支出。这个区别很容易理解,在私有云部署时,你的组织要购买基础设施或者把在其他地方正常工作的基础设施挪过来使用。而在公有云中,成本直接与资源使用挂钩(使用才付费,不使用不付费),当然还有网络通信开销。
组织选择私有云还是公有云通常取决于使用资源的规模和组织内部IT部门的职责范围。企业IT部门的职责如果是集中为其他部门提供技术架构和资源供给,部署私有云更有利。一个多租户(数据、配置和用户管理在逻辑上是租户间隔离的)、完全实现编排的私有云可以让企业IT部门成为私有云代理。
多租户和完全编排
多租户指的是在云平台中以部门级别管理计算资源的能力。例如,一个市场营销部门可以分配一定比例的共享资源(X台虚拟机、Y容量的存储等),这个部门可以随意使用这些资源而不影响中心组织(回顾一下亚马逊购买模型)。同样,完全编排描述了应用程序依赖资源的分配能力。例如,一个会计应用程序和它的Web服务、数据库服务等依赖可以被程序化部署在一个环境里。因此,市场营销部门不只能在一个特定租户内管理它的资源,还能通过平台编排服务来部署基础设施(虚拟机)和应用程序(MySQL、Apache2、定制的应用程序等)。
相比之下,如果是部门中的IT单位,通常缺乏数据中心基础设施和部署高性价比的私有云的人员。由于他们相对小的资源需求,部门中的IT单位通常可以利用公有云资源,或者利用他们企业的IT部门提供的私有云资源。
如果基于工作负载同时使用私有云和公有云,那么这种结合使用称为混合云。公有云和私有云都是使用相同的技术来构建,不过虽然构建组件可能一样,但使用私有云和公有云的动机可能完全不同。例如,用户经常因为安全合规性原因而使用私有云。通常来说,下列这些工作负载会使用公有云:本质上是周期性的工作负载,或者需要一个对企业来说非常昂贵的全局规模的工作负载。
虽然本书主要介绍如何使用OpenStack构建私有云,但也有很多内容是介绍如何基于OpenStack的API来直接转换成公有云提供商的服务。
从根本上讲,OpenStack抽象和提供了一个通用的API接口来控制不同厂商提供的硬件和软件资源。这个框架提供了两个很重要的内容。
第一点从财务角度来看是非常好的,第二点则是现代IT变革的关键。
这有什么内幕呢
OpenStack提供了可伸缩和被抽象的底层硬件的各种功能的支持。OpenStack(或者其他云框架)不能做到的是主动顺应你当前的技术实践。为了充分利用云计算的能力,你必须对当前的业务和架构实践进行相应的转变。
如果你的架构标准是基于使用厂商提供的适当功能来对数据中心所有服务器实现某些功能,这样会与对厂商抽象的云部署冲突。如果你的业务实践只是按用户需求创建虚拟机,那你就没有抓住云自助服务的本质。如果最终用户的请求可以被高效自动化执行,或者用户可以自我供给资源,那你就是充分利用了云计算的能力。
1.3节将把OpenStack与其他相应技术(也许是你熟悉的)关联起来。
前面介绍了OpenStack能带来的好处,但它是如何工作的呢?也许,理解OpenStack是怎样工作的最简单的方式是把这个框架与企业环境内的常见技术关联起来。
在本节中,读者将会了解OpenStack是如何与它控制的基础资源(计算、存储、网络等)关联起来的。如你所见,OpenStack通常不提供实际意义上的资源,它只是简单控制这些低层次的资源。图1-4展示了OpenStack是如何管理资源的提供者的,它们轮流被虚拟机使用。
图1-4 OpenStack资源管理模型
在接下来的小节里,读者将会看到关联特定资源组件的详情:服务器虚拟化,通过对hypervisor(虚拟机管理器)的控制;网络,通过对厂商提供的硬件和OpenStack服务的控制;块和对象存储,通过对厂商和OpenStack服务的控制。最后,我们会看到Openstack各个服务和常见的云术语的关联。如你所见,OpenStack是一个协调资源和服务的框架,而不关心有哪家底层技术厂商。
hypervisor或者虚拟机监控器(Virtual Machine Monitor,VMM)是一种为虚拟机进行物理硬件仿真的管理软件。OpenStack不是一个hypervisor,但它确实控制着hypervisor的操作。OpenStack框架支持多种hypervisor,包括XenServer/XCP、KVM、QEMU、LXC、ESXi、Hyper-V、BareMetal和其他。读者可能对VMware ESX、VMware ESXi和Microsoft Hyper-V比较熟悉,因为这些是当前企业虚拟化市场主流的hypervisor。因为许可限制、成本和其他因素,OpenStack社区对这些商业hypervisor的支持要少于开源的hypervisor。
图1-5展示了OpenStack如何管理物理硬件上被hypervisor虚拟化的资源。在一个OpenStack集群内,OpenStack协调多个hypervisor资源和虚拟机的管理。
图1-5 OpenStack管理着hypervisor
无论部署规模多大,大多数的个人和组织采用的hypervisor是XenServer或者KVM,它们也是支持最多功能的hypervisor。XenServer是思杰(Citrix)公司的产品,从严格意义上来说,它是开源的hypervisor,但商业支持通过思杰公司提供。KVM已经是Linux内核的一部分,因此,很多Linux发行版的维护者提供KVM的商业支持,包括红帽(Red Hat)、Ubuntu、SUSE等。
你通过认证了吗 随着大量提供商开始设计基于OpenStack框架的公有IaaS服务,他们很快意识到自己的客户可能需要微软对运行在Windows主机上的hypervisor进行认证。当时,思杰公司的XenServer已经满足了认证条件,并通过了微软的认证过程。但是,尽管思杰公司有一个以CloudStack形式竞争的平台,很多组织还是使用了XenServer作为他们的OpenStack hypervisor。自从很多Linux发行厂商通过了微软的认证以后,现在可以完全支持Windows运行在KVM hypervisor上,包括那些被OpenStack控制的hypervisor上。
本书将采用基于内核的虚拟机(Kernel-based Virtual Machine,KVM)作为hypervisor。自2007年发布的Linux 2.6.20开始,KVM被并进Linux内核,完全被OpenStack支持。KVM还提供了半虚拟化,但需要操作系统原生支持,或者通过在虚拟操作系统镜像添加hypervisor特定驱动来进行支持。使用开源的hypervisor的传统问题是部署和维护它的学习曲线陡峭,经常需要拥有系统、网络和应用管理经验。幸运的是,在组织内部提供集中化支持的虚拟化资源,资源申请必须通过组织的网络、系统、安全和财务供给流程。通常用户有以下3种选择。
虽然很多厂商提供OpenStack和KVM的商业支持,但很多为工作负载构建的内部云不需要商业支持或者认证,因此,用OpenStack支持没有购买商业支持的KVM也是很流行的做法。无论你如何部署和采用哪种支持方式,本书提供的材料都一样有用。
Linux容器 最近,一些人对操作系统级别的虚拟化应用产生了浓厚的兴趣,而不是OpenStack实例提供的基础设施级别的虚拟化。操作系统级别的虚拟化可以在单一服务器上运行多个相互隔离的操作系统实例(容器)。但它不是hypervisor技术——它运行在系统级别,所有容器共享相同的内核。你可以把容器想象成在需要的地方提供虚拟的隔离,而没有全虚拟化的模拟开销。 目前最流行的两个操作系统级别的虚拟化项目是Docker和Rocket。 虽然容器是否比基础设施级别实例更适用于应用程序运行时传递还存在争议,但毫无疑问的是,基于容器的技术将会在构建云时广泛采用。
OpenStack不是一个虚拟交换机,但它确实管理多个物理、虚拟的网络设备和虚拟覆盖网络(overlay network)。不像OpenStack控制虚拟机控制器那样受限于hypervisor提供的服务,OpenStack直接提供网络服务,如DHCP、路由等。但与hypervisor管理类似,OpenStack对底层厂商技术透明,可以是商业或者开源的技术。
更重要的是,后端技术的改变,如从一种网络/厂商切换到另一种网络/厂商,并不需要客户端配置进行改动。对于涉及网络的大量专有的硬件、软件和用户接口,经常从一个厂商或者技术转换到另一个并非易事。通过OpenStack,这些接口都被OpenStack API抽象化了,如图1-6所示。
图1-6 OpenStack管理网络
OpenStack可以管理多种类型的网络技术(实现机制),包括由Arista Networks、Cisco Nexus、Linux bridging和Open vSwitch(OVS)等提供的技术。在本书中,我们将使用OpenStack和OVS提供的网络服务。OVS是OpenStack部署中常被选择的一种,用户可以简单地在自己的环境里获得和复制,不需要特定硬件环境。除了网络实现机制,还有很多被OpenStack支持的网络类型(VLAN和各种隧道技术等),这些内容将会在第6章中详细介绍。
OpenStack不是一个存储阵列,至少应该不是你通常认为的存储那种形式。OpenStack没有从物理上提供被虚拟机使用的存储。
如果你曾经使用过文件共享(NFS和CIFS等),就会用过“基于文件”的存储。这种存储的类型很容易被人使用和被计算机访问,但它通常是另外一种存储类型的抽象:块存储。你可以认为操作系统或者文件系统是块存储的主要用户。
还有另外一种系统管理员可能不熟悉的存储类型:基于对象的存储。这种类型的存储通常是通过软件API(如GET /obj=xxx)接口进行访问。基于对象的存储是文件或块存储的更高层面的抽象,但没有后两者的限制。基于对象的存储可以很容易地在多个参与节点之间进行分布和复制。不像块存储那样需要被虚拟机快速访问,分布式的对象存储允许更大的延迟,将不能用作虚拟机的卷(volume,挂载到一个实例上的块设备)。通常做法是在创建时就指明使用对象存储来存放卷和镜像(包含操作系统)的备份。
下面首先介绍OpenStack是如何管理块存储的,然后介绍对象存储的相关内容。
OpenStack现在没有为最终用户管理基于文件的存储。由图1-7可以看出,OpenStack管理块(虚拟机)存储与管理hypervisor和网络类似。
图1-7 OpenStack管理块(虚拟机)存储
图1-7从基础虚拟机资源管理展望的角度展示了其全貌。OpenStack可以管理很多厂商提供的存储解决方案,包括来自Ceph、戴尔(Dell)、EMC、惠普(HP)、IBM和NetApp等厂商的方案。与hypervisor和网络组件一样,OpenStack提供灵活切换存储厂商和技术的能力,并且不需要改变客户端的配置。
虽然OpenStack不是一个用于块存储(用来启动虚拟机)的存储阵列,但它天生拥有提供对象存储的能力。与在物理硬件上运行Linux的支持版本不同,OpenStack提供分布式对象存储集群时并不需要其他软件。这种存储类型可以用来存放卷备份,也通常用来存放大量可以被分割成二进制对象的数据。图1-8展示了一个基本的对象服务器部署,当然这些都包含在OpenStack环境中。
图1-8 OpenStack提供基于对象的(API)存储
对象存储不是必须在同一地点。事实上,节点(代理节点和存储节点)可以在多个不同的地点,互为冗余。
对象存储传统的用法是存储那些被应用访问的数据,如被用户的应用程序使用的一个文档或文件。在OpenStack环境中,对象存储有几种用法。例如,使用对象存储作为虚拟机镜像的仓库。这样并不是说虚拟机直接使用了这些存储,它们只是通过这个存储系统维护的数据被提供出来。这样做是合理的,因为这个提供过程不需要对随机数据的低延时访问。对象存储还会用来备份一个现有的虚拟机的快照,用于长期保存备份。
OpenStack是一个用来构建云的框架,可以构建公有云和私有云。除了公有云和私有云的定义,还有“即服务”的云定义。OpenStack是什么即服务呢?OpenStack是多个即服务云的基础。
假如你对为自己的企业提供一个类似于AWS供应虚拟机和存储资源感兴趣,那么OpenStack可以认为是基础设施即服务(Infrastructure as a Service,IaaS)。在这种场景下,用户具有提供给个人的直接访问的虚拟机,并由用户直接管理。虽然构成云的物理组件对用户是隐藏的,但是可以直接访问它们。OpenStack的职责是控制为最终用户提供基础设施的资源。
现在假设你的云用户不能对基础设施直接访问,用户只能访问由OpenStack提供和支持的应用编排功能。在这种场景下,OpenStack可以认为是平台即服务(Platform as a Service,PaaS)的后端提供者。底层的物理和虚拟基础设施组件对用户是隐藏的。想象一下这样的场景,一个开发团队需要一个独立的应用环境(应用层部署在IaaS上)来进行软件测试。通过云编排,OpenStack可以用来作为部署测试平台的后端提供者。
现在假设你的公司通过使用OpenStack提供的基础设施即服务(IaaS)或平台即服务(PaaS)为客户提供一种服务。在这种场景下,OpenStack服务作为软件即服务(Software as a Service,SaaS)的后端组件。你可以看到,OpenStack可以用作云计算多个层面的基础组件。
现在你对OpenStack可以做什么和如何做有了更深的理解,是时候介绍OpenStack各个组件是如何工作的了。1.4节将会介绍OpenStack各个独立组件和它们在整个框架中的作用。
1.1节介绍了OpenStack基本的功能,本节我们将会分析组成OpenStack框架的基本组件。
表1-1列举了多个OpenStack组件或核心项目。虽然还有更多现处在不同开发阶段的项目,但表1-1中所列的是OpenStack的基本组件。最新的OpenStack服务路线图可以在OpenStack路线图网页中找到。
表1-1 核心项目
项 目 |
代码名称 |
描 述 |
---|---|---|
计算(Compute) |
Nova |
管理虚拟机资源,包括CPU、内存、磁盘和网络接口 |
网络(Networking) |
Neutron |
提供虚拟机网络接口资源,包括IP寻址、路由和软件定义网络(SDN) |
对象存储(Object Storage) |
Swift |
提供可通过RESTful API访问的对象存储 |
块存储(Block Storage) |
Cinder |
为虚拟机提供块(传统磁盘)存储 |
身份认证服务(Identity) |
Keystone |
为OpenStack组件提供基于角色的访问控制(RBAC),提供授权服务 |
镜像服务(Image Service) |
Glance |
管理虚拟机磁盘镜像,为虚拟机和快照(备份)服务提供镜像 |
仪表盘(Dashboard) |
Horizon |
为OpenStack提供基于Web的图形界面 |
计量服务(Telemetry) |
Ceilometer |
集中为OpenStack各个组件收集计量和监控数据 |
编排服务(Orchestration) |
Heat |
为OpenStack环境提供基于模板的云应用编排服务 |
现在你应该了解了OpenStack及其作用,让我们快速回顾一下它的发展历史。
2009年,美国总统奥巴马在上任的第一天就签署了针对所有联邦机构的备忘录,引导他们打破横亘在联邦政府和联邦政府服务的人民之间的有关透明度、参与度、合作方面的屏障。这份备忘录就是开放政府令。
该法令签署120天后,美国宇航局(NASA)宣布它的开放政府框架,其中包括Nebula工具的共享。开发Nebula是为了加快向美国宇航局科学家和研究者提供IaaS资源的速度。与此同时,云计算提供商Rackspace宣布开源它的对象存储平台——Swift。
2010年7月,Rackspace和美国宇航局携手其他25家公司启动了OpenStack项目。在过去5年中,已经产生了12个发行版本。OpenStack发行版本见表1-2。
表1-2 OpenStack发行版本
名称 |
日期 |
核 心 组 件 |
---|---|---|
Austin |
2010年10月 |
Nova、Swift |
Bexar |
2011年2月 |
Nova、Glance、Swift |
Cactus |
2011年4月 |
Nova、Glance、Swift |
Diablo |
2011年9月 |
Nova、Glance、Swift |
Essex |
2012年4月 |
Nova、Glance、Swift、Horizon、Keystone |
Folsom |
2012年9月 |
Nova、Glance、Swift、Horizon、Keystone、Quantum、Cinder |
Grizzly |
2013年4月 |
Nova、Glance、Swift、Horizon、Keystone、Quantum、Cinder |
Havana |
2013年10月 |
Nova、Glance、Swift、Horizon、Keystone、Neutron、Cinder、Ceilometer、Heat |
Icehouse |
2014年4月 |
Nova、Glance、Swift、Horizon、Keystone、Neutron、Cinder、Ceilometer、Heat、Trove |
Juno |
2014年10月 |
Nova、Glance、Swift、Horizon、Keystone、Neutron、Cinder、Ceilometer、Heat、Trove、Sahara |
Kilo |
2015年4月 |
Nova、Glance、Swift、Horizon、Keystone、Neutron、Cinder、Ceilometer、Heat、Trove、Sahara、Ironic |
Liberty |
2015年10月 |
Nova、Glance、Swift、Horizon、Keystone、Neutron、Cinder、Ceilometer、Heat、Marconi、Trove、Sahara、Ironic、Searchlight、Designate、Zaqar、DBaaS、Barbican、Manila |
OpenStack现在保持6个月发行一个新版本的周期,与OpenStack峰会举办周期一致。该项目的参与公司已经从过去的25家发展为现在的超过200家,超过130个国家或地区的数千名用户参与其中。