黄凯 杜玉杰 译
北京
OpenStack是一个用于构建公有云和私有云的开源软件。本书全面讲解OpenStack的方方面面,每一章均提供每种服务的真实且实用的示例,使读者能使用和实践 OpenStack 的最新特性,旨在帮助读者快速上手OpenStack,在理解的基础上将OpenStack应用到自己的数据中心。
本书涵盖了安装和配置一个私有云的各种内容:如何安装和配置 OpenStack 的所有核心组件,并运行一个可管理和可运维的环境;如何掌握一个完整的私有云软件栈,从计算资源的扩容到管理高冗余、高可用的对象存储服务。这是第一本除了介绍 OpenStack 核心组件,还对运维和高可用性有更多实际描述的书籍。
本书适合熟悉云计算平台并正在从虚拟化环境过渡到云计算环境的系统管理员和技术架构师阅读。
黄凯 有超过12 年的IT 行业经验,是一名技术跨度很广的IT 专家,大部分时间使用各种语言在编程或者撰写技术资料,有着企业级数据中心、SOA、语义网、编译系统、分布式计算和保险金融业务系统方面的技术背景和专利,以及 EMC、VMware、IBM、微软等多项认证。目前,他在IBM x86 软件团队担任云计算解决方案资深架构师,研究私有/混合/公有云计算环境的管理运维和开源云平台的应用创新工作,并主持撰写了 OpenStack企业参考架构红皮书。过往的工作经历包括在一家全球领先的数据存储公司担任首席工程师,以及在一家中间件平台公司担任虚拟服务器架构师。
黄凯拥有应用数学的学士学位和软件工程的硕士学位,目前已婚并有一个儿子。他经常应邀在一些技术博客上撰文或作为创业项目的评委,并不定期在他的微博 www.weibo.com/topkai上发表关于云计算技术的见解和点评。平时有空的时候,他会弹弹钢琴或者编曲,以及参加社区的网球比赛和足球比赛。
杜玉杰 硕士,开源顾问,中国OpenStack 社区(COSUG)发起人,关注社区运营和商务拓展相关方向,先后为IBM、HP、EMC、VMWare等企业提供开源相关咨询服务,目前担任 OpenStack 基金会懂事,企业级云计算联盟(ECA)副秘书长、华为开源顾问、红帽OpenStack认证培训讲师、HP培训部兼职讲师,曾为北航云计算硕士班、上海交大移动去计算硕士班授课。可以通过微博@ben_杜玉杰交流开源相关话题。
OpenStack作为一个大规模合作开发的云计算开源软件,可以让你在短时间内组建起一个与硬件无关的企业级私有云或公有云平台。同时,它从设计伊始便支持分布式和可扩展性,让你可以在运行期动态增加和删除存储和计算资源,像搭积木一样达到真正的按需计算。例如,Rackspace这样的企业已经使用OpenStack成功建立了一个大规模的公有云服务。然后,OpenStack并不是那种一键安装的傻瓜软件,只有了解了包括操作系统、脚本编程和系统的数据中心方面的知识,才能构建一个可以运行的云基础服务。这是一个悖论:如果想要极大的灵活性,就必须面对极大的复杂性,代价就是大量的系统参数和组件间的各种集成。
翻译这本书的初衷很简单:在我工作的团队,我曾带着一茬茬的新人从 OpenStack 小白成长为合格的 OpenStack 开发者,他们经历过的甘苦很多人是心知肚明的。在接触到越来越多的OpenStack 用户咨询后,我开始意识到一本完整的OpenStack 中文资料是多么的重要。这时,虽然我的浏览器收藏夹里面已经有超过100个OpenStack资料和文章的链接,也在工作中顺手拈来地写过许多技术轻博客,但如果让我系统而全面地向一个用户阐述OpenStack,恐怕一天一夜也说不完。然后,某一天本书的译者杜玉杰短信问我,有没有兴趣一起翻译一本 OpenStack 的书?我翻看一下原书,发现这是第一本除了介绍 OpenStack核心组件之外,还对运维和高可用性有更多实际描述的书籍,我意识到本书的作者肯定有着大量实际 OpenStack 的一线部署与运维经验。这种现成的经验和技巧,绝对是不要白不要的。于是我们一拍即合。接下来的无数个周末,还有五一劳动节和端午节,我就这样一个人一杯咖啡一整天地泡在电脑前,唯恐拖慢了翻译的进度,因为 OpenStack 项目的更新实在太快了。
这本书里面没有什么奇技淫巧,但是许多你在使用 OpenStack 时碰到的实际问题和需求大都能在这本书中找到答案或解决方案。虽然对于大多数应用场景来说,进一步阅读代码和Google一下是不可避免的,但是它会给你一个很高的起点。
本书不是那种从头读到尾的教程,它更多的是一本提供快速参考的工具书。通过阅读本书,你应该能够熟练地搭建一个最基础的 OpenStack 云计算环境,并且在遇到问题的时候也知道如何寻找解决方法。如果你有一些 Linux 和数据库运维方面的知识,还可以为这个OpenStack增加一点高可用性或者更多的自动化管理。众所周知,OpenStack每半年发布一个版本,尽管我在翻译本书的时候已经日以继夜,但是无论如何还是赶不上最新的OpenStack 版本。所以,我推荐读者在阅读本书的同时关注社区上的最新文档或StackOverflow等论坛或邮件列表,以达到最佳的学习效果。
在这里,我想要感谢我的妻子陶斯曼,她的支持让我能在本书的翻译上花这么多的时间。也要感谢人民邮电出版社能够给我这个机会参与这么优秀的技术书籍的翻译。另外,我还要特别感谢我的同事徐贺杰,他作为OpenStack nova的核心程序员给我提供了很多代码方面的细节指导,节省了我不少的时间。最后要感谢一下 OpenStack 社区等技术社区的人,虽然我不知道他们的真名,但是他们不遗余力地解答让我不得不钦佩这些职业程序员的技术修养。
黄凯
OpenStack是一个用于构建公有云和私有云的开源软件。它是一个全球性的成功,由全球数千名人员开发和支持,并得到当今云计算领域巨头的鼎力支持。
本书设计的初衷在于帮助读者快速上手OpenStack,在理解的基础上将OpenStack更有信心地应用到自己的数据中心。
从VirtualBox中的测试安装,到使用Razor和Chef自动化安装脚本在产品环境中扩容,本书涵盖了安装和配置一个私有云的各种内容。
□ 如何安装和配置 OpenStakc 的所有核心组件,并运行一个类似 Rackspace、HP 云计算或其他云平台那样可管理和可运维的环境。
□ 如何掌握一个完整的私有云软件栈,从计算资源的扩容到管理高冗余、高可用的对象存储服务。
□ 每一章均提供了每种服务的真实和实用的例子,使读者在应用到自己的环境中时也能充满信心。
本书为成功安装和运行读者自己的私有云提供了一个清晰的按部就班的指导。它包含丰富而实用的脚本,使读者能使用和实践OpenStack的最新特性。
本书涵盖的内容
第1章带领读者安装和配置Keystone,它支撑着其他OpenStack服务。
第2章介绍如何安装、配置和使用OpenStack环境中的镜像服务。
第3章介绍如何创建和使用OpenStack的计算服务,并针对如何在VirtualBox环境中起步提供示例。
第4章介绍如何配置和使用OpenStack对象存储,并展示一个在VirtualBox中运行该服务的例子。
第5章介绍如何使用存储服务储存和提取文件和对象。
第6章带领读者使用各种工具和技巧在数据中心中运行OpenStack存储服务。
第7章介绍如何在OpenStack计算环境中安装和配置提供给实例使用的持久化块存储服务。
第8章介绍如何安装和配置包括Nova Network和Neutron的OpenStack 网络。
第9章介绍如何安装和使用网页界面,并通过它进行用户的创建、安全组的修改和启动实例等操作。
第10章介绍如何设置Razor和Chef来安装OpenStack。
第11章介绍一些让OpenStack服务变得弹性和高可用的工具和技巧。
第12章带领读者了解各类日志,以及当OpenStack环境运行中遇到问题时去哪里寻求帮助。
第13章介绍如何通过安装和配置各种开源工具来监控已安装的OpenStack。
阅读本书需要的准备
要使用本书,需要能够访问计算机和带有虚拟化能力的服务器。要建立一个实验环境,需要安装和使用Oracle 的VirtualBox 和Vagrant。另外,还需要一个Ubuntu 12.04的ISO镜像,因为书中介绍的方法都是在Ubuntu环境中执行的。
本书的目标读者
本书面向的是那些熟悉云计算平台,并正在从虚拟化环境过渡到云计算环境的系统管理员和技术架构师。读者需要有虚拟化和Linux管理的知识,如果具有OpenStack方面的知识和经验,对阅读本书是有帮助的,但不是必须的。
书中的排版约定
读者会发现在本书中使用了一些文本格式用以区分不同类型的信息。这里介绍一下这些格式的一些例子和含义。
文中的代码、数据库表名、文件夹名称、文件名、文件的扩展名、路径和用户输入等都用等宽字体表示。
代码块表示方式如下:
nodes={
'controller'=>[1,200],
}
Vagrant.configure("2") do|config|
命令行输入和输出都是以如下样式书写的:
vagrant up controller
新术语和重要词语用粗体表示。以页面、菜单和对话框中出现的词语为例,读者会看到这样的样式:“点击Next按钮切换到下一屏。”
警告或重要注释会使用这样的段落
提示和技巧会使用这样的段落。
读者反馈
我们一直非常欢迎读者的反馈。请告诉我们你觉得这本书怎么样——喜欢哪些内容,不喜欢哪些内容。读者的反馈对我们至关重要,让我们能写出使读者获益更多的书。
普通的反馈只需发送邮件到feedback@packtpub.com,并在邮件标题中注明相应的书名即可。
如果你是某个领域的专业人士,并且对写作和撰稿感兴趣,请参考我们的作者指南,相关网址:www.packtpub.com/authors。
客户支持
现在你已经成为 Packt 图书的尊贵所有者,我们将极尽所能让你能从本书的购买中获得最多的价值。
勘误
无论我们如何仔细确认文中内容的准确性,错误总是在所难免。如果你发现书中的某个错误,不管是文字还是代码,请告知我们,我们将感激不尽。这可以让其他读者避免因这些错误而沮丧,也会帮助我们改进该书的后续版本。请通过 http://www.packtpub.com/来提交发现的错误。选择对应的书名,然后点击提交提交勘误表单的链接,并填入错误的详细信息。一旦提交的错误被确认,你所提交的错误信息将被接受并上传到我们的网站,或加入该书的勘误部分的错误列表中。你可以访问 http://www.packtpub.com/support,选择书名,查看已有的勘误。
版权
互联网上对于各种有版权媒体的盗版问题一直存在。Packt 非常严肃地保护版权和许可。如果在互联网上发现有关我们作品的任何形式的非法复制,请提供对应的网络地址和网站名称给我们,以便我们及时补救。
请通过copyright@packtpub.com联系我们,并附上可疑盗版材料的链接。
我们感谢你为保护作者权益提供的帮助,你的协助也保障了我们带给你更多有价值内容的能力。
提问
对本书有任何方面的疑问,都可以通过 questions@packtpub.com 练习我们,我们会尽力解决。
Kevin Jackson 已婚并有三个小孩。他是一名经验老道的IT 专业人士,为在线企业处理小型业务。他有各种Linux和Unix操作系统的丰富经验。他在英国绍斯波特的家中办公,专注于Rackspace 的OpenStack,负责Big Cloud Solutions团队的国际市场。他的twitter账号是@itarchitectkev。他还是本书第1版的作者。
我要将本书献给我的父母,他们度过了难熬的 6 个月。感谢我的太太Charlene在本书第2版的写作过程中一直支持我——写这本书的工作量超过了我的预期!同时,特别要感谢本书的另一位作者 Cody Bunch,他帮我让本书能一直这么成功,也感谢技术编辑们所做的大量工作。我还要感谢一些Rackspace和OpenStack社区的人,他们总能让事情朝正确的方向发展,他们是Florian Otel、Atul Jha、Niki Acosta、Scott Sanchez和Jim Curry,还有OpenStack基金会的各位——那些我在写作过程中有幸遇到的人们——特别是那些帮我解决了疑难问题的人,如Endre Karlson。
Cody Bunch是Rackspace主机业务的一名私有云架构师。他在IT行业有15年的经验,从事过 SaaS、VoI P、虚拟化等方面的工作,目前的工作是云计算系统。他是《Automating vSphere 5 with vCenter Orchestrator on VMware press》一书的作者。他同时是一个每周更新的OpenStack播客频道#vBrownBags的作者。他也经常在openstack.prov12n.com上发表博客,写一些与OpenStack相关的技巧。他的twitter账号是@cody_bunch。
首先,我想感谢我的太太,她在忍受我写第一本的时候对我说过“下不为例”。但当我告知她要写这本的时候,她报以微笑并继续做我最好的后盾。
我还要感谢 Kevin 给我提供写这一版的机会,尽管某种程度上来说是我逼他的。否则,我是无论如何不会学到如此多关于 OpenStack和开源的知识。
另外,我还要感谢我的雇主 Rackspace 为我提供所需的时间和工作上的灵活性,让我可以向社区交付本书。
最后,我还想感谢一下我的父母、教师和一些朋友,他们让本书出版成为可能。
Mike Dugan 过去14年里从事了多种IT 岗位,是一名技术经验丰富的IT 通才。目前,他在Converged Infrastructure 的CTO办公室担任首席技术专员,进行技术开拓。他目前的研究重点包括技术产品战略和有关私有/混合/公有云计算环境的管理、虚拟化、开源云平台以及下一代应用方面的创新工作。Mike过往的经历包括在一家全球领先的数据存储公司担任高级技术支持和首席工程师,他还在一家纽约财务公司做过技术基础设施管理员。
Mike 拥有佩斯大学(Pace University)信息系统学士学位。目前已婚并有两个儿子,住在纽约城的郊区。他还是当地 STEM(Science、Technology、Engineering、Math)联盟的积极会员,该联盟致力于帮助和促进本地社区和学校的STEM创意和实践。Mike很喜欢学习新技术以及直面新技术带来的挑战。他是纽约扬基队和巨人队的忠实球迷,爱和自己的两个儿子一起看球、打球并教他们球技。他还喜欢各类手工制造的啤酒。
Lauren Malhoit在IT 领域有超过10年的经验。她现在是数据中心虚拟化方面的售后工程师。她为TechRepublic 和TechRepublic Pro 供稿超过一年,同时还主持一个双周更新的名为AdaptingIT 的播客频道(http://www.adaptingit.com/)。她也作为代表参加了Tech Field Day活动。
我想要感谢我的妈妈Monica Malhoit,她一直是我的榜样,她供我上学并教给了我很多学校里学不到的东西。
Paul Richards在IT 领域有超过18年的经验,目前在World Wide Technology(WWT)领导OpenStack实践。作为WWT的解决方案架构师,Paul与很多用户一起设计和实施过云计算方案。在加入WWT之前,Paul在SunGard负责带领工程师团队。
他时不时会在他的博客eprich.com上发表技术文章,并主持OpenStack Philly讨论小组。Paul平时喜欢酿酒和烧烤。
Trevor RobertsJr.是VCE的一名高级组织架构师,他帮助客户成功实施虚拟化和云计算解决方案。Trevor平时喜欢在http://www.VMTrooper.com和Twitter账号@VMTrooper上分享关于数据中心技术的一些见解。
我想要感谢我的妻子 Ivonne,她支持我花如此多的时间在本书的实验工作上。
我还想感谢 OpenStack 社区让我分享他们的专业知识。学习一个新的平台不是一件容易的事情,但这些社区专家让这件事变得更简单。
Maish Saidel-Keesing是一名在以色列工作的系统架构师。他早在Commodore 64和ZX Spectrum上市的时候就开始捣鼓计算机。他有着15年的微软基础架构方面的IT经验,并有近7年的VMware 环境的工作经验。他参与撰写了《VMware vSphere Design》一书,并因为对虚拟化社区的贡献,在2010~2013 年里连续4 年被授予VMware vExpert头衔。他拥有VMware、Microsoft、IBM、RedHat和Novell等国际厂商的多项认证。
他同时还作为http://searchservervirtualization.techtarget.com的服务器虚拟化顾问理事会的成员,定期发表关于虚拟化产业的见解和贡献。他会在自己的博客 Technodrone (http://technodrone.blogspot.com)上定期撰写关于 VMware、架构、虚拟化、Windows、PowerShell、PowerCLI脚本及如何在物理世界中向虚拟化转变的文章。有空的时候,他喜欢去听听音乐,或和家人一起打发时间。不过总的说来,他花在计算机上的时间实在是太多了。
Sean Winn是一名在IT 行业有超过20 年经验的云计算架构师。她来自佛罗里达的劳德代尔,后来和家人移居加利福尼亚州的旧金山港湾区。Sean 是 OpenStack 基金会的活跃会员,她跟用户和操作者联系非常紧密,一同实施和运营基于 OpenStack 的云。Sean经常参加在森尼维耳的山景城和加利福尼亚州的旧金山的OpenStack(及其他各类)用户组会议。
Eric Wright是一名系统架构师,有着虚拟化、业务连续性、PowerShell脚本以及金融、医疗、工程企业等行业的系统自动化方面的技术背景。他不光是技术和虚拟化博客www.DiscoPosse.com 的作者,还是一家位于加拿大多伦多的社区推动的技术组织 VMUG的主要贡献者。可以通过www.twitter.com/DiscoPosse联系Eric。
Eric在不做技术的时候会弹弹吉他,参加当地的自行车比赛,或者攀爬Tough Mudder障碍路线。Eric 也会定期参加慈善自行车骑行和跑步活动,通过各种组织唤起人们对癌症研究的意识和筹措资金。
我想要感谢每一个人,请允许我对我的家庭、朋友和每一位激励我从事技术工作的人说一声谢谢。感谢这个迷人和受欢迎的技术社区,它让我能够分享我的知识,并让我从推进社区的这些智慧的头脑中学到很多。
本章将讲述以下内容:
□ 使用VirtualBox和Vagrant创建一个沙盒环境
□ 配置Ubuntu Cloud archive
□ 安装OpenStack身份认证服务
□ 创建租户
□ 配置角色
□ 添加用户
□ 定义服务端点
□ 配置服务对应的租户和用户
OpenStack身份认证服务(Identity Service),即Keystone,是为OpenStack云环境中的用户的账户和角色信息提供认证和管理服务的。这是一个关键的服务,OpenStack 云环境中所有服务之间的鉴权和认证都需要经过它,所以它也是OpenStack环境中第一个安装的服务。经OpenStack身份认证服务认证通过之后,它会返回一个在OpenStack各个服务之间传输用的鉴权密钥。接下来就可以用这个密钥来为某个具体服务做鉴权和验证,如OpenStack的存储和计算服务。因此,第一步就要配置OpenStack身份认证服务,并为用户创建合适的角色,以及服务、租户、用户账户和服务APIendpoints,这些服务构成了我们的云基础设施。
本章结尾将设置一个图1-1所示的环境。
用VirtualBox和Vagrant创建一个沙盒环境,来帮助我们探索和尝试OpenStack相关服务。VirtualBox使我们能够玩转虚拟机和网络,而不影响我们其他的工作环境,VirtualBox的 Windows、Mac OSX 和 Linux 版本可以免费从 http://www.virtualbox.org 下载。Vagrant可以帮助自动化管理这些任务,这就意味着可以少花时间创建测试环境,把时间多用在使用 OpenStack 上。Ubuntu 系统上可以直接安装 Vagrant 包,对于其他系统,请访问http://www.vagrantup.com/,这个测试环境还可以用于其他章节。
这里假设用来搭建测试环境的计算机具有足够强的处理能力,支持硬件虚拟化(如Intel VT-X 和 AMD-V技术)并且至少有8GB内存。时刻牢记,我们正在创建一个虚拟环境用来玩转虚拟机,所以机器的内存容量越大越好。
首先,必须从http://www.virtualbox.org/下载VirtualBox,然后按照安装步骤操作。
此外,还需要下载安装Vagrant,后面的章节将会详述。
本书所有操作都假设你安装OpenStack的底层操作系统是Ubuntu 12.04 LTS。但无须下载Ubuntu 12.04 ISO镜像,因为Vagrant会帮我们搞定。
为了使用 VirtualBox创建一个沙盒环境,我们将使用 Vagrant定义一个独立的虚拟机,使我们能够创建运行云实例所需的所有OpenStack服务。该虚拟机将用作OpenStack控制节点,它的配置至少需要2GB内存和20GB硬盘空间和三个网络接口。Vagrant自动设置虚拟机上的一个接口——NAT(Network Address Translate)接口,该接口允许虚拟机连接到 VirtualBox的外部网络下载软件包。这个 NAT接口没有在 Vagrantfile中涉及,但会显示为虚拟机的eth0。这里配置的第一个OpenStack环境使用的接口是我们OpenStack 计算节点的公共网络接口;第二个接口是私有网络接口,用作与不同的OpenStack Compute 主机之间进行内部通信用;第三个接口当在学习第 8 章 时会做为外部网络使用。
执行以下步骤,使用Vagrant创建运行OpenStack计算服务的虚拟机。
1.从http://www.virtualbox.org下载安装VirtualBox,如果使用Ubuntu 12.04 LTS 自带的版本将会遇到一些问题。
本书使用的是VirtualBox4.2.16。
2.从http://www.vagrantup.com下载安装Vagrant,如果使用Ubuntu 12.04 LTS自带的版本将会遇到一些问题。
本书使用的是Vagrant1.2.7。
3.安装之后,在Vagrantfile 文件中设置虚拟机和网络。为此,创建一个工作目录(如创建~/cookbook目录),在该目录下编辑Vagrantfile文件,命令如下:
medir~/cookbook
cd~/cookbook
vim Vagrantfile
4.编辑该文件配置Vagr ant如下:
#-*-mode:ruby-*-
# vi:set ft=ruby:
nodes={
'controller' => [1,200],
}
Vagrant.configure("2") do|config|
config.vm.box="precise64"
config.vm.box_url="http://files.vagrantup.com/precise64.box"
# Forescout NAC workaround
config.vm.usable_port_range=2800..2900
nodes.each do|prefix,(count,ip_start)|
count.times do|i|
hostname="%s" %[prefix,(i+1)]
config.vm.define "#{hostname}" do|box|
box.vm.hostname="#{hostname}.book"
box.vm.network:private_network,ip:
"172.16.0.#{ip_start+i}",:netmask=>"255.255.0.0"
box.vm.network:private_network,ip:
"10.10.0.#{ip_start+i}",:netmask=>"255.255.0.0"
box.vm.network:private_network,ip:
"192.168.100.#{ip_start+i}",:netmask=>"255.255.255.0"
# Otherwise using VirtualBox
box.vm.provider:virtualbox do|vbox|
# Defaults
vbox.customize["modifyvm",:id,"--memory",2048]
vbox.customize["modifyvm",:id,"--cpus",1]
end
end
end
end
end
5.现在可以准备启动控制节点了。只需执行:
vagrant up controller
祝贺你!你已成功创建了一个运行Ubuntu 12.04系统的VirtualBox虚拟机用来安装OpenStack控制服务。
我们通过Vagran 定义并创建了一个VIrtualBox 虚拟机。Vagrant 基于工作目录(存储和运行VirtualBox虚拟机的目录)下的Vagrantfile文件来配置该虚拟机。虽然文件是基于Ruby语法的,但是内容基本上都一目了然。具体设置如下。
□ 主机名为controller。
□ VM是基于Precise64,Ubuntu 12.04 LTS 64位系统的别名。
□ 指定了2GB RAM、1CPU 和一个外部磁盘挂在名为 controller-cinder.vdi的虚拟机上。
然后,通过Vagrant命令启动该虚拟机。
vagrant up
该命令将会启动Vagrantfile 配置好的虚拟机。这里只设置一个虚拟机,所以命令将会启动这台唯一的虚拟机。
执行以下命令,登录到新创建的虚拟机:
vagrant ssh controller
除了使用 Vagrant 和 VirtualBox 配置测试环境,还可以使用其他虚拟化产品来学习OpenStack,如VMware Server、VMware Player、VMware Fusion 等。
□ 参见第10 章。
Ubuntu21.04 LTS(本书使用的版本)提供两个可安装OpenStack的资源库。标准资源库所配置的是Essex版,本书写作时已可以通过设置Ubuntu Cloud Archive支持Grizzly版。我们下面将使用Ubuntu Cloud Archive 提供的Grizzly发布版本来安装和配置OpenStack 身份认证服务(以及其他服务)。
确保登录到安装OpenStack身份认证服务的服务器或用来安装OpenStack身份认证服务的OpenStack控制节点。
要配置Ubuntu12.04 LTS 使用Ubuntu Cloud Archive,需要执行以下步骤。
1.为了能够访问Ubuntu Cloud Archive资源库,添加以下列表到apt sources文件:
echo "deb http://ubutnu-cloud.archive.canonical.com/ubuntu\
echo\
"deb http://ubutnu-cloud.archive.canonical.com/ubuntu\
preceies-proposed/grizzly main "
|sudo tee/etc/apt/sources.list.d/grizzly.list
2.使用之前,还需要执行以下命令来添加Ubuntu Cloud Archive密钥:
sudo apt-get update
sudo apt-get-y install ubuntu-cloud-keyring
这里所做的是在系统中添加一个外部的资源库。它提供一个完全支持Ubuntu 12.0 LTS的并经测试过的OpenStack软件包。该软件包将被用来安装OpenStack。
更多关于Ubuntu Cloud Archive的信息可以从以下地址获取。https://wiki.ubuntu.com/ServerTeam/CloudArchive。该网站解释了发布过程和能够获取到的最新的OpenStack 版本,OpenStack 每六个月发布一个新版,Ubuntu长期支持版每两年才发布一个版本。
使用其他版本
如果希望使用稳定版本以外的分支,特别是需要开发调试 OpenStack 或所需要的功能不在当前版本中时,只需添加不同的 Personal Package Archives(PPA)到系统中。请到http://wiki.openstack.org/PPAs查看OpenStack PPAs。为了使用它们,首先需要安装一个工具来帮助添加PPAs。
sudo apt-get update
sudo apt-get-y install python-software-properties
要使用指定的PPA,例如Havana 测试分支,执行以下命令:
sudo add-apt-repository ppa:openstack-ubuntu-testing/havana-trunk-testing
sudo add-apt-repository ppa:openstack-ubuntu-testing/havana-trunk-testing
我们将会使用 Ubuntu Cloud Archive 安装和配置 OpenStack 身份认证服务,也就是Keystone项目。配置完成之后,连接到OpenStack云环境都需经过这里所安装的OpenStack身份认证服务。
OpenStack身份认证服务的默认后台数据库是MySQL数据库。
为保证运行的是Ubuntu Cloud Archive,必须配置Ubunut12.04安装使用该服务。
我们将配置Keystone使用MySQL作为数据库后端,因此,安装Keystone之前需要安装MySQL。如果MySQL尚未安装,请执行以下步骤安装配置MySQL:
MYSQL_ROOT_PASS=openstack
MYSQL_HOST=172.16.0.200
# To enable non-interactive installations of MySQL,set the following
echo "mysql-server-5.5 mysql-server/root_password password\
$MYSQL_ROOT_PASS"| sudo debconf-set-selections
echo "mysql-server-5.5 mysql-server/root_password_again password\
$MYSQL_ROOT_PASS"| sudo debconf-set-selections
echo "mysql-server-5.5 mysql-server/root_password seen true"\
| sudo debconf-set-selections
echo "mysql-server-5.5 mysql-server/root_password_again seen true"\
| sudo debconf-set-selections
export DEBIAN_FRONTEND=noninteractive
sudo apt-get update
sudo apt-get-q-y install mysql-server
sudo sed-i "s/^bind\-address.*/bind-address=${MYSQL_HOST}/g"\
/etc/mysql/my.cnf
sudo service mysql restart
mysqladmin-uroot password ${MYSQL_ROOT_PASS}
mysql-u root--password=${MYSQL_ROOT_PASS}-h localhost\
-e "GRANT ALL ON *.* to root@\"localhost\" IDENTIFIED BY\"${MYSQL_
ROOT_PASS}\" WITH GRANT OPTION;"
mysql-u root--password=${MYSQL_ROOT_PASS}-h localhost\
-e "GRANT ALL ON *.* to root@\"${MYSQL_HOST}\" IDENTIFIED BY
\"${MYSQL_ROOT_PASS}\" WITH GRANT OPTION;"
mysql-u root--password=${MYSQL_ROOT_PASS}-h localhost\
-e "GRANT ALL ON *.* to root@\"%\" IDENTIFIED BY\"${MYSQL_ROOT_
PASS}\" WITH GRANT OPTION;"
mysqladmin-uroot-p${MYSQL_ROOT_PASS} flush-privileges
接下来,请确保已经登录到 OpenStack 身份认证服务器或者需要安装 Keystone 的OpenStack控制节点上,并且确保该服务器可以被其他的OpenStack主机访问到。
执行以下命令,登录到使用Vagrant创建的OpenStack 控制节点:
vagrant ssh controller
要安装OpenStack身份认证服务,需要执行如下指令。
1.安装OpenStack身份认证服务可通过指定安装Ubuntu资源库里的 keystone软件包来完成。只需执行如下命令:
sudo apt-get update
sudo apt-get-y install keystone python-keyring
2.安装好之后,需要配置后台数据库存储。首先需要在MySQL里创建一个keystone数据库,按照如下步骤来执行(在本例中,假定MySQL的用户名是root,对应的密码是openstack,该用户有创建数据库的权限):
MYSQL_ROOT_PASS=openstack
mysql-uroot-p$MYSQL_ROOT_PASS-e "CREATE DATABASE\
keystone;"
3.一个最佳实践是在数据库中为OpenStack身份认证服务单独创建一个特定的用户。创建命令如下:
MYSQL_KEYSTONE_PASS=openstack
mysql-uroot-p$MYSQL_ROOT_PASS-e "GRANT ALL PRIVILEGES\
ON keystone.* TO 'keystone'@'%'"
mysql-uroot-p$MYSQL_ROOT_PASS-e "SET PASSWORD FOR\
'keystone'@'%'=PASSWORD('$MYSQL_KEYSTONE_PASS');"
4 .接下来,配置 OpenStack 身份认证服务来使用该数据库。编辑配置文件/etc/keystone/keystone.conf,修改 sql_connection行来匹配数据库证书。命令如下所示:
MYSQL_HOST=172.16.0.200
sudo sed-i "s#^connection.*#connection=\
mysql://keystone:openstack@172.16.0.200/keystone#"\
/etc/keystone/keystone.conf
5.超级用户 admin 的 token 在/etc/keystone/keystone.conf 文件中,需要配置该token。
sudo sed-i "s/^# admin_token.*/admin_token=ADMIN"\
/etc/keystone/keystone.conf
6.Grizzly版本发布后,Keystone支持PKI架构的token签名加密。如果不使用该功能,可编辑/etc/keystone/keystone.conf文件,使用非签名的token。
sudo sed-i "s/^#token_format.*/token_format=UUID"\
/etc/keystone/keystone.conf
7.现在重启keystone服务。
sudo stop keystone
sudo start keystone
8.Keystone启动之后,用如下命令为keystone数据库填充必需的数据表:
sudo keystone-manage db_sync
恭喜!现在已经为 OpenStack 环境安装好了 OpenStack 身份认证服务。
通过使用Ubuntu的包,可以便捷地为OpenStack环境安装好OpenStack身份认证服务。安装完成之后,在 MySQL 数据库服务器中配置了 keystone 数据库,并且设置了keystone.conf文件来使用它。启动Keystone服务之后,运行keystone-managedb_sync命令来为 keystone数据库填充合适的数据表,以方便向其中添加 OpenStack 环境中所必需的用户(user)、角色(role)和租户(tenant)。
一个租户(tenant)在OpenStack里就是一个项目。在创建一个用户时必须首先为该用户分配一个租户,否则将无法创建此用户,所以首先要创建租户。在这一节中,将为用户创建一个名为cookbook的租户。
在开始之前,必须确认已经登录到已经安装了OpenStack身份认证服务的OpenStack控制节点上,或者有一个已经连接到安装了OpenStack身份认证服务的服务器上的Ubuntu客户端。
执行以下命令,登录到使用Vagrant创建的OpenStack控制节点:
vagrant ssh controller
如果keystone客户端工具尚未安装,可以通过如下命令在Ubuntu客户端上安装以便管理OpenStack身份认证服务:
sudo apt-get update
sudo apt-get-y install python-keystoneclient
确保已经设置了正确的环境变量,以便能访问OpenStack环境。
export ENDPOINT=172.16.0.200
export SERVICE_TOKEN=ADMIN
export SERVICE_ENDPOINT=http://${ENDPOINT}:35357/v2.0
要在OpenStack环境中创建一个租户,需要执行如下步骤。
1.执行如下命令来创建一个名为cookbook的租户:
keystone tenant-create\
--name cookbook\
--description "Default Cookbook Tenant"\
--enabled true
输出如图1-2所示。
2.同样需要一个 admin 租户,该租户下的用户能够访问整个环境。因此,使用同样的方式:
keystone tenant-create\
--name admin\
--description "Admin Tenant"\
--enabled true
通过keystone客户端很容易创建租户,只需要指定tenant-create相关选项,语法如下所示:
keystone tenant-create\
--name tenant_name\
--description "A description"\
--enabled true
tenant_name 是一个不包含空格的任意字符串。创建租户时,keystone 会返回一个与租户相对应的ID,可以通过这个ID来将用户添加到这个租户里。如果想查看环境中所有租户和它们所对应的ID的列表,可以执行如下命令:
keystone tenant-list
角色是分配给一个租户中的用户的权限。在这里配置两个角色,一个用于管理云环境的admin角色和另一个用于分配给使用云环境的普通用户的Member角色。
在开始之前,必须确认已经登录到已经安装了 OpenStack 身份认证服务的 OpenStack控制节点上,或者有一个已经连接到安装了OpenStack身份认证服务的服务器上的Ubuntu客户端。
登录到使用Vagrant创建的OpenStack控制节点,执行以下命令:
vagrant ssh controller
如果keystone客户端工具尚未安装,可以通过如下命令在Ubuntu客户端上安装以便管理OpenStack身份认证服务:
sudo apt-get update
sudo apt-get-y install python-keystoneclient
确保已经设置了正确的环境变量,能访问到OpenStack环境。
export ENDPOINT=172.16.0.200
export SERVICE_TOKEN=ADMIN
export SERVICE_ENDPOINT=http://${ENDPOINT}:35357/v2.0
要在我们的OpenStack环境中创建必需的角色,需要执行如下步骤。
1.创建admin角色。
# admin role
keystone role-create--name admin
输出如图1-3所示。
2.用同样的命令来创建Member角色,只是把name选项指定为Member。
# Member role
keystone role-create--name Member
通过 keystone 客户端创建一个角色很容易实现,只需要在运行 keystone 时指定role-create选项,语法如下所示:
keystone role-create--name role_name
role_name 的属性值不是任意的。admin 角色已经在/etc/keystone/policy.json配置文件中被设置为具有管理员权限。
{
"admin_required":[["role:admin"],["is_admin:1"]]
}
并且,当配置OpenStack Dashboard(即Horizon)的时候,它会把Member角色配置成通过控制面板接口创建用户的默认角色。
创建角色时,keystone会返回一个与角色相对应的 ID,可以通过这个 ID 来把角色关联到某个用户。如果想查看环境中所有角色和它们所对应 ID 的列表,可以执行如下命令:
keystone role-list
在 OpenStack 身份认证服务中添加用户时,必须要有一个能容纳该用户的租户,还需要定义一个能分配给该用户的角色。在本节中,创建了两个用户。第一个用户名为admin,它在cookbook租户中被分配为admin角色。第二个用户名为demo,同样在cookbook租户中,它被分配为Member角色。
在开始之前,必须确认已经登录到已经安装了 OpenStack 身份认证服务的 OpenStack控制节点上,或者有一个已经连接到安装了OpenStack身份认证服务的服务器上的Ubuntu客户端。
执行以下命令,登录到使用Vagrant创建的OpenStack控制节点:
vagrant ssh controller
如果keystone客户端工具尚未安装,可以通过如下命令在Ubuntu客户端上安装以便管理我们的OpenStack身份认证服务:
sudo apt-get update
sudo apt-get-y install python-keystoneclient
确保已经设置了正确的环境变量,能访问到OpenStack环境。
export ENDPOINT=172.16.0.200
export SERVICE_TOKEN=ADMIN
export SERVICE_ENDPOINT=http://${ENDPOINT}:35357/v2.0
要在OpenStack环境中创建用户,需要执行如下步骤。
1.如果要在cookbook租户中创建一个用户,首先要获得cookbook租户的ID。通过keystone命令,指定tenant-list选项,就可以得到该ID,然后将其存储在TENANT_ID变量中,命令如下所示:
TENANT_ID=$(keystone tenant-list\
| awk '/\ cookbook\/{print $2}')
2.现在已经得到了租户的ID。接下来,用如下命令在cookbook租户中创建admin用户,注意要使用user-create选项,还需要为该用户设置密码:
PASSWORD=openstack
keystone user-create\
--name admin\
--tenant_id $TENANT_ID\
--pass $PASSWORD\
--email root@localhost\
--enabled true
输出如图1-4所示。
3.在创建admin用户时,为了赋予它admin角色,需要先获得admin角色的ID。和第一步中查找租户ID的方法相似,用role-list选项取出admin角色的ID,然后将其存储在一个变量里。
ROLE_ID=$(keystone role-list\
| awk '/\ admin\/{print $2}')
4.为了将角色赋予admin用户,需要用到创建admin用户时返回的用户ID。执行如下的keystone命令,通过usr-list选项列出所有的用户,从而得到admin用户的ID:
USER_ID=$(keystone user-list\
| awk '/\ admin\/{print $2}')
5.最后,根据租户ID、用户ID,以及对应的角色ID,通过user-role-add选项把角色赋予对应的用户。
keystone user-role-add\
--user $USER_ID\
--role $ROLE_ID\
--tenant_id $TENANT_ID
注意,成功执行该命令之后是没有输出的。
6.为了管理整个环境,admin用户也需要在 admin租户中。为此,需要获得 admin租户的ID并使用新租户的ID重复前面的步骤:
ADMIN_TENANT_ID=$(keystone tenant-list\
| awk '/\ admin\/{print $2}')
keystone user-role-add\
--user $USER_ID\
--role $ROLE_ID\
--tenant_id $ADMIN_TENANT_ID
7.接下来要在cookbook租户里创建一个demo用户,并赋予其Member角色,类似前5步,命令如下所示:
# Get the cookbook tenant ID
TENANT_ID=$(keystone tenant-list\
| awk '/\ cookbook\/{print $2}')
# Create the user
PASSWORD=openstack
keystone user-create\
--name demo\
--tenant_id $TENANT_ID\
--pass $PASSWORD\
--email demo@localhost\
--enabled true
# Get the Member role ID
ROLE_ID=$(keystone role-list\
| awk '/\ Member\/{print $2}')
# Get the demo user ID
USER_ID=$(keystone user-list\
| awk '/\ demo\/{print $2}')
# Assign the Member role to the demo user in cookbook
keystone user-role-add\
--user $USER_ID\
--role $ROLE_ID\
--tenant_id $TENANT_ID
在向OpenStack身份认证服务里添加用户之前,必需先创建该用户对应的租户和角色。创建好之后,需要取得它们的ID,通过身份认证服务的命令行客户端程序将其和对应的用户关联起来。要注意同一个用户可以同时是多个租户的成员,并且在不同的租户里可以被赋予不同的角色。
创建用户的命令选项是user-create,语法如下所示:
keystone user-create\
--name user_name\
--tenant_id TENANT_ID\
--pass password\
--email email_address\
--enabled true
user_name属性可以是任意名称,但不能包含空格。password属性是必需的,在之前的例子里,它们都被设为openstack。email_address属性也是必需的。
赋予一个用户某个角色的命令选项是user-role-add,语法如下所示:
keystone user-role-add\
--user USER_ID\
--role ROLE_ID\
--tenant_id TENANT_ID
这表示在赋予角色之前,必须先取得用户的ID、角色的ID及租户的ID。这些ID可以通过如下命令得到:
keystone tenant-list
keystone role-list
keystone user-list
云环境中的每一个服务都运行在一个特定的URL和端口上,也就是这些服务的端点地址。当一个客户端程序连到云环境中时,Keystone 身份认证服务负责向其返回云环境中的各个服务的端点地址,以便客户端程序使用这些服务。为启用该功能,必须先定义这些端点。在云环境中,可以定义多个区域,可以把不同的区域理解为不同的数据中心,它们各自有不同的URL和IP地址。在OpenStack身份认证服务里,还可以在每一个区域里定义分别定义URL端点。在这里,只有一个区域,标识为RegionOne。
在开始之前,必须确认已经登录到安装了OpenStack身份认证服务的OpenStack控制节点上,或者有一个已经连接到安装了OpenStack身份认证服务的服务器上的Ubuntu客户端。
登录到使用Vagrant创建的OpenStack控制节点,执行以下命令:
vagrant ssh controller
如果keystone客户端工具尚未安装,则可以通过如下命令在Ubuntu客户端上安装以便管理OpenStack身份认证服务:
sudo apt-get update
sudo apt-get-y install python-keystoneclient
确保已经设置了正确的环境变量,能访问到OpenStack环境。
export ENDPOINT=172.16.0.200
export SERVICE_TOKEN=ADMIN
export SERVICE_ENDPOINT=http://${ENDPOINT}:35357/v2.0
--publicurl $PUBLIC\
通过运行 keystone客户端命令在 OpenStack 身份认证服务中定义各个服务和服务端点,这些定义对应了云环境中运行的各个服务以及它们的URL。即使某些服务现在还没有在云环境中运行起来,也可以先在 OpenStack 身份认证服务中配置好,以便将来使用。通过如下步骤来在OpenStack环境中为各个服务定义端点。
1.现在来定义一些云环境中OpenStack身份认证服务需要知道的服务。
# OpenStack Compute Nova API Endpoint
keystone service-create\
--name nova\
--type compute\
--description 'OpenStack Compute Service'
# OpenStack Compute EC2 API Endpoint
keystone service-create\
--name ec2\
--type ec2\
--description 'EC2 Service'
# Glance Image Service Endpoint
keystone service-create\
--name glance\
--type image\
--description 'OpenStack Image Service'
# Keystone Identity Service Endpoint
keystone service-create\
--name keystone\
--type identity\
--description 'OpenStack Identity Service'
# Cinder Block Storage Endpoint
keystone service-create\
--name volume\
--type volume\
--description 'Volume Service'
2.逐个添加上述服务对应的服务端点。添加服务端点时需要用到各个服务的ID号,这些ID号在上一步命令操作之后会分别被返回输出。它们是配置服务端口URL的命令中的参数。
OpenStack身份认证服务可以被配置成在三个URL上接受服务请求:一个面向公有的 URL(被终端用户使用),一个面向管理员URL(被以管理员权限登录的用户使用,可以是一个不同的URL),以及一个面向内部的 URL(当这些服务是在公有的 URL 的防火墙内提供服务时)。
对于下面的服务,我们根据自己的环境需求将公有的和内部的服务URL配置成相同的内容。
# OpenStack Compute Nova API
NOVA_SERVICE_ID=$(keystone service-list\
| awk '/\ nova\/{print $2}')
PUBLIC="http://$ENDPOINT:8774/v2/\$(tenant_id)s"
ADMIN=$PUBLIC
INTERNAL=$PUBLIC
keystone endpoint-create\
--region RegionOne\
--service_id $NOVA_SERVICE_ID\
--publicurl $PUBLIC\
--adminurl $ADMIN\
--internalurl $INTERNAL
输出如图1-5所示。
3.继续定义服务端点的剩余部分,具体步骤如下:
# OpenStack Compute EC2 API
EC2_SERVICE_ID=$(keystone service-list\
| awk '/\ ec2\/{print $2}')
PUBLIC="http://$ENDPOINT:8773/services/Cloud"
ADMIN="http://$ENDPOINT:8773/services/Admin"
INTERNAL=$PUBLIC
keystone endpoint-create\
--region RegionOne\
--service_id $EC2_SERVICE_ID\
--publicurl $PUBLIC\
--adminurl $ADMIN\
--internalurl $INTERNAL
# Glance Image Service
GLANCE_SERVICE_ID=$(keystone service-list\
| awk '/\ glance\/{print $2}')
PUBLIC="http://$ENDPOINT:9292/v1"
ADMIN=$PUBLIC
INTERNAL=$PUBLIC
keystone endpoint-create\
--region RegionOne\
--service_id $GLANCE_SERVICE_ID\
--publicurl $PUBLIC\
--adminurl $ADMIN\
--internalurl $INTERNAL
# Keystone OpenStack Identity Service
KEYSTONE_SERVICE_ID=$(keystone service-list\
| awk '/\ keystone\/{print $2}')
PUBLIC="http://$ENDPOINT:5000/v2.0"
ADMIN="http://$ENDPOINT:35357/v2.0"
INTERNAL=$PUBLIC
keystone endpoint-create\
--region RegionOne\
--service_id $KEYSTONE_SERVER_ID\
--adminurl $ADMIN\
--internalurl $INTERNAL
# Cinder Block Storage Service
CINDER_SERVICE_ID=$(keystone service-list\
| awk '/\ volume\/{print $2}')
PUBLIC="http://$ENDPOINT:8776/v1/%(tenant_id)s"
ADMIN=$PUBLIC
INTERNAL=$PUBLIC
keystone endpoint-create\
--region RegionOne\
--service_id $CINDER_SERVER_ID\
--publicurl $PUBLIC\
--adminurl $ADMIN\
--internalurl $INTERNAL
在OpenStack身份认证服务中配置服务和端点是通过keystone客户端命令来完成的。首先通过keystone客户端的service-create选项来添加服务,语法如下所示:
keystone service-create\
--name service_name\
--type service_type\
--description 'description'
service_name 可以是任意的名字和标签用以标识服务的类型。在定义端点的时候,可以通过这个名字来取得它对应的ID号。
type选项可以是下列几个选项中的一个:compute、object-store、image-service和 identity-service。注意,在这一步没有配置 OpenStacke 的对象存储服务(type是object-store)或Cinder。
description字段同样是一个任意字段,用于描述该服务。
添加好各个服务之后,通过keystone客户端的endpoint-create选项来定义各个服务对应的端点。只有这样,OpenStack身份认证服务才能知道如何访问它们。语法如下所示:
keystone endpoint-create\
--region region_name\
--service_id service_id\
--publicurl public_url\
--adminurl admin_url\
--internalurl internal_url
service_id是在第一步里创建的服务的ID号。可以通过如下命令来列出所有服务和它们对应的ID号:
keystone service-list
OpenStack被设计为一个适合全球部署的系统,一个区域(region)可以表示一个实际的数据中心或者一个包含多个互相连通的数据中心的地域范围。在这里,仅定义一个区域——RegionOne。region字段可以是任意的名字,用于标识数据中心/地域,可以通过这个字段来告知客户端使用哪些区域。所有的服务都可以被配置成运行在三个不同 URL 之上,如下所述,这取决于人们希望如何来配置OpenStack云环境。
□ public_url是供终端用户连接的URL。在一个公有云环境中,公有的URL会被解析成公有的IP地址。
□ admin_url 只用于管理员访问。在公有部署中,通常会配置一个和 public_url不同的admin_url。有些模块的管理服务有不同的URI,这就需要配置这个属性。
□ internal_url只用与本地私有网络。通过internal_url,你可以从云环境内部连接到各个服务,而不需要外部地址空间,因此避免了交换数据的传输过程暴露在因特网上。这也带来了更好的安全性和更少的复杂性。
首先创建好初始化的keystone数据库,然后在OpenStack身份认证服务器上运行 keystone-manage db_sync 命令,最后就可以使用keystone客户端来实现远程管理了。
服务端点创建完成以后,接下来配置它们以便其他OpenStack服务能够调用它们。为此,要为每个服务都配置一个特定的 service 租户,并指定对应的用户名和密码。这样的目的是保证更高的安全性、以及用来为云环境做故障排除和审计等工作。对于每一个需要OpenStack身份认证服务来验证和授权的服务,都需要在该服务启动之前,在其相关的配置文件里详细写明用于Keystone验证的用户名和密码。例如,glance服务是在/etc/glance/glance-registry-api.ini文件中指定,当OpenStack身份认证服务使用时,必须与之前创建的相匹配。
[filter:authtoken]
paste.filter_factory=keystone.middleware.auth_token:filter_factory
service_protocol=http
service_host=172.16.0.200
service_port=5000
auth_host=172.16.0.200
auth_port=35357
auth_protocol=http
auth_uri=http://172.16.0.200:5000/
admin_tenant_name=service
admin_user=glance
admin_password=glance
在开始之前,必须确认已经登录到已经安装了 OpenStack 身份认证服务的 OpenStack控制节点上,或者有一个已经连接到安装了OpenStack身份认证服务的服务器上的Ubuntu客户端。
登录到使用Vagrant创建的OpenStack控制节点,执行以下命令:
vagrant ssh controller
如果keystone客户端工具尚未安装,则可以通过如下命令在Ubuntu客户端上安装以便管理OpenStack身份认证服务:
sudo apt-get update
sudo apt-get-y install python-keystoneclient
确保已经设置了正确的环境变量,能访问到OpenStack环境。
export ENDPOINT=172.16.0.200
export SERVICE_TOKEN=ADMIN
export SERVICE_ENDPOINT=http://${ENDPOINT}:35357/v2.0
要配置一个合适的服务租户,需要执行如下步骤。
1.创建服务租户,命令如下所示:
keystone tenant-create\
--name service\
--description "Service Tenant"\
--enabled true
输出如图1-6所示。
2.记录下服务租户的ID,以方便后面使用。
SERVICE_TENANT_ID=$(keystone tenant-list\
| awk '/\ service\/{print $2}')
3.对于本节中的所有服务,都会为其创建一个用户账户,用户名和密码都和服务名称一致。例如,会在服务租户里用user-create选项创建一个用户名和密码均为nova的用户,命令如下所示:
keystone user-create\
--name nova\
--pass nova\
--tenant_id $SERVICE_TENANT_ID\
--email nova@localhost\
--enabled true
输出如图1-7所示。
4.重复上一步,继续为其他用到OpenStack身份认证功能的服务创建用户。
keystone user-create\
--name glance
--pass glance\
--tenant_id $SERVICE_TENANT_ID\
--email glance@localhost\
--enabled true
keystone user-create\
--name keystone\
--pass keystone\
--tenant_id $SERVICE_TENANT_ID\
--email keystone@localhost\
--enabled true
keystone user-create\
--name cinder\
--pass cinder\
--tenant_id $SERVICE_TENANT_ID\
--email cinder@localhost\
--enabled true
5.现在为这些服务租户里的用户分配admin角色。为此,需要先取得nova用户的用户ID,然后在用 user-role-add选项来分配角色。例如,为了将admin角色分配给服务租户里的nova用户,命令如下所示:
# Get the nova user id
NOVA_USER_ID=$(keystone user-list\
| awk '/\ nova\/{print $2}')
# Get the admin role id
ADMIN_ROLE_ID=$(keystone role-list\
| awk '/\ admin\/{print $2}')
# Assign the nova user the admin role in service tenant
keystone user-role-add\
--user $NOVA_USER_ID\
--role $ADMIN_ROLE_ID\
--tenant_id $SERVICE_TENANT_ID
6.接下来,重复上一步,继续为其他服务租户(glance、keystone和cinder用户)分配角色。
# Get the glance user id
GLANCE_USER_ID=$(keystone user-list\
| awk '/\ glance\/{print $2}')
# Assign the glance user the admin role in service tenant
keystone user-role-add\
--user $GLANCE_USER_ID\
--role $ADMIN_ROLE_ID\
--tenant_id $SERVICE_TENANT_ID
# Get the keystone user id
KEYSTONE_USER_ID=$(keystone user-list\
| awk '/\ keystone\/{print $2}')
# Assign the keystone user the admin role in service tenant
keystone user-role-add\
--user $KEYSTONE_USER_ID\
--role $ADMIN_ROLE_ID\
--tenant_id $SERVICE_TENANT_ID
# Get the cinder user id
CINDER_USER_ID=$(keystone user-list\
| awk '/\ cinder\/{print $2}')
# Assign the cinder user the admin role in service tenant
keystone user-role-add\
--user $CINDER_USER_ID\
--role $ADMIN_ROLE_ID\
--tenant_id $SERVICE_TENANT_ID
创建服务租户,然后在其中添加 OpenStack 运行必需的各个服务的用户,这两步操作和在系统中添加需要admin角色的其他用户没什么不同。为每个拥有admin角色的用户分配用户名和密码,并确保它们存在于服务租户内。然后,使用这些凭证来配置服务OpenStack的身份认证服务。
本章将讲述以下内容:
□ 安装OpenStack镜像服务
□ 用MySQL配置OpenStack 镜像服务
□ 用OpenStack 身份认证服务配置OpenStack镜像服务
□ 用OpenStack 镜像服务管理镜像
□ 注册一个远程存储的镜像
□ 在租户间共享镜像
□ 查看共享镜像
OpenStack 镜像服务(Image Service),即 Glance,可以让用户在 OpenStack 环境中注册、查找和检索虚拟机用到的镜像文件,OpenStack 镜像服务支持将镜像文件存储在各种类型的存储环境,例如本地文件系统或 OpenStack 存储服务提供的分布式文件系统。
如果按照第1章的内容做完,那么当本章结束时,将设置好图2-1所示的环境。
Ubuntu 资源库提供了便利的软件包安装方式,所以,从Ubuntu Cloud Archive资源库安装专为Ubuntu 12.04版本打包好的OpenStack镜像服务很简单。
在开始之前,必须确认已经登录到已经安装了 OpenStack 身份认证服务的 OpenStack控制节点上,或者有一个已经连接到安装了OpenStack身份认证服务的服务器上的Ubuntu客户端。
登录到使用Vagrant创建的OpenStack控制节点,执行以下命令:
vagrant ssh controller
只有保证Ubuntu 12.04LTS 版本使用Ubuntu Cloud Archive,才能使用Grizzly。
使用apt安装OpenStack镜像服务很简单,使用下面的命令即可:
sudo apt-get update
sudo apt-get-y install glance
在其他使用 OpenStack 镜像服务的机器上安装管理和使用的客户端则不需要登录到服务器,只需要在客户机上输入如下命令:
sudo apt-get update
sudo apt-get-y install glance-client
Ubuntu Cloud Archive资源库有要用到的最新的OpenStack 镜像服务。
更多关于 Ubuntu Cloud Archive 的信息可以从以下地址获取。https://wiki.ubuntu.com/ServerTeam/CloudArchive。该网站解释了发布过程和能够获取到的最新的OpenStack版本, OpenStack每六个月发布一个新版,Ubuntu长期支持版每两年才发布一个版本。
使用其他版本
如果希望使用稳定版本以外的分支,特别是在开发调试 OpenStack 时或所需要的功能不在当前版本中时,只需添加不同的 Personal Package Archives(PPA)到系统中。查看OpenStack PPA,请到http://wiki.openstack.org/PPAs。为了使用它们,首先需要安装一个工具来帮助添加PPA。
sudo apt-get update
sudo apt-get-y install python-software-properties
为了使用指定的PPA,例如Havana测试分支,执行以下命令:
sudo add-apt-repository ppa:openstack-ubuntu-testing/havana-trunk-testing
sudo add-apt-repository ppa:openstack-ubuntu-testing/havana-trunk-testing
□ 参见第1章。
默认情况下,OpenStack镜像服务,即Glance,被配置使用本地SQL数据库存储。为了弹性扩展,必须配置一个中心的、可扩展且更具可靠的数据库层。因此,可使用MySQL数据库来达到这个目的。
请在开始前确认已经登录到一个已经安装了OpenStack镜像服务的服务器上。
登录到使用Vagrant创建的OpenStack控制节点,执行以下命令:
vagrant ssh controller
执行下列步骤。
1.安装OpenStack镜像服务后,可使用下面的方法创建MySQL数据库,命名为glance。
MYSQL_ROOT_PASSWORD=openstack
mysql-uroot-p$MYSQL_ROOT_PASSWORD\
-e 'CREATE DATABASE glance;'
2.接下来,创建一个对该数据库有权限的用户glance,其密码设置为openstack,方法如下:
MYSQL_GLANCE_PASSWORD=openstack
mysql-uroot-p$MYSQL_ROOT_PASSWORD\
-e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%'
IDENTIFIED BY '${MYSQL_GLANCE_PASSWORD}';"
mysql-uroot-p$MYSQL_ROOT_PASSWORD\
-e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost'
IDENTIFIED BY '${MYSQL_GLANCE_PASSWORD}';"
3 .然后,需要通过编辑 OpenStack 镜像服务的配置文件/etc/glance/glance-registry.conf和/etc/glance/glance-api.conf,修改其数据库名称及连接相关信息,使得OpenStack镜像服务能使用刚才创建的数据库。
sudo sed-i "s,^sql_connection.*,sql_connection=\
mysql://glance:${MYSQL_DB_PASSWORD}@172.16.0.200/glance,"\
/etc/glance/glance-{registry,api}.conf
4.用下面的方式重启glance-registry服务。
sudo stop glance-registry
sudo start glance-registry
5.同样重启glance-api服务。
sudo stop glance-api
sudo start glance-api
6.该glance数据库将通过Ubuntu 12.04升级或降级服务版本。首先设置版本为0,执行:
glance-manage version_control 0
7.同步数据库,确保插入正确的表结构。为此,使用以下命令:
sudo glance-manage db_sync
OpenStack镜像服务是由两个服务组成的,glance-api和 glance-registry服务,其中,glance-registry 服务连接到后端数据库,glance-registry 会根据我们先前设定的glance数据库和用户设置对数据库进行操作。
完成之后,可以通过修改/etc/glance/glance-registry.conf 和/etc/glance/glance-registry.conf 文件中相应的设置,让 glance知道从什么地址、用什么方式、连接哪个数据库。其配置遵循标准的SQLAlchemy链接,语法如下:
sql_connection=mysql://USER:PASSWORD@HOST/DBNAME
为了保证OpenStack 计算服务正确运行,必须对OpenStack 镜像服务(Image Service)作适当配置,以保证其能正常使用OpenStack身份认证服务。
在开始之前,必须确认已经登录到已经安装了 OpenStack 身份认证服务的 OpenStack控制节点上,或者有一个已经连接到安装了OpenStack镜像服务的服务器上的Ubuntu客户端。
执行以下命令,登录到使用Vagr ant创建的OpenStack控制节点:
vagrant ssh controller
要配置OpenStack镜像服务中与OpenStack身份认证服务连接有关的部分,具体步骤如下。
1.首先编辑/etc/glance/glance-api-paste.ini文件,修改其中[filter:authtoken]部分的配置,以匹配之前定义的glance用户。
[filter:authtoken]
paste.filter_factory=keystoneclient.middleware.auth_token:filter_
factory
admin_tenant_name=servcie
admin_user=glance
admin_password=glance
2.保存文件之后,在/etc/glance/glance-api.conf文件的末尾添加如下内容,告知OpenStack镜像服务如何使用OpenStack身份认证服务以及glance-api-paste.ini文件中保存的信息。
[keystone_authtoken]
auth_host=172.16.0.200
auth_port=35357
auth_protocol=http
admin_tenant_name=service
admin_user=glance
admin_password=glance
[paste_deploy]
config_file=/etc/glance/glance-api-paste.ini
flavor=keystone
3.同样,需要在/etc/glance/glance-registry-paste.ini文件中的[filter:authtoken]部分里配置glance用户。
[filter:authtoken]
paste.filter_factory=keystoneclient.middleware.auth_
token:filter_factory
admin_tenant_name=service
admin_user=glance
admin_password=glance
4.然后,在/etc/glance/glance-registry 配置文件中同样添加如下内容来使用OpenStack身份认证服务。
[keystone_authtoken]
auth_host=172.16.0.200
auth_port=35357
auth_protocol=http
admin_tenant_name=service
admin_user=glance
admin_password=glance
[paste_deploy]
config_file=/etc/glance/glance-registry-paste.ini
flavor=keystone
5.最后,重启OpenStack镜像服务来使更改生效。
sudo restart glance-api
sudo restart glance-registry
OpenStack镜像服务运行两个进程。其中,glance-api是客户端及其他服务与glance通信的接口,而glance-registry用于管理存储在硬盘和registry数据库中的对象。这两个进程都需要在它们的配置文件中设置好验证凭证,以方便 OpenStack 身份认证服务对其用户进行鉴权。
在OpenStack存储中上传和管理镜像都是通过glance命令行工具实现的,它提供了一系列OpenStack环境中上传、删除、修改存储镜像相关信息的命令,非常方便。
开始时,请确认登录到了可以运行glance工具的Ubuntu系统或者已经在OpenStack镜像服务直接运行在其上的 OpenStack 控制节点上。可以通过下面的方法安装 glance 客户端工具:
sudo apt-get update
sudo apt-get-y install glance-client
为了保证环境变量设置正确,admin 用户和密码应和之前创建的保持一致,执行以下操作:
export OS_TENANT_NAME=cookbook
export OS_USERNAME=admin
export OS_PASSWORD=openstack
export OS_AUTH_URL=http://172.16.0.1:5000/v2.0/
export OS_NO_CACHE=1
可以有多种方式上传和查看 OpenStack 镜像服务中的镜像文件,本书中将介绍其中一种。按照下面的步骤上传镜像文件和查看上传镜像的详细信息。
上传Ubuntu镜像文件
Ubuntu提供的镜像可以方便地添加到OpenStack环境之中。
1.首先,从http://uec-images.ubuntu.com上下载Ubuntu 云系统镜像。
wget http://uec-images.ubuntu.com/precise/current/precise-server-cloudimg-amd64-disk1.img
2.然后上传这个文件:
glance image-create\
--name='Ubuntu 12.04 x86_64 Server'\
--disk-format=qcow2\
--container-format=bare\
--public <precise-server-cloudimg-amd64-disk1.img
输出如图2-2所示。
列出镜像文件
要列出OpenStack镜像服务资源库中的镜像文件,可以直接使用glance客户端来询问镜像服务或使用nova客户端来管理OpenStack环境,这将在第3章中详细介绍。
要列出用户可用的镜像,需要使用下面的命令:
glance image-list
可得到类似图2-3所示的结果。
查看镜像文件详细信息
需要查看资源库中更详细的镜像信息时,可以通过下面的命令获得:
glance image-show IMAGE_ID
例如:
glance image-show 794dca52-5fcd-4216-ac8e-7655cdc88852
它将返回一个关于相关镜像文件的详细列表。
删除镜像文件
在一个 OpenStack 云计算环境中,将会有很多情况下需要删除已经有的镜像文件。可以通过下面的方式删除私有或公共的镜像文件。
1.使用如下命令删除镜像文件:
glance image-delete IMAGE_ID
例如:
glance image-delete 794dca52-5fcd-4216-ac8e-7655cdc88852
2.当成功执行删除镜像后,OpenStack Image 不会产生输出。可以通过执行 glance image-list验证结果。
将私有镜像文件设为公开镜像文件
当上传镜像文件时,这些镜像文件将只有上传者才拥有权限,即私有镜像文件。如果使用上述方式上传了镜像文件,但又希望它可以给其他用户使用时,在OpenStack环境下,可以使用下面的方法将其设为公开。
1.首先,查看镜像文件确认哪一个需要公开。在本书的例子中,选择了最初上传的镜像。
glance image-show IMAGE_ID
例如:
glance image-show 2e696cf4-5167-4908-a769-356a51dc5728
这个命令会得到类似图2-4所示的反馈信息。
2.这时,可以将其设为公开镜像,使本环境内所有用户均可以使用这个镜像文件。
glance image-update 2e696cf4-5167-4908-a769-356a51dc5728\
--is-public True
3.使用glance查看详细信息。
glance image-show 2e696cf4-5167-4908-a769-356a51dc5728
输出如图2-5所示。
从私有云环境来看,OpenStack镜像服务是一个非常灵活的镜像管理系统,它允许用户进行多种镜像管理方式,从添加新镜像,删除镜像,到更新信息,比如文件的命名方式,它让用户很方便的能识别这些镜像文件,还能将私有镜像转换为共有镜像。当然,还可以将共有镜像转换为私有镜像。
要做到这一切,只需要使用 glance 工具。为了使用 glance 工具,需要查看源头的OpenStack身份认证服务的认证信息。
OpenStack 镜像服务提供了一种机制,它可以远程添加一个存储在外部位置的镜像文件,利用这种机制,可以很方便地实现在私有云中使用第三方服务器中上传的镜像文件。
要做这个实验,应确认已经登录到一台Ubuntu 客户机,且已经具有glance工具。如果没有该工具,可通过以下方法安装:
sudo apt-get update
sudo apt-get-y install glance-client
为了保证环境变量设置正确,admin 用户和密码应和之前创建的保持一致。执行以下操作:
export OS_TENANT_NAME=cookbook
export OS_USERNAME=admin
export OS_PASSWORD=openstack
export OS_AUTH_URL=http://172.16.0.200:5000/v2.0/
export OS_NO_CACHE=1
参照下列步骤远程存储镜像文件到OpenStack镜像服务中。
1.为了注册一个远程虚拟镜像,这里使用了location参数指定镜像文件的位置,而不是之前通过管道的方式指定镜像文件。
glance image-create\
--name='Ubuntu 12.04 x86_64 Server'\
--disk-format=qcow2\
--container-format=bare\
--public\
--location http://webserver/precise-server-cloudimg-amd64-disk1.img
2.该命令返回类似于图2-6所示的信息,与本地存储不同的是location部分。
用glance工具将远程镜像文件添加到这个OpenStack镜像服务资源库中,非常便捷和快速。这个方法得以实现主要是 localtion参数的灵活性,在设定参数中其他元数据的同时,用指定本地镜像文件一样的方法,通过设置location参数就可以指定远程镜像文件。
当一个镜像是私有的时候,租户中只有上传者才能访问该镜像。OpenStack镜像服务提供了一种机制,可以让私有镜像在不同的租户之间共享。这需要对镜像有灵活的控制权限,才能够限制不同租户的访问权限。
要做这个实验,应确认已经登录到一台Ubuntu 客户机,且已经具有glance工具。如果没有该工具,可通过以下方法安装:
sudo apt-get update
sudo apt-get-y install glance-client
为了保证环境变量设置正确,admin 用户和密码应和之前创建的保持一致。执行以下操作:
export OS_TENANT_NAME=cookbook
export OS_USERNAME=admin
export OS_PASSWORD=openstack
export OS_AUTH_URL=http://172.16.0.1:5000/v2.0/
export OS_NO_CACHE=1
要共享cookbook租户中的私有镜像文件给其他租户,执行下列步骤。
1.首先需要获取租户ID,才能够访问镜像。
keystone tenant-list
2.然后列出镜像。
glance image-list
3.如果有一个demo租户,其ID为04a1f9957fcb49229ccbc5af55ac9f76,有一个镜像,其ID为2e696cf4-5167-4908-a769-356a51dc572,可以通过以下命令共享该镜像。
glance member-create\
2e696cf4-5167-4908-a769-356a51dc5728\
04a1f9957fcb49229ccbc5af55ac9f76
glance命令中的member-create选项可以用来与其他租户共享镜像,语法如下:
glance[--can-share] member-create image-id tenant-id
该命令有一个可选参数--can-share,可以指定哪个租户可以共享该镜像。
当使用 member-create 选项时,可以查看为某个租户共享了哪些镜像,允许在OpenStack环境中管理和控制哪些用户可以访问什么类型的镜像。
要做这个实验,应确认已经登录到一台Ubuntu客户机,且已经具有glance工具。如果没有该工具,可通过以下方法安装:
sudo apt-get update
sudo apt-get-y install glance-client
为了保证环境变量设置正确,admin 用户和密码应和之前创建的保持一致。执行以下操作:
export OS_TENANT_NAME=cookbook
export OS_USERNAME=admin
export OS_PASSWORD=openstack
export OS_AUTH_URL=http://172.16.0.1:5000/v2.0/
export OS_NO_CACHE=1
要查看共享给某个租户镜像,执行以下步骤。
1.首先需要获取租户ID,才能够访问镜像。
keystone tenant-list
2.然后列出已经与租户共享的镜像。
glance member-list –-tenant-id\
04a1f9957fcb49229ccbc5af55ac9f76
3.输出如图2-7所示。
glance命令中的 member-list选项可以用来查看哪些镜像被共享给其他租户,语法如下:
glance member-list--image-id IMAGE_ID
glance member-list –-tenant-id TENANT_ID
图书在版编目(CIP)数据
OpenStack云计算实战手册:第2版/(英)杰克逊(Jackson,K),(美)邦奇(Bunch,C)著;黄凯,杜玉杰译.--北京:人民邮电出版社,2014.11
书名原文:OpenStack cloud computing cookbook,second edition
ISBN 978-7-115-36654-2
Ⅰ.①O… Ⅱ.①杰…②邦…③黄…④杜… Ⅲ.①计算机网络—手册 Ⅳ.①TP393-62
中国版本图书馆CIP数据核字(2014)第236994号
版权声明
Copyright ©2013 Packt Publishing First published in the English language under the title OpenStack Cloud Computing Cookbook,Second Edition.
All Rights Reserved.
本书由英国Packt Publishing公司授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。
版权所有,侵权必究。
◆著 [英]Kevin Jackson [美]Cody Bunch
译 黄凯 杜玉杰
责任编辑 杨海玲
责任印制 彭志环
◆人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
北京艺辉印刷有限公司印刷
◆开本:800×1000 1/16
印张:20.25
字数:389千字 2014年11月第1版
印数:1-3500册 2014年11月北京第1次印刷
著作权合同登记号 图字:01-2013-9041号
定价:59.00元
读者服务热线:(010)81055410 印装质量热线:(010)81055316
反盗版热线:(010)81055315