在介绍OpenStack体系结构之前,需要先了解一下OpenStack的设计原则。
·可扩展性和伸缩性是设计OpenStack的主要目标。
·任何影响可扩展性和伸缩性的特性必须是可选的。
·一切应该是异步的(如果做不到异步,可参考第2条)。
·所有必需的组件必须可水平扩展。
·始终使用无共享架构或者分片架构(如果不能实现,可参考第2条)。
·一切都是分布式的(尤其应该将业务逻辑与业务状态放在一起)。
·接收最终一致性,并在适当条件下使用。
·测试一切(我们需要测试已经提交的代码,如果用户需要,我们将会帮助用户测试)。
OpenStack是由一系列具有RESTful接口的Web服务实现的,是一系列组件服务的集合。如图1-6所示是一个标准的OpenStack架构。这是比较典型的架构,但不代表这是OpenStack的唯一架构,我们可以选取自己需要的组件项目,来搭建适合自己的云计算平台。
图1-6 OpenStack架构
OpenStack项目并不是单一的服务,其含有子组件,子组件内由模块来实现各自的功能。通过消息队列和数据库,各个组件可以相互调用,互相通信。这样的消息传递方式解耦了组件、项目间的依赖关系,所以才能灵活地满足用户实际环境的需要,组合出适合用户的架构。每个项目都有各自的特性,大而全的架构并非适合每一个用户,如Glance在最早的A、B版本中并没有实际出现应用,Nova可以脱离镜像服务独立运行。当用户的云计算规模大到需要管理多种镜像时,才需要像Glance这样的组件。OpenStack的成长是在生产环境中不断被检验,然后再将需求反馈给社区,由社区来实现的一个过程。可以说,OpenStack并非脱离实际的理想化开源社区项目,而是与生产实际紧密结合的,是可以复制应用的云计算方案。
OpenStack覆盖了网络、虚拟化、操作系统、服务器等各个方面。它是一个正在开发中的云计算平台项目,根据成熟及重要程度的不同,它被分解成核心项目、孵化项目,以及支持项目和相关项目。每个项目都有自己的委员会和项目技术主管,而且每个项目都不是一成不变的,孵化项目可以根据发展的成熟度和重要性转变为核心项目。下面列出了十几个核心项目(即OpenStack服务)截止到K版本。
(1)计算(Compute):Nova
一套控制器,用于为单个用户或使用群组管理虚拟机实例的整个生命周期,根据用户需求来提供虚拟服务。负责虚拟机的创建、开机、关机、挂起、暂停、调整、迁移、重启、销毁等操作,配置CPU、内存等信息规格。在K版本中,Nova做了以下优化:
1)标准化了conductor、compute与scheduler的接口,为之后的接口分离做好准备,对于部分直接访问Nova数据库的滤波器进行了优化,不再允许直接访问。
2)对scheduler做了一些优化,如scheduler对于每一个请求都会重新进行filter/weigher,为了优化这个问题,将filter/weighter的初始化从handler移到scheduler,这样,每次请求的时候都可以重新使用了。
3)更好地支持NFV功能,在NUMA(Non Uniform Memory Architecture)架构下,每个处理器都会访问“本地”的内存池,从而在CPU和存储之间有更小的延迟和更大的带宽。支持基于NUMA的调度的实现,可以将vCPU绑定在物理CPU上;并支持超大页。
4)用stackforge的EC1-API转换服务替代EC1-API的功能。
(2)对象存储(Object Storage):Swift
一套用于在大规模可扩展系统中通过内置冗余及高容错机制实现对象存储的系统,允许进行存储或者检索文件。可为Glance提供镜像存储,为Cinder提供卷备份服务。纠删码的加入应该是K版本中Swift最大的亮点,但是纠删码作为beta版本发布,并不推荐应用于生产环境。
(3)镜像服务(Image Service):Glance
一套虚拟机镜像查找及检索系统,支持多种虚拟机镜像格式(AKI、AMI、ARI、ISO、QCOW2、Raw、VDI、VHD、VMDK),有创建镜像、上传镜像、删除镜像、编辑镜像基本信息的功能。在K版本中,Glance开始提供自动进行镜像格式转化功能,例如,Ceph是使用RAW格式的,假如我们上传的是QCOW2,创建虚拟机时,就会经历一番上传下载的过程,速度异常缓慢。而且RAW格式通常都是原始大小,上传速度非常慢,完全可以通过上传小镜像将其自动转换为指定格式。
(4)身份服务(Identity Service):Keystone
为OpenStack其他服务提供身份认证、服务规则和服务令牌的功能,管理命令、项目、用户、组、角色。从J版本开始,Keystone增加了一个Keystone federation特性,有了这个特性,两个或者更多的云服务提供者就可以共享资源。在K版本中主要针对该功能进行了增强。
(5)网络管理(Network):Neutron
提供云计算的网络虚拟化技术,为OpenStack其他服务提供网络连接服务。为用户提供接口,可以定义网络、子网、路由器,配置DHCP、DNS、负载均衡、L3服务,网络支持GRE、VLAN。插件架构支持许多主流的网络厂家和技术,如OpenvSwitch。在K版本中,DVR支持OVS中的VLAN功能,新的V2版本的LBaas的API,同时支持一些高级服务(如L3、ML2、VPNaaS、LBaaS)的分离。
(6)块存储(Block Storage):Cinder
为运行实例提供稳定的数据块存储服务,它的插件驱动架构有利于块设备的创建和管理,如创建卷、删除卷,在实例上挂载和卸载卷。K版本中Cinder实现了服务逻辑代码与数据库结构之间的解耦,支持Rolling更新。在K版本中增加了一致性组(一致性组是指具备公共操作的卷,在逻辑上划为一组)的功能:可以添加、删除卷,从已经存在的快照创建新的组。
(7)UI界面(Dashboard):Horizon
Horizon OpenStack中各种服务的Web管理门户,用于简化用户对服务的操作,例如:启动实例、分配IP地址、配置访问控制等。Horizon在K版本中除了增强了对新增模块的支持,也从UE的角度带来了很多新功能,其中支持向导式的创建虚拟机,现在还处于beta版本,如果想在Horizon里激活,可以通过设置local_setting.py的配置实现;支持简单的主题,可通过修改_variables.scss和_style.scss完成对主题颜色和简单样式的修改,但是格局不能改变。
(8)测量(Metering):Ceilometer
它像一个漏斗一样,把OpenStack内部发生的几乎所有的事件都收集起来,然后为计费和监控以及其他服务提供数据支撑。在K版本中,Ceilometer支持Ceph对象存储监控,当对象存储为Ceph而不是Swfit的时候,使用Polling机制,使用Ceph的Rados Gateway的API接口获取数据。同时在K版本中支持更多的测量功能,包括Hyper-V、IPMI相关的。
(9)部署编排(Orchestration):Heat
提供了一种通过模板定义的协同部署方式,实现云基础设施软件运行环境(计算、存储和网络资源)的自动化部署。自Havana版本集成到项目中后,在K版本中变化较少。
(10)数据库服务(Database Service):Trove
为用户在OpenStack的环境提供可扩展和可靠的关系和非关系数据库引擎服务。自Icehouse版本集成到项目中后,在K版本中变化较少。
(11)大数据服务BDaaS(BigData-as-a-Service):Sahara
Sahara最初的基本定位是基于OpenStack提供简单的Hadoop集群创建方式,不过随着项目的不断演进,Sahara所涵盖的范畴也有所扩大。从服务层次的维度看,Sahara已经开始从利用OpenStack的IaaS能力,提供简单的大数据工具集群创建和管理服务,扩展到提供分析即服务(Analytic-as-a-Service)层面的大数据业务应用能力。从承载的业务类型维度看,Sahara也很有可能会迅速突破单一的Hadoop工具范畴,拓展支持其他新兴的大数据工具。
(12)裸机管理:Ironic
OpenStack在虚拟化管理部分已经很成熟了,通过Nova可以创建虚拟机、虚拟磁盘,管理电源状态,快速通过镜像启动虚拟机。但是在裸机(物理机)的管理上一直没有成熟的解决方案。在这样的背景下Ironic诞生了,它可以解决物理机的添加、删除,以及电源管理和安装部署。Ironic最大的好处是提供了插件的机制,让厂商可以开发自己的驱动器,这让它支持几乎所有的硬件。在K版本中,Ironic完成了大量的优化工作:iLO的优化;使用Config Drive替代Metadata服务;全盘镜像支持,可以跳过raddisk和kernel,这样就可以部署Windows的镜像了;使用本地盘启动替代PXE方式,可以通过设置Flavor的capabilities:boot_option实现。