OpenStack Nova

OpenStack Nova

简介

OpenStack 中的 Nova 负责维护和管理云环境的计算资源
Nova 在现有 Linux 服务器上作为一组守护线程来提供服务
Nova 由多个服务器进程组成,每个进程执行不同的功能
面向用户的界面是 REST API ,而 Nova 组件内部通过 RPC 消息传递机制进行通信

需要以下额外的服务来实现基本功能:

  • Keystone :为所有的 OpenStack 服务提供认证 (identity and authentication)
  • Glance :提供计算镜像仓库 (compute image repository),所有的计算实例均由计算镜像启动
  • Neutron :负责配置计算实例在启动时连接到的虚拟或物理网络
  • Placement :跟踪云中可用资源的清单,并帮助选择创建虚拟机时资源的提供者

Nova 包含以下组件:

API

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

nova-api service

接收和响应 end user 的 API 调用

nova-api-metadata service

接收来自实例的源数据请求
通常只在安装有 nova-network 服务的多主机模式下使用

compute core

nova-compute service

管理虚机的核心服务,通过调用 Hypervisor API 实现虚机生命周期管理

nova-scheduler service

虚拟机调度服务,从队列中获取虚拟机实例请求,并确定它在哪个计算节点上运行

nova-conductor module

调解 nova-compute service 和 database 之间的交互,使得 nova-compute service 不会对云数据库直接访问
不要把它部署在运行 nova-compute service 的节点上

console interface

nova-console

用户可以通过多种方式访问虚机的控制台:
nova-novncproxy,基于 Web 浏览器的 VNC 访问
nova-spicehtml5proxy,基于 HTML5 浏览器的 SPICE 访问
nova-xvpnvncproxy,基于 Java 客户端的 VNC 访问

nova-consoleauth daemon

负责对访问虚拟机控制台请求提供 Token 认证
必须运行此服务才能使控制台代理生效

Database

SQL database

存储云基础架构大多数构建时和运行时的状态,包括:

  • 可用的实例类型 (Available instance types)
  • 正在使用的实例 (Instances in use)
  • 可用的网络 (Available networks)
  • 项目 (Projects)

Message queue

The queue

用于在守护进程之间传递消息

典型的 Nova 部署

Nova 的关键组件和它们之间传递信息的方式

通信方式

API 服务器处理 REST 请求,通常涉及数据库读/写,可选地将 RPC 消息发送到其他 Nova 服务,以及生成对 REST 调用的响应。
RPC 消息传递是通过 oslo.messaging 库完成的,这是一个消息队列之上的抽象
大多数主要的 nova 组件可以在多个服务器上运行,并且有一个正在侦听 RPC 消息的管理器。 一个例外是 nova-compute,其中一个进程在它正在管理的虚拟机 hypervisor 上运行(除了使用 VMware 或 Ironic 驱动程序时)。 管理员还可以选择定期执行任务。

数据库

Nova 还使用在所有组件之间(逻辑上)共享的*数据库。 但是为了确保升级后的控制平面仍然可以与运行先前版本的 nova-compute 进行通信,可以通过对象层访问数据库。因此 nova-compute 代理通过 RPC 将 DB 请求发送到名为 nova-conductor 的*管理器,而不是直接向数据库发送请求

创建虚拟机的流程

通过创建一个虚拟机的核心流程可以更好地理解 Nova 各个子服务如何协同工作

  1. 客户 (可以是 OpenStack 最终用户,也可以是其他程序) 向 API (nova-api) 发送请求:“创建一个虚拟机”
  2. API 对请求做一些必要处理后,向 Messaging (RabbitMQ) 发送了一条消息:“让 Scheduler 创建一个虚拟机”
  3. Scheduler (nova-scheduler) 从 Messaging 获取到 API 发给它的消息,然后执行调度算法,从若干计算节点中选出节点 A
  4. Scheduler 向 Messaging 发送了一条消息:“在计算节点 A 上创建这个虚机”
  5. 计算节点 A 的 Compute (nova-compute) 从 Messaging 中获取到 Scheduler 发给它的消息,然后在本节点的 Hypervisor 上启动虚机
  6. 在虚机创建的过程中,Compute 如果需要查询或更新数据库信息,会通过 Messaging 向 Conductor (nova-conductor )发送消息,Conductor 负责数据库访问
上一篇:java架构之路-(十)JVM的运行时内存模型


下一篇:成功解决VM虚拟机内This compute has only 713.3MB disk space remaning