OpenStack是美国云计算厂商Rackspace和美国国家航空航天局(NASA)在2010年共同发起的。当时,Rackspace作为美国第二大云计算厂商,其规模只有亚马逊的5%,其认为只依靠内部力量来超越或者追赶亚马逊的可能性不大,于是决定将其云存储项目开源,即OpenStack的存储模块Swift。
与此同时,NASA在使用Eucalyptus云计算管理平台,并希望通过自己的研发为Eucalyptus开源版本贡献补丁(patch),但是Eucalyptus公司不同意。因为当时Eucalyptus云计算管理平台有两个版本:开源版和收费版,NASA的patch功能可能与收费版本的功能重叠,所以就不同意NASA对开源版提供补丁。于是,NASA决定自己开发云计算管理平台,当时NASA的6名开发人员用Python语言历时1个星期开发了一套云计算资源管理系统原型,成为OpenStack计算管理模块Nova的雏形。
于是Raskspace和NASA合作,分别贡献存储资源管理模块和计算资源管理模块,并于2010年7月发起OpenStack 项目。
OpenStack是一个开源的云操作系统,从2010年发布第一个版本Austin起,基本上保持每6个月发行一个新的版本,2022年10月发行版本Zed ,OpenStack发展得非常迅速,目前已成为开源云操作系统的事实上的“行业标准”。
OpenStack的构成组件由最初的2个服务组件(Nova和Swift)发展到几十个服务组件,如图1-18所示。OpenStack的服务都是松耦合的,用户可以根据自己的业务需求选择部署不同的服务。
图1-18 OpenStack组件一览
作为一个云操作系统,OpenStack的核心功能是对数据中心的计算、存储和网络资源进行管理,并通过仪表盘(dashboard)为管理人员提供图形化的界面,同时为用户提供使用云资源的Web接口。OpenStack的核心服务主要包括认证服务(Keystone)、计算控制服务(Nova)、存储服务(Glance、Swift和Cinder)、网络服务(Neutron)和面板服务(Horizon) ,如图1-19所示。
图1-19 OpenStack核心组件
Keystone为OpenStack提供安全认证功能,是OpenStack安全服务的第一道防线,其功能主要包括2部分:身份管理和服务管理。
(1)身份管理。
用于对用户(租户)的身份管理、认证、授权等,Keystone是基于角色实现对用户的授权和访问控制的。
(2)服务管理。
OpenStack中存在几十个服务,每个服务都可以是分布部署的,即每个服务都可以部署在不同的服务器上,甚至部署到不同的数据中心中。为了保证在运行过程中,服务可以正确地找到需要调用的服务,Keystone负责进行服务管理。Keystone的服务管理功能主要包括服务的注册、查找和认证。
Nova是OpenStack的核心模块之一,主要负责维护和管理云数据中心的计算资源。在云数据中心,提供CPU和内存等计算资源的主要是运行虚拟机的计算服务器,即CPU和内存等计算资源在云计算中是以虚拟机的形式提供的。因此,Nova的主要功能是,通过与虚拟化管理程序交互实现虚拟机生命周期的管理,同时提供与其他服务进行交互的接口,如图1-20所示。
图1-20 Nova的内部结构图
OpenStack的存储服务主要包括两类:镜像管理服务(Glance)和对象存储服务(Swift)。
(1)镜像管理服务(Glance)。
虚拟机镜像是云计算中的关键资源之一,是创建和使用虚拟机的基础。Glance的功能主要包括2部分:虚拟机镜像的管理、虚拟机镜像的存储和检索。
虚拟机镜像的管理,主要支持虚拟机镜像的创建、快照等。在云计算平台中,云服务提供商往往提供一些通用的虚拟机镜像,提供基本的操作系统,如RedHat Linux、Ubuntu、Windows等。同时,用户也可以基于已经生成或个性化安装后的虚拟机实例来生成自定义的镜像。
虚拟机镜像的存储和检索,主要是提供镜像目录和存储仓库,并根据用户的要求查找对应的镜像。Glance几乎支持所有的镜像格式,包括RAW、QCOW/QCOW2、VMDK、VHD等。
◆ RAW:无格式,性能好,是KVM和XEN默认的镜像格式,其特点有支持直接挂载、方便转换成其他格式的虚拟机镜像,还可以在原来的盘上追加空间等。
◆ QCOW:QEMU的COW格式,目前已经发展到QCOW2版本,性能较好,但不如RAW格式的性能好。QCOW2的特点主要有存储空间小,即使是不支持holes的文件系统也可以;支持多个snapshot,方便对历史snapshot进行管理;支持zlib的磁盘压缩;支持AES的加密等。
◆ VMDK:VMware格式,从性能和功能上来说,VMDK十分出色,但由于VMDK结合了VMware的很多功能,KVM和XEN使用这种格式的情况不太多。
◆ VHD:是微软虚拟磁盘文件(Microsoft Virtual Hard Disk Format),VirtualBox提供了对VHD的支持。
需要注意的是,Glance只提供对镜像的一些管理操作,而没有提供存储系统,往往需要与其他的后端存储系统结合使用,以实现对虚拟机镜像的存储,如图1-21所示。Glance支持的后端存储系统包括Swift存储系统、文件系统、Amazon S3存储系统、HTTP存储系统等。
在图1-21中,Glance API提供与其他OpenStack服务的交互接口;Glance数据库(Glance DB)负责存储镜像的元数据,如镜像的大小、拥有者等相关描述信息;注册服务器(Register Server)负责通过查询Glance数据库获取镜像的相关信息,如用户需要查看其当前所拥有的所有镜像的列表时,则由注册服务器来完成;存储适配器(Store Adapter)负责与后端的存储系统进行协调,实现对虚拟机镜像的存储、删除等操作。
图1-21 Glance的内部结构图
(2)对象存储服务(Swift)。
Swift存储非结构化数据,如镜像、图片、视频、代码等文件。Swift是OpenStack最早的两个服务之一。在OpenStack平台中,任何的数据都是一个对象。
Swift是一个可扩展的分布式对象存储系统,可以上传和下载数据,主要用于存储不经常修改的数据,比如存储虚拟机镜像、备份和归档体积较小的文件,如照片和电子邮件消息。此外,Swift提供无限可扩展能力,且无单点故障问题,更倾向于系统的管理。
Neutron提供虚拟网络服务,最初网络服务作为Nova组件的一部分,称为nova-network,后来成为独立的服务 。没有Neutron,OpenStack只能单纯提供虚拟机实例和虚拟存储服务,Neutron实现了虚拟机之间的互联互通,其功能包括创建子网、路由和为虚拟机实例分配IP地址等。
在OpenStack的网络管理流程中,通常需要经过以下几个步骤。
(1)创建一个网络;
(2)创建一个子网;
(3)启动一个虚拟机,将一块网卡绑定到指定的网络上;
(4)删除虚拟机;
(5)删除网络端口;
(6)删除网络。
Horizon为OpenStack提供交互式界面,允许用户通过图形化界面自助使用云服务,同时为云管理员提供图形化的管理界面,如图1-22所示。
图1-22 Horizon界面
OpenStack核心组件之间的关系如图1-23所示。在OpenStack中,虚拟机是所有云资源的载体,是管理的核心。Horizon为所有的服务提供图形化的操作界面,用户通过Horizon调用相应的服务;Keystone为所有的服务提供认证和管理;Nova负责对虚拟机进行管理,用户可以通过Horizon调用其提供的服务;Glance负责为虚拟机提供镜像的管理服务,同时由Swift负责完成对虚拟机镜像的存储服务;Neutron负责为虚拟机配置网络,保证虚拟机之间可以进行互联互通。
图1-23 OpenStack核心组件之间的关系
(图中VM代表虚拟机,下同。)
下面通过介绍云主机(虚拟机)的创建流程,进一步描述OpenStack核心组件之间是如何协同工作的。
(1)用户在Horizon上点击创建云主机按钮,并填写预创建云主机的信息,如名称、云主机镜像等;
(2)Horizon将“创建云主机”的请求及相关参数发送给Nova;
(3)Nova收到请求后,首先向Glance请求云主机镜像文件;
(4)Glance收到请求后,查找相应云主机的镜像信息并向Swift请求云主机镜像文件;
(5)Swift收到请求后,返回云主机镜像文件给Glance,Glance再将云主机镜像文件返回给Nova;
(6)Nova基于云主机镜像文件创建云主机,然后再向Neutron请求为新创建的云主机配置网络;
(7)Neutron完成云主机网络配置后,返回网络配置成功的信息给Nova;
(8)Nova返回云主机创建成功的消息给Horizon(用户)。