【云深知处】NFV理论与实践(5)-大话OpenStack
云操作系统(Cloud OS)同普通的操作系统一样,实现对硬件资源的抽象,对上层提供统一的接口。除此之外,“云”的特征要求云操作系统借助计算、存储和网络虚拟化技术实现资源的组织和分配,进而实现资源的共享、弹性、快速部署和回收、可监控和测量,实现“像使用自来水一样使用IT资源”的构想。
在Cloud OS领域,最著名的当属OpenStack。依照上一节我们分解的Cloud OS架构,OpenStack属于CLoud OS中的管理部分,与Hypervisor一起构成了CloudOS的功能。
在一般的表述中,直接将OpenStack称为云操作系统,把Hypervisor作为OpenStack的一部分。OpenStack网站(https://www.openstack.org/software/)上也是这么认为的:
OpenStack is a cloud operating system that controls large pools of compute, storage, and networking resources throughout a datacenter, all managed through a dashboard that gives administrators control while empowering their users to provision resources through a web interface.
OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。
OpenStack即指这个云操作系统,也指开发这个操作系统的开源项目。
OpenStack的Open有两层意思:
l Open Source:同其他开源软件一样,其源代码是公开的;
l Open Mind:思想是开放的。OpenStack以开源社区的方式向所有人开放。任何人都可以向社区贡献自己的想法和代码。OpenStack会每半年组织一场峰会(Open Summit),邀请开发者、用户、系统管理员等相关人员分享开发、使用经验。OpenStack会吸收优秀的功能和模块加入到官方发布的版本中。同安卓(Android)一样,这是一个开放的生态系统。
随着版本的演进,加入到OpenStack中的组件(又称服务)越来越多。理解OpenStack的关键是理解其核心组件。对于一个操作系统来说,管理计算、存储、网络的组件是其核心组件。另外,负责权限管理、操作界面等的组件也是核心组件。
如上图所示,操作系统必须有计算(Compute)组件、网络(Network)组件、磁盘管理的块存储(Block Storage)组件、将内容以类似文件方式进行存储管理的对象存储(Object Storage)组件、鉴权(Identity)组件、负责操作界面(Dashboard)的组件,甚至还有负责虚拟机快速安装恢复的备份镜像(Image)组件。
OpenStack的每个组件的开发都是一个项目组,都有一个特定的名字。该名字即是项目的名称,也是组件的名称。
组件之间的关系如下图所示:
要始终牢记:OpenStack的目的是为了创建和维护虚拟机(VM)。OpenStack从众多的物理主机、存储和网络设备中抓取虚拟机所需要的计算、存储和网络资源分配给虚拟机。
OpenStack各组件功能
为了识别各组件之间的关系,先将用于业务编排的Heat组件排除,将其他组件分成支撑组件和业务组件(原创概念,纯个人理解)两个部分:
第一部分:支撑组件
我们将不与虚拟机发生关联的组件定义为支撑组件,包括Horizon、Keystone、Ceilometer三个部分。
Horizon:为几乎所有组件提供基于Web的操作界面,方便操作。OpenStack各组件只提供命令行的交互方式,Horizon提供了图形化封装的功能。
Ceilometer:提供资源的计量和监控服务。云架构的设计初衷是对租户提供IT服务,所以CloudOS必须有能力计量各租户使用的计算、存储和网络资源的量,从而进行计费。所以在上图中,Ceilometer指向了计算、存储和网络组件。目前的Ceilometer组件还具备监控(告警)能力。
Keystone:提供鉴权功能。OpenStack中所有需要鉴权才能继续的操作,各组件首先要与Keystone组件进行交互,进行鉴权和认证。因此,Keystone提供API(Application Programming Interface 应用编程接口)接口,与所有需要调度资源的组件进行对接。
l 第二部分:业务组件
我们将与虚拟机生命周期管理(创建、删除、修改)直接相关的组件称为业务组件,包括Nova、Neutron、Cinder、Glance、Swift五个部分。
这部分组件为虚拟机提供计算、存储和网络资源。
l Nova:是OpenStack的最核心组件。负责网络的Neutron和负责块存储的Cinder都是从Nova组件中分出来的,足见Nova在OpenStack中的江湖地位。Nova负责为虚拟机管理计算资源。包括CPU和内存。当接到虚拟机创建请求时,Nova根据请求中携带的计算资源需求对计算资源进行过滤,选出可用来创建虚拟机的资源,再根据一定的策略进行排序,选定某些计算资源创建虚拟机。
计算资源一旦分配给虚拟机,Nova不再参与到虚拟机处理上层应用的计算过程。Nova类似于抓药的老中医,只负责开方子和抓药。与开中药不同的是,计算资源不会被虚拟机“吃掉”,Nova还可以根据需要随时调整和销毁(删除)虚拟机。
Nova除了负责计算资源的管理,它还是存储和网络资源的总协调。Nova接收来自管理接口的请求,再通过API接口与Cinder、Glance以及Neutron交互,协调存储、镜像以及网络资源。
l Neutron:负责虚拟机的网络资源。虚拟机与外部网络互通以及隔离,需要配置IP地址、路由、VLAN等信息,即在网络上搭建一个可隔离、可交换/路由的分组数据包转发通路。Neutron根据虚拟机的需求,在相应的主机、交换机和路由器上完成支撑虚拟机转发通路的接口、VLAN、路由等配置,支撑虚拟机的数据转发。从这个角度上看,Neutron是数据转发的集中控制节点,因此也被认为是SDN(Software Defined Networking)Controller。理想的SDN Controller是Neutron努力的方向,目前OpenStack的网络部分在复杂的NFV场景下,还需要一些手工设计和配置。
l Cinder:Cinder负责为虚拟机提供块存储(Block Storage)资源。所谓的“块”,就是我们通常操作系统对待硬盘的状态。操作系统将磁盘划分一个一个块(簇),来对硬盘进行读写。
在云架构下,存储资源可能是本地资源,也可能是SAN、NFS等不同厂家不同技术的存储资源。Cinder向下对物理存储介质使用相对应的驱动(Driver)来完成硬盘的管理和读写,对VM提供统一的iSCSI存储,即统一的磁盘卷,虚拟机将Cinder统一之后的磁盘卷进行挂载使用。
Glance:提供对虚拟机镜像的管理,包括虚拟机的查询、注册、上传、获取以及删除功能。比如在命令行中执行如下命令,就创建了一个suse的镜像。
#glance image-create --name suse-iso --disk-format iso --container-format bare --file suse.iso
所谓镜像,就是虚拟机磁盘的复制。这个复制可能是原始二进制内容的拷贝,也可能是某种转换压缩格式之后的文件。被镜像的虚拟机磁盘中包含虚拟机的操作系统Guest OS,也可能包含已经安装完成的应用。Nova读取读取镜像内容,将镜像内容复制到虚拟机磁盘,虚拟机从磁盘引导启动镜像中的Guest OS。启动后的虚拟机就直接具备了Guest OS以及上层应用(如果镜像中有的话)功能。
Glace只负责创建、删除、传递镜像信息,而镜像的保存需要借助存储组件。为Glance保存镜像的存储称为Glance的后端存储。目前NFV的设计中使用对象存储Swift来保存镜像文件。
l Swift:是OpenStack的对象存储组件。在NFV的OpenStack使用中,只为Glance提供虚机镜像存储服务。Swift被称为对象存储,类似于我们看到的操作系统存储文件。被存储的对象是一个个有实际意义的数据对象,而不是二进制的原始信息。这些数据可以检索、调整,必要时进行更新。相对于单磁盘的文件存储,Swift按照云的架构进行了适配,提供了更强的扩展性、冗余和持久性。
复杂的实现,并不复杂的配置
虽然CloudOS的架构原理很复杂,但是作为集成交付工程师,并不需要掌握复杂的组件内部交互过程。交付工程师需要略微理解组件间的交互过程,将主要精力投入到功能系统和网络的设计上。
技术的发展应朝着“实现越来越复杂,使用越来越简单”方向发展。自动挡汽车取代了手动挡汽车、复杂的自动变速箱简化了人的手脚配合工作之后,驾驶人应该将更多的精力投入到道路和环境上,追求更高效和舒适的驾驶。
OpenStack完成虚拟机的管理。我们以虚拟机的创建为例,简单描述OpenStack各组件的作用。
1. 用户从操作管理界面(Horizon或者各厂家自己实现的界面)提交虚拟机创建请求,同时携带虚拟机的资源量需求(暂时理解为资源配置文件,具体概念以后再展开)。
2. 该需求会下发给Nova组件。Nova组件首先根据虚拟机的资源需求分配计算资源。Nova检索全部计算资源,过滤掉不可用的计算资源,将剩余的计算资源进行排序,选择最优的资源。
3. Nova必须保证所创建的虚拟机有镜像资源可以使用,以便分配完全部资源之后可以使用镜像来启动虚拟机。Nova向Glance申请镜像资源。该镜像资源也是由资源配置文件指定。随后Glance启动镜像相关管理工作,查找镜像资源。如果自身目录没有对应镜像资源,Glance会去后端Swift存储请求对应的镜像资源。此时Swift类似一个文件服务器。找到对应的镜像资源后,Glance将镜像资源(就是文件)传递给Nova组件。
4. Nova随即请求网络资源。所谓网络资源,就是为虚拟机分配端口资源、配置IP地址、配置二层互通资源(VLAN、VxLAN等等)、打通三层路由。
5. 通过Cinder请求存储。同Nova申请计算资源一样,Cinder也经过查找、筛选和排序过程选定存储资源,将相应磁盘参数传递给Nova组件。
最后由Nova组件将计算、存储和网络资源组合,创建虚拟机。利用镜像文件引导启动虚拟机的系统。此时虚拟机就运行起来了。
6. 如果上述镜像中的上层应用不完整,用户也可以在虚拟机启动之后安装自己所需的应用。
7. 安装完成后,使用Glance将包含新装应用的虚拟机打包创建镜像;
8. 通过Swift将新创建的镜像保存。后续如果Nova使用新的镜像启动虚拟机,新启动的虚拟机就会包含本次新装的应用,用户不必重新安装该应用。
当然,实际的虚拟机创建过程要更加复杂。每个组件内部还会有子进程,实现资源复杂的调度。(如下图所示)绝大部分工程师不必深入细节。
实际的配置中,除网络部分的Neutron组件和磁盘管理的Cinder组件外,其他组件所需要的配置均不多。每个组件会有一些参数开关,这些开关通常保持默认值,工程师不需要修改。理解上述原理是理解这些开关的基础。
(但设计是相当复杂的!)
下图是华为CloudEdge2.0在部署NFV架构的EPC网络时各组件需要做的配置。在后续的章节中我们还会详细展开。
如何记住OpenStack组件
“看过听过很多遍OpenStack原理,就是记不住这些组件的名字。”相信这是很多人的心声。下面我们就提供一套臆测的、非正统的OpenStack命名解读。旨在帮助读者记住OpenStack组件名称及功能。
Nova
负责计算资源的Nova组件是OpenStack的核心。这个组件的名字也被打上了深深的NASA烙印。Nova原义是天文学上的“新星”。
Cinder
负责块存储的Cinder可以对应Cylinder这个词。Cylinder意思是“圆柱体”,正好是机械硬盘的物理形态。
另外,1960年代,阿波罗登月计划中曾在亚利桑那州一个叫Cinder Lake的区域测试月球车。Cinder这个词的使用是不是也有向NASA前辈致敬的意思?
Neutron
Neutron用来管理网络,这部分组件最初命名为Quantum。但因该名字与其他公司重名,于是改名为Neutron。Neutron的本义是“中子”。在记忆的时候,我更习惯将该词与相近的neuron(神经元)联系起来。看下图神经元的结构,像不像一张复杂的网络呢。
Glance
Glance负责镜像(Image)的管理。每当读到这个词,脑中就浮现“回眸一笑百媚生”的句子。
看下面这张图,这回头一瞥是不是与“镜”联系了起来。
Swift
Swift负责对象管理,因此对象很多,每次和对象分手都要写歌。(请自行搜索Taylor Swift、男朋友)
Ceilometer
所有和meter相关的都与测量有关,比如曝光计exposure meter、体温计thermometer。停车计费的“咪表”也是Meter这个词的音译。
Ceilometer原是利用激光反射来测量云层高度的云高计。OpenStack使用这个词来命名测量和监控组件也算贴切。
Keystone
Keystone原本是拱券顶端合龙的最关键一块石头。
如果只把Keystone中的Key拿出来看,Keystone用于鉴权就很容易理解了。相信所有人原本在记忆Keystone的作用上也不存在问题。
Horizon
Horizon的意思是“地平线”。看看下图的地平线是不是有“界面”的感觉。
如果神经略微“大条”,还感觉不出来的话,再看下图,应该就能理解Horizon是管理“界面”的含义了。
Heat
Heat是业务编排,就是把云资源组织成你需要的样子。如同锻铁,首先要heat(加热),然后将铁块打造成需要的样子。
从CT到IT的云架构,需要跨越CT到IT、IT到云两道沟。OpenStack的结构一直是CT工程师困惑所在。希望本文成为CT工程师理解OpenStack的第一站。
感谢丁彦俊、陶文、王嗣烨对文本的贡献;感谢申纪伟对文中部分知识点的答疑解惑。
关注“全球PS交付联盟”,共同迎接NFV时代。
作者|张明和 转载请与作者取得联系
- 点赞
- 收藏
- 关注作者
评论(0)