OpenStack 是当今最具影响力的云计算管理工具——通过命令或者基于 Web 的可视化控制面板来管理 IaaS 云端的资源池(服务器、存储和网络)。它最先由美国国家航空航天局(NASA)和 Rackspace 在 2010 年合作研发,现在参与的人员和组织汇集了来自 100 多个国家的超过 9500 名的个人和 850 多个世界上赫赫有名的企业,如 NASA、谷歌、惠普、Intel、IBM、微软等。 OpenStack 系统或其演变版本目前被广泛应用在各行各业,包括自建私有云、公共云、租赁私有云及公私混合云,用户包括思科、贝宝(Paypal)、英特尔、IBM、99Cloud、希捷等,具体名请参考网站 http://www./user-stories。 OpenStack 支持 KVM、Xen、Lvc、Docker 等虚拟机软件或容器,默认为 KVM。通过安装驱动,也支持 Hyper-V 和 VMware ESXi,不过有些功能暂时不支持,具体的虚拟机管理器支持矩阵参见网站 http://docs./developer/nova/support-matrix.html。 OpenStack 采用 Python 语言开发,遵循 Apache 开源协议,因此相比 CloudStack 来说,更轻量化,效率更高。 OpenStack 每半年发行一个新版本,截至发稿前最新版本是第十四版本 Newton,不同于其他软件的版本号采用数字编码,OpenStack 采用一个单词来描述不同的版本,其中单词首字母指明版本的新旧。比如目前的版本 Newton 就比之前的 Mitaka 要新,同时“N”在 26 个字母中排行第十四,所以称第十四版本。各个版本的发行时间表参考网站 https://releases./。 围绕 OpenStack 发展起来的企业很多,为客户提供 OpenStack 实施、培训、运维、定制等业务,之前企业总是或多或少地加入自己的一些封闭技术,从而导致 OpenStack 的互操作性受损。为此,2015 年 OpenStack 基金会在温哥华峰会上正式推出互操作性认证,通过认证的产品被贴上“OpenStack Powered”标识。 虽然第一批只有 14 家厂商经过认证测试,但这却是一个重要的里程碑事件,基金会已经拿出足够的诚意来解决问题,并且众多厂商也开始真正跟进。对用户而言,选择经过认证的云服务提供商,能够实现在不同 OpenStack 云计算之间的自由迁移。 OpenStack 生态系统已从“孵化/集成”模式转移到“大帐篷”模式,在此模式下,既保持了对规模较小的核心项目的关注,也积极鼓励在更广泛的主流生态环境中的自由创新,而以前的“孵化/集成”模式只是把孵化成功的项目集成到主流生态中。 “大帐篷”模式把 OpenStack 的组件进行分类,目前包括 6 个核心组件(Nova、Neutron、Swift、Cinder、Keystone、Glance)和 14 个可选组件,每个组件包含若干个服务,后续版本中组件分类及数量都可能会发生变化,如图 1 所示。 ![]() 图 1 “大帐篷”模式下的组件 表 1 列出了 Newton 版本中各个组件的功能介绍。
各个组件的关系图如图 2 所示。
![]() 图 2 OpenStack 组件关系图 OpenStack 的组件众多,根据云端的实施过程,再结合图 2,我们来梳理一下各个组件的作用:云端要运行很多虚拟机,所以需要在很多服务器中安装并运行虚拟机软件(如 KVM、Xen 等),有的客户为了安全起见,愿意出高价直接租赁物理机(裸金属机器),所以要用 Ironic 组件来池化物理机,以便用户能远程使用。 这些运行了虚拟机软件的服务器和被池化的物理机统称为计算节点。为了让 Horizon 组件以可视化的 Web 页面来统一操纵计算节点上的虚拟机,需要在计算节点上安装 Nova 组件,Nova 组件还与其他组件打交道。为了让一台虚拟机能在集群内的任一计算节点上快速漂移,虚拟机对应的镜像文件必须存放在共享场所,到底存放在哪里,由 Glance 组件指定。 例如在图 4 中,由 Glance 指定存放在 Swift 组件内,在实际的实施案例中,也可以存放在 Ceph 中。虚拟机之间需要联网,由 Neutron 组件负责。虚拟机里面可能还要使用块设备(如硬盘),这需要 Cinder 组件的配合;虚拟机里可能需要用到共享文件服务,由 Manila 组件提供服务。 云端的计算节点很多(如 1000 台),所以虚拟机就更多(如 10 万台),如果要给它们统一安装一个软件或配置某项参数,那么是不是需要手工一台一台操作呢?显然,手工操作费时费力,而且容易出错,有了 Heat 组件,我们就可以轻松完成这个任务。 OpenStack 的各个组件都是对外暴露 REST API 接口,以便于其他程序调用,调用时都要进行身份验证和权限管理,这由 Keystone 组件完成。跟踪用户消耗的资源并计费的任务由 Ceilometer 组件完成(需要 Aodh 和 CloudKitty 组件的配合)。 对于 OpenStack 管理的 IaaS 云服务,有人想在上面部署 Hadoop 大数据分析系统怎么办?这时 Sahala 组件可以帮上忙。各组件之间需要通过消息互相联络,所以 Zaqar 和 RabbitMQ 就派上用场了。另外,很多组件需要在数据库中保存配置数据,所以需要用到数据库管理系统(如 MySQL)。 OpenStack 组件的主要作用是充当“中间人”,它不履行具体的实际任务,而由各种第三方软件来完成,比如虚拟机软件由 KVM 承担,网站任务由 Apache 承担,虚拟网络任务由 iptables、DNSmasq、Linux vSwitch、Linux 网桥承担或者统一由 OpenContrail 承担,结构化数据存储任务由 MySQL 或者 PostgreSQL 承担,中央存储任务由 Ceph 承担(也可采用其他产品)。当然,OpenStack 中也有实现具体功能的组件,比如 Swift 做中央存储,我们也可以选择相对发展多年并且被大量使用的第三方产品,如 Ceph。 一个云端往往包含成千上万台服务器,而且还可能分布在世界各地,分别服务符合延时半径范围内的用户。OpenStack 中的“地区”(Region)就是对应地理位置不同的分中心,如中国北京、美国纽约、英国等。 在同一个 Region,还可能包含成千上万台机器,如果用一套 OpenStack 中的组件来管理,势必会导致这些组件本身成为瓶颈(随着集群规模的不断增大,消息系统和数据库系统很可能最先成为瓶颈),所以人们又引入了 Cell 功能,以便增强 OpenStack 集群的扩展性,即把一个 Region 划分成多个 Cell,这些 Cell 组成树形结构,父 Cell 主要用于服务通信,它不包含计算节点,子 Cell 具有自己的消息队列、数据库和 Noval-cell 服务。 Nova cell 在 OpenStack 的 Newton 版本中将成为默认项,之前的版本是可选项。在创建虚拟机时,为了规定它能在哪些计算节点集上运行,人们又提出了两个概念,即“可用域”(Availability Zones,AZ)和“主机集”(Host Aggregates,HA),前者可以看成后者的一个特例。 “主机集”其实就是根据计算节点的某些属性对计算节点进行逻辑分组的方法,比如可以分成如下几个“主机集”:万兆网卡的机器、拥有两路 CPU 的机器、惠普机器、自组装的机器、A 机柜里的机器、由 UPS 供电的机器等。然后我们创建一台虚拟机,指明在上海云端分部的惠普机器上运行,这样只要全部的惠普机器不同时坏,那么虚拟机就能一直正常运行(但每一时刻只能在一台机器上运行,只有当运行的那台机器出故障时,才会“漂移”到其他惠普机器上继续运行)。 “可用域”是用户可见的,用户把自己的多个虚拟机分散到不同的“可用域”中,是为了降低所有虚拟机同时不可用的概率,而“主机集”是管理员可见的,目的是用来隔离虚拟机,从而降低一些特定虚拟机的运行行为对其他虚拟机产生的影响。Region、Cell(第 2 版本)、AZ、HA 的关系如图 5 所示。 从图 3 中可以看出,多个 Region 允许共享 Keystone 和 Horizon 服务,也可以完全独立。HA 可以跨 Cell,但是不能跨越 Region,一台机器可以同时属于多个 HA,因为 AZ 是 HA 的特例,所以一台机器允许同时属于 AZ 和 HA。当一个创建虚拟机的请求到达父 Cell 的 Nova-API 时,父 Cell 会通过 Nova-cell 向各个子孙 Nova-cell 广播请求,并一次性决定在哪个子孙 Cell 中的哪台计算节点上创建虚拟机。 ![]() 图 3 Region、Cell(第2版本)、AZ、HA 的关系 在具体部署 OpenStack 时应该遵循“逐步扩展部署法”,如图 7 所示。 ![]() 图 7 OpenStack 逐步扩展部署法 最小系统具备基本的 IaaS 功能,能通过命令来进行管理,这一步只需安装 OpenStack 的 Keystone、Neutron、Nova 和 Glance 四个组件;此后再安装 Horizon 就成了小系统,这时可通过 Web 图形化界面来执行管理;继续安装 Swift 和 Cinder 就成了准系统,这时能给虚拟机附加磁盘块设备,并能满足大规模的存储需求;再加上计费组件 Ceilometer,就上升为一般系统,一般系统具备公有 IaaS 的功能。但是由一般系统跨到生产系统,需要完成的工作就特别多,其中性能和安全是两个不得不面对的棘手问题。 图 6 中标注的 Iptables(设立门卫)、Selinux 或 Apparmor(加固系统)和 Snort(巡逻)都是为了强化安全。性能和安全涉及的知识太多,这里不再展开讨论。图 7 取自网上,主要考量了安全当中的可用性,供大家参考。 |
|
来自: 南庄小筑 > 《OpenStack》