OpenStack — Nova

文章目录

Nova

Nova是OpenStack最核心的服务模块,负责管理和维护云计算环境的计算资源,负责整个云环境虚拟机生命周期的管理。

Nova自身并没有提供任何虚拟化能力,它提供计算服务,使用不同的虚拟化驱动来与底层支持的Hypervisor(虚拟机管理器)进行交互。

所有的计算实例(虚拟服务器)由Nova进行生命周期的调度管理(启动、挂起、停止、删除等),Nova还需要keystone、glance、neutron、cinder和swift等其他服务的支持,能与这些服务集成,实现如加密磁盘、裸金属计算实例等。

Nova架构

OpenStack — Nova

  • API:用于接收HTTP请求、转换命令、通过消息队列或HTTP与其他组件通信。

  • Conductor:处理需要协调(构建虚拟机或调整虚拟机大小)的请求,充当数据库代理或者处理对象转换。

  • Scheduler:用于决定哪台计算节点承载计算实例。

  • Compute:管理虚拟机管理器与虚拟机之间通信。

  • DB:用于数据存储的SQL数据库,通常是MariaDB。

Nava组件

nova-api

nova-api 作为 Nova 组件对外的唯一窗口,向客户暴露 Nova 能够提供的功能。 当客户需要执行虚机相关的操作,能且只能向 nova-api 发送 REST 请求。

设计 API 前端服务的好处在于: 1. 对外提供统一接口,隐藏实现细节 2. API 提供 REST 标准调用服务,便于与第三方系统集成 3. 可以通过运行多个 API 服务实例轻松实现 API 的高可用,比如运行多个 nova-api 进程

nova-compute

nova-compute 在计算节点上运行,负责管理节点上的实例。OpenStack 对实例的操作,最后都是交给 nova-compute 来完成。nova-compute 与 Hypervisor 一起实现 OpenStack 对实例生命周期的管理。
OpenStack — Nova

nova-compute 的功能可以分为两类:

  • 定时向 OpenStack 报告计算节点的状态

    每隔一段时间,nova-compute 就会报告当前计算节点的资源使用情况和 nova-compute 服务状态。这样OpenStack 就能得知每个计算节点的 vcpu、ram、disk 等信息。nova-scheduler 的很多 Filter 才能根据计算节点的资源使用情况进行过滤,选择符合 flavor 要求的计算节点。

  • 实现实例生命周期的管理

    OpenStack 对实例最主要的操作都是通过 nova-compute 实现的,包括实例的启动、关闭、重启、暂停、恢复、删除、调整实例大小、迁移、创建快照等。

nova-conductor

为计算节点提供数据库访问支持。

nova-compute服务和数据库之间的中间件。

  • 实现更高的系统安全性

    在 OpenStack 的早期版本中,nova-compute 可以直接访问数据库,但这样存在非常大的安全隐患。因为 nova-compute 这个服务是部署在计算节点上的,为了能够访问控制节点上的数据库,就必须在计算节点的 /etc/nova/nova.conf 中配置访问数据库的连接信息。如果任意一个计算节点被黑客入侵,都会导致部署在控制节点上的数据库面临极大风险。

    为了解决这个问题,从 G 版本开始,Nova 引入了一个新服务 nova-conductor,将 nova-compute 访问数据库的全部操作都放到 nova-conductor 中,而且 nova-conductor 是部署在控制节点上的。这样就避免了 nova-compute 直接访问数据库,增加了系统的安全性。

  • 实现更好的系统伸缩性

    nova-compute 与 nova-conductor 是通过消息中间件交互的。这种松散的架构允许配置多个 nova-conductor 实例。在一个大规模的 OpenStack 部署环境里,管理员可以通过增加 nova-conductor 的数量来应对日益增长的计算节点对数据库的访问。

nova-scheduler

将创建新虚拟机的请求分发到正确的节点。

当创建实例时,用户会提出资源需求,例如 CPU、内存、磁盘各需要多少。OpenStack 将这些需求定义在 flavor 中,用户只需要指定用哪个 flavor 就可以了。nova-scheduler 会按照 flavor 去选择合适的计算节点。

FilterScheduler调度过程分为两步:

  • 通过过滤(filtering)选择满足条件的计算节点。
  • 通过权重计算(weighting)选择在最优(权重值最大)的计算节点上创建实例。

nova-novncproxy

为浏览器提供VNC代理,允许VNC控制台访问虚拟机。

创建虚拟机流程

Admin Keystone nova_api nova_scheduler nova_compute nova_conductor glance neutron Cinder hypervisor 创建VM申请 获得token 创建VM请求 + token 验证token 通过验证 创建VM数据库记录 请求创建虚拟机 计算出符合虚拟机创建的主机 更新相应虚拟机的物理机信息 请求创建VM 获取虚拟机信息 返回虚拟机信息 请求VM所需镜像+token 返回VM镜像信息 请求VM所需网络+token 返回VM网络信息 请求VM所需存储+token 返回VM存储信息 创建VM Admin Keystone nova_api nova_scheduler nova_compute nova_conductor glance neutron Cinder hypervisor
上一篇:Java进阶:匿名内部类


下一篇:学习编写Unity计算着色器 Learn to Write Unity Compute Shaders