nova介绍:
Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源。OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是通过 Nova 来实现的。
用途与功能 :
1 实例生命周期管理
2 管理计算资源
3 网络和认证管理
4 REST 风格的 API
5 异步的一致性通信
6 Hypervisor 透明:支持Xen,XenServer/XCP,KVM, UML, VMware vSphere and Hyper-V
在上图中可以看到,Nova 处于 Openstak 架构的中心,其他组件都为 Nova 提供支持: Glance 为 VM 提供 image Cinder 和 Swift 分别为 VM 提供块存储和对象存储 Neutron 为 VM 提供网络连接。
Nova 架构如下:
nova-api: 发出请求给 openstack 来操作一个服务,调用该服务来启动一个新的 nova 实例。
nova-scheduler:nova 调度器 , 用于选择某个服务器相应运行实例的请求。
nova-compute :管理虚机的核心服务,通过调用 Hypervisor API 实现虚机生命周期管理
nova-conductor :nova-compute 经常需要更新数据库,比如更新虚机的状态。出于安全性和伸缩性的考虑,
nova-compute 并不会直接访问数据库,而是将这个任务委托给 nova-conductor
nova-novncproxy:基于 Web 浏览器的 VNC 访问
nova-consoleauth :负责对访问虚机控制台请求提供 Token 认证
Nova 的架构比较复杂,包含很多组件。 这些组件以子服务(后台 deamon 进程)的形式运行,可以分为以下几类:
api
nova-api
是整个 Nova 组件的门户,接收和响应客户的 API 调用。所有对 Nova 的请求都首先由 nova-api 处理。nova-api 向外界暴露若干 HTTP REST API 接口 在 keystone 中我们可以查询 nova-api 的 endponits。
客户端就可以将请求发送到 endponits 指定的地址,向 nova-api 请求操作。 当然,作为最终用户的我们不会直接发送 Rest AP I请求。 OpenStack CLI,Dashboard 和其他需要跟 Nova 交换的组件会使用这些 API。
Nova-api 对接收到的 HTTP API 请求会做如下处理:
- 检查客户端传入的参数是否合法有效
- 调用 Nova 其他子服务的处理客户端 HTTP 请求
- 格式化 Nova 其他子服务返回的结果并返回给客户端
nova-api 接收哪些请求?
简单的说,只要是跟虚拟机生命周期相关的操作,nova-api 都可以响应。 大部分操作都可以在 Dashboard 上找到。打开Instance管理界面
Compute Core
nova-scheduler:
虚机调度服务,负责决定在哪个计算节点上运行虚机。创建 Instance(实例) 时,用户会提出资源需求,例如 CPU、内存、磁盘各需要多少。OpenStack 将这些需求定义在 flavor 中,用户只需要指定用哪个 flavor(可指定cpu、内存、磁盘) 就可以了
下面介绍 nova-scheduler 是如何实现调度的。在 /etc/nova/nova.conf 中,nova 通过 driver=filter_scheduler 这个参数来配置 nova-scheduler。
Filter scheduler
Filter scheduler 是 nova-scheduler 默认的调度器,调度过程分为两步:
- 通过过滤器(filter)选择满足条件的计算节点(运行 nova-compute)
- 通过权重计算(weighting)选择在最优(权重值最大)的计算节点上创建 Instance。
Nova 允许使用第三方 scheduler,配置 scheduler_driver 即可。 这又一次体现了Ope