文章目录
Nova计算服务
计算服务是openstack最核心的服务之一,负责维护和管理云环境的计算资源,它在openstack项目中代号是nova。
Nova自身并没有提供任何虚拟化能力,它提供计算服务,使用不同的虚拟化驱动来与底层支持的Hypervisor(虚拟机管理器)进行交互。所有的计算实例(虚拟服务器)由Nova进行生命周期的调度管理(启动、挂起、停止、删除等)
Nova需要keystone、glance、neutron、cinder和swift等其他服务的支持,能与这些服务集成,实现如加密磁盘、裸金属计算实例等。
Nova架构
- DB:用于数据存储的sql数据库。
- API:用于接收HTTP请求、转换命令、通过消息队列或HTTP与其他组件通信的nova组件。
- Scheduler:用于决定哪台计算节点承载计算实例的nova调度器。
- Network:管理IP转发、网桥或虚拟局域网的nova网络组件。
- Compute:管理虚拟机管理器与虚拟机之间通信的nova计算组件。
- Conductor:处理需要协调(构建虚拟机或调整虚拟机大小)的请求,或者处理对象转换
Nova组件介绍
API介绍
- API是客户访问nova的http接口,它由nova-api服务实现,nova-api服务接收和响应来自最终用户的计算api请求。作为openstack对外服务的最主要接口,nova-api提供了一个集中的可以查询所有api的端点
- 所有对nova的请求都首先由nova-api处理。API提供REST标准调用服务,便于与第三方系统集成。
- 最终用户不会直接改送RESTful API请求,而是通过openstack命令行、dashbord和其他需要跟nova交换的组件来使用这些API。
nova-api对接收到的http api请求做以下处理
- 检查客户端传入的参数是否合法有效
- 调用nova其他服务来处理客户端HTTP请求
- 格式化nova其他子服务返回结果并返回给客户端
Nova-api是外部访问并使用nova提供的各种服务的唯一途径,也是客户端和nova之间的中间层
Scheduler介绍
可以解释成调度器
主要解决的是如何选择在哪个计算节点上启动实例的问题
调度器的类型
- 随机调度器:从所有正常运行nova-compute服务的节点中随机选择
- 过滤器调度器(filter scheduler) :根据指定的过滤条件以及权重选择最佳的计算节点。Filter又称为筛选器
- 缓存调度器(caching scheduler):可看作随机调度器的一种特殊类型,在随机调度的基础上将主机资源信息缓存在本地内存中,然后通过后台的定时任务定时从数拆库中获取最新的主机资源信息。
过滤器调度过程
- 通过指定的过滤器选择满足条件的计算节点,比如内存使用率小于50%,可以使用过多个过滤器依次进行过滤
- 对过滤之后的主机列表进行权重计算并排序,选择最优的计算节点来创建虚拟机实例
过滤器的类型
RetryFilter(再审过滤器)
- 主要作用是过滤掉之前已经调度过的节点。如A、B、C都通过了过滤,A权重最大被选中执行操作,由于某种原因,操作在A上失败了。Nova-filter将重新执行过滤操作,那么此时A就被会RetryFilter直接排除,以免再次失败
AvailabilityZoneFilter (可用区域过滤器)
- 为提高容灾性并提供隔离服务,可以将计算节点划分到不同的可用区域中。Openstack默认有一个命名为nova的可用区域,所有的计算节点初始是放在nova区域中的。用户可以根据需要创建自己的一个可用区域。创建实例时,需要指定将实例部署在哪个可用区域中。Nova-scheduler执行过滤操作时,会使用AvailabilityZoneFilter不属于指定可用区域计算节点过滤掉
CoreFilter(核心过滤器)
- 根据可用CPU核心来调度虚拟机创建,将不能满足实例类型vcpu需求的计算节点过滤掉
ComputeFilter(计算过滤器)
- 保证只有nova-compute服务正常工作的计算节点才能被nova-scheduler调度,它是必选的过滤器。
ComputeFilter(计算过滤器)
- 保证只有nova-compute服务正常工作的计算节点才能被nova-scheduler调度,它是必选的过滤器。
ComputeCapablilitiesFilter (计算能力过滤器)根据计算节点的特性来过滤,如x86_64和ARM架构的不同节点,要将实例
lmagePropertiesFilter(镜像属性过滤器)
- 根据所选镜像的属性来筛选匹配的计算节点。通过元数据来指定其属性。如希望镜像只运行在KVM的Hypervisor上,可以通过Hypervisor Type属性来指定。
Compute的介绍
-
Nova-compute在计算节点上运行,负责管理节点上的实例。通常一个主机运行一个Nova-compute服务,一个实例部署在哪个可用的主机上取决于调度算法。OpenStack对实例的操作,最后都是提交给Nova-compute来完成。
-
Nova-compute可分为两类,一类是定向openstack报告计算节点的状态,另一类是实现实例生命周期的管理。
1、负责执行具体的与实例生命周期/管理实例相关的工作
2、报告节点状态(写入数据库,保证scheduler读取数据库,数据库信息的实时性、celimetor,监控和管理openstack实例资源,并汇报给用户/openstack)
通过Driver(驱动)结构支持多种Hypervisor虚拟机管理器
定期向OpenStack报告计算节点的状态
- 每隔一段时间,nova-compute就会报告当前计算节点的资源使用情况和nova-compute服务状态。
- nova-compute是通过Hypervisor的驱动获取这些信息的。
实现虚拟机实例生命周期的管理
- OpenStack对虚拟机实例最主要的操作都是通过nova-compute实现的。创建、关闭、重启、挂起、恢复、中止、调整大小、迁移、快照
- 以实例创建为例来说明nova-compute的实现过程。
(1)为实例准备资源。
(2)创建实例的镜像文件。
(3)创建实例的XML定义文件。
(4)创建虚拟网络并启动虚拟机。
Conductor组件介绍(类似于redis)
在为数据库的访问提供一层安全保障
作为数据库操作的一个代理
有助于提高数据库的访问性能
管理员可以通过增加conductor的数量来应付日益增长的计算节点对数据库的访问量
PlacementAPI组件介绍
外部系统提供的资源多种多样。面对这些资源,管理员需要统一的、简单的管理接口来统计系统中资源使用情况
虚拟机实例化流程
用户可以通过多种方式访问虚拟机的控制台
- Nova-novncproxy守护进程:通过vnc连接访问正在运行的实例提供一个代理,支持浏览器novnc客户端。
- Nova-spicehtml5proxy守护进程:通过spice连接访问正在运行的实例提供一个代理,支持基于html5浏览器的客户端。
- Nova-xvpvncproxy守护进程:通过vnc连接访问正在运行的实例提供一个代理,支持openstack专用的java客户端。
- Nova-consoleauth守护进程:负责对访问虚拟机控制台提供用户令牌认证。这个服务必须与控制台代理程序共同使用。
Nova的架构
单节点(单中心节点)
多节点(多个中心节点)
Cell结构
当openstack nova集群的规模变大时,数据库和消息队列服务就会出现瓶颈问题。Nova为提高水平扩展及分布式、大规模的部署能力,同时又不增加数据库和消息中间件的复杂度,引入了Cell概念。
Cell可译为单元。为支持更大规模的部署,openstack较大的nova集群分成小的单元,每个单元都有自己的消息队列和数据库,可以解决规模增大时引起的瓶颈问题。在Cell中,Keystone、Neutron、Cinder.
Glance等资源是共享的。