Nova 是 OpenStack 最核心的服务之一,负责虚拟机(VM)实例的全生命周期管理,包括创建、调度、运行、终止等操作。它是 OpenStack 实现计算即服务(IaaS)的核心组件,支持多种虚拟化技术和硬件平台。
1 架构图
- +----------------+ +----------------+ +----------------+
- | 客户端 | | Horizon Dashboard | | 其他服务 |
- +-------+--------+ +-------+--------+ +-------+--------+
- | | |
- +--------------------+--------------------+
- |
- v
- +---------------------------------------------------------+
- | Nova API |
- +---------------------------------------------------------+
- | | | |
- v v v v
- +----------------+----------------+----------------+----------------+
- | Nova Scheduler | Nova Conductor| Consoleauth | Proxy |
- | (调度器) | (导体服务) | (控制台认证) | (控制台代理) |
- +----------------+----------------+----------------+----------------+
- | |
- | v
- | +----------------+
- | | 数据库 |
- | +----------------+
- |
- v
- +----------------+ +----------------+ +----------------+
- | Nova Compute | | Nova Compute | | Nova Compute |
- | (计算节点1) | | (计算节点2) | | (计算节点n) |
- +----------------+ +----------------+ +----------------+
- | | |
- v v v
- +----------------+ +----------------+ +----------------+
- | Hypervisor | | Hypervisor | | Hypervisor |
- | (KVM/Xen等) | | (KVM/Xen等) | | (KVM/Xen等) |
- +----------------+ +----------------+ +----------------+
复制代码 2 组件
2.1 nova-api
- 职责:API 端点和请求入口。
- 功能:
- 接收和处理所有外部的 RESTful API 请求(例如来自 Horizon dashboard、CLI 工具、或其他服务的请求)。
- 对用户请求进行初步验证和解析。
- 将合法的请求转换为内部操作,并通过消息队列发送给其他相应的 Nova 服务。
- 它是最繁忙的服务之一,通常需要部署多个实例以实现负载均衡。
2.2 nova-scheduler
- 职责:调度器,决定虚拟机在哪个计算节点上启动。
- 功能:
- 从消息队列中接收创建虚拟机的请求。
- 根据请求中的资源需求(如 CPU、内存、磁盘)和系统当前的资源状态,通过一系列过滤器(Filters) 和权重(Weighers) 算法,从所有可用的计算节点中筛选出最合适的一个。
- 常见的过滤器:RamFilter(内存过滤),CoreFilter(CPU核心过滤),AvailabilityZoneFilter(可用域过滤)。
- 常见的权重器:优先选择剩余资源最多的节点(RAMWeigher),或优先选择当前负载最低的节点。
2.3 nova-compute
- 职责:计算节点上的核心工作进程,一个计算节点上运行一个 nova-compute 实例。
- 功能:
- 是真正与底层 Hypervisor(如 libvirt/KVM)交互、管理虚拟机生命周期的组件。
- 接收来自消息队列的操作指令(如运行、终止、重启虚拟机)。
- 通过 Hypervisor 的 API(如 libvirt)执行具体操作。
- 定期向系统报告当前节点的资源使用情况和健康状态(Heartbeat)。
2.4 nova-conductor
- 职责:数据库代理和协调者。
- 功能:
- 作为 nova-compute 服务和数据库之间的一个中间层,增强了安全性和可扩展性。
- nova-compute 不再直接访问数据库,所有数据库操作都通过 nova-conductor 代理完成。这避免了计算节点被攻破后直接访问数据库的风险。
- 处理一些需要协调的复杂操作,例如实时迁移。
2.5 nova-consoleauth
- 职责:控制台令牌认证。
- 功能:对用户通过 Horizon 或 nova-novncproxy 访问虚拟机控制台的请求进行身份验证和授权。
2.6 nova-novncproxy 和 nova-spicehtml5proxy
- 职责:控制台代理。
- 功能:提供基于 Web 的 VNC 或 SPICE 客户端,使用户可以通过浏览器访问虚拟机的图形化控制台。它作为用户和虚拟机 VNC/SPICE 服务之间的代理。
2.7 数据库(SQL Database)
- 职责:中央信息存储。
- 功能:存储 Nova 的几乎所有状态信息,包括实例的状态、可用资源、网络信息、项目(Project)配额等。常用的数据库是 MySQL/MariaDB 或 PostgreSQL。
2.8 消息队列(Message Queue, MQ)
- 职责:服务间通信的中央枢纽。
- 功能:所有 Nova 服务都通过它进行异步的、解耦的通信。最常用的是 RabbitMQ。
3、Nova 组件间通信机制
Nova 各组件间主要通过两种方式协作:
3.1 基于消息队列 (MQ) 的 RPC 调用
nova-api -> nova-scheduler,nova-scheduler -> nova-compute)。这是一种异步通信模式,能有效解耦组件,提升系统整体的吞吐能力和可扩展性。主要分为:
- rpc.call:请求/响应模式,调用者会等待响应(同步)。
- rpc.cast:单向通知模式,调用者不等待响应(异步)。
3.2 RESTful API 调用
主要用于 Nova 与其他 OpenStack 服务(如 Keystone、Glance、Neutron、Cinder)的交互。
4、部署架构
在实际部署中,Nova 组件通常分布在两种类型的节点上:
节点类型通常运行的 Nova 组件备注控制节点nova-api, nova-scheduler, nova-conductor, Placement API, Message Queue, Database负责管理、调度和数据库操作。计算节点nova-compute负责运行虚拟机实例。每个计算节点上都会运行一个 nova-compute 服务,管理本节点的 Hypervisor。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |