文章目录
- 一、Nova主要作用
- 二、Nova的系统架构
- 三、Nova的主要组件
- 四、VM实例化流程
一、Nova主要作用
- Nova是负责提供计算资源的模块,也是openstack中的核心模块,其主要功能是负责虚拟机实例的生命周期管理、网络管理、存储卷管理、用户管理以及其他的相关云平台管理功能。
二、Nova的系统架构
部署架构特点:
- 无中心结构
- 各组件无本地持久化状态
- 可水平扩展
- 通常将nova-api、nova-scheduler、nova-conductor组件合并部署在控制节点上
- 通过部署多个控制节点实现HA和负载均衡
- 通过增加控制节点和计算节点实现简单方便的系统扩容
三、Nova的主要组件
Nova-api服务
- 接收和相应来自最终用户的计算API请求,对外提供一个与云基础设施交互的接口,也是外部可用于管理基础设施的唯一组件。
- nova-api 对接收到的 HTTP API 请求会做如下处理:
1)检查客户端传人的参数是否合法有效
2)调用 Nova 其他子服务的处理客户端 HTTP 请求
3)格式化 Nova 其他子服务返回的结果并返回给客户端 - 只要是跟虚拟机生命周期相关的操作,nova-api 都可以响应。大部分操作都可以在 Dashboard 上找到
Nova-api-metadata服务
- 接收来自虚拟机发送的元数据请求。nova-api-metadata一般在安装nova-network服务的多主机模式下使用
Nova-compute(向外提供的端口为8774)
- OpenStack 对实例的操作,最后都是交给 nova-compute
来完成。它是一个持续工作的守护进程,通过hypervisor的api来创建和销毁虚拟机实例,nova-compute 与 Hypervisor 一起实现 OpenStack 对实例生命周期的管理。 - nova-compute 的功能可以分为两类:
1、定时向 OpenStack 报告计算节点的状态
每隔一段时间,nova-compute 就会报告当前计算节点的资源使用情况和
nova-compute 服务状态。可以查看日志 /var/log/nova/nova-compute.log
2、实现实例生命周期的管理
OpenStack 对实例最主要的操作都是通过 nova-compute实现的,包括实例的启动、关闭、重启、暂停、恢复、删除、调整实例大小、迁移、创建快照等。
当 nova-scheduler 选定了部署实例的计算节点后,会通过消息中间件 RabbitMQ 向选定的计算节点发出创建实例的命令。
该计算节点上运行的 nova-compute 收到消息后会执行实例创建操作。日志 /var/log/nova/nova-compute.log 会记录整个操作过程。
Nova-conductor
- nova-compute 需要获取和更新数据库中实例的信息。但 nova-compute 并不会直接访问数据库,而是通过 nova-conductor 实现数据的访问
- nova-conductor模块作用于nova-compute服务与数据库之间,避免了由nova-compute服务对云数据库的直接访问。他可以横向扩展,但是,不要将它部署在运行nova-compute服务的主机节点上
Nova-scheduler
- nova-scheduler 解决如何选择在哪个计算节点上启动实例的问题。
- 当创建实例时,用户会提出资源需求,例如 CPU、内存、磁盘各需要多少。OpenStack 将这些需求定义在 flavor中,用户只需要指定用哪个 flavor 就可以了。nova-scheduler 会按照 flavor 去选择合适的计算节点。
- OpenStack 的虚拟机调度策略主要是由 FilterScheduler ChanceScheduler 和实现的,其中FilterScheduler作为默认的调度器实现了基于主机过滤(filtering)和权值计算(weighing)的调度算法,而ChanceScheduler 则是基于随机算法来选择可用主机的简单调度器。
- FilterScheduler调度过程分为两步:
1、通过过滤(filtering)选择满足条件的计算节点(运行
nova-compute)。
2、通过权重计算(weighting)选择在最优(权重值最大)的计算节点上创建实例。
四、VM实例化流程
- 客户(可以是 OpenStack 最终用户,也可以是其他程序)向 API(nova-api)发送请求:“帮我创建一个虚机”。
- API 对请求做一些必要处理后,向 Messaging(RabbitMQ)发送了一条消息:“让 Scheduler 创建一个虚机”。
- Scheduler(nova-scheduler)从 Messaging 获取到 API
发给它的消息,然后执行调度算法,从若干计算节点中选出节点 A。 - Scheduler 向 Messaging 发送了一条消息:“在计算节点 A 上创建这个虚机”。
- 计算节点 A 的 Compute(nova-compute)从 Messaging 中获取到 Scheduler
发给它的消息,然后在本节点的 Hypervisor 上启动虚机。 - 在虚机创建的过程中,Compute 如果需要查询或更新数据库信息,会通过 Messaging 向
Conductor(nova-conductor)发送消息,Conductor 负责数据库访问。