1.Nova简介
- Nova是什么?
OpenStack中提供计算资源服务的项目
- Nova负责什么?
虚拟机生命周期管理
其他计算资源生命周期管理
负责发现各个物理主机上的物理资源数量(物理CPU、内存、本地存储空间、PCI设备等),并根据配置值将其换为逻辑资源数量(如CPU超配)
负责将各个物理节点上的逻辑资源数量上报至数据库,并定期刷新数据库记录,以使记录能够反映当前的实际资源状态。
- Nova不负责什么?
承载虚拟机的物理主机自身的管理
全面的系统状态监控
- Nova是OpenStack历史上最核心的项目
历史最长:OpenStack首批两个项目之一
功能最复杂,代码量最大
大部分集成项目和Nova之间都存在配合关系
贡献者在社区中的影响力最大
2.nova架构
模块 | 功能 | 一般部署位置 |
nova-api | 接受rest消息 | 控制节点 |
nova-scheduler | 选择合适的主机 | 控制节点 |
nova-conductor | 数据库操作和复杂流程控制 | 控制节点 |
nova-compute | 虚拟机生命周期管理和资源管理 | 计算节点 |
nova-novncproxy | novnc访问虚拟机代理 | 控制节点 |
nova-consoleauth | novnc访问虚拟机鉴权 | 控制节点 |
Nova内部服务使用REST调用,Nova和其他OpenStack服务交互时,使用消息队列。
- nova-api:接收和响应客户的API调用。 除了提供 OpenStack 自己的API,nova-api 还支持 Amazon EC2 API。 也就是说,如果客户以前使用 Amazon EC2,并且用 EC2 的 API 开发了些工具来管理虚机,那么如果现在要换成 OpenStack,这些工具可以无缝迁移到 OpenStack,因为 nova-api 兼容 EC2 API,无需做任何修改。负责接收来自客户端的http请求,比如创建一个虚拟机;虚拟机生命周期管理的入口
- Nova-scheduler:虚拟及调度服务,负责决定在那个计算节点上运行虚拟机。这里的调度策略是先过滤不合适的节点,然后再进行打分操作,选择出来最合适的节点通知该节点上的nova-computer来进行创建虚拟机、迁移等操作。
- nova-compute:管理虚拟机的核心服务,通过调用Hypervisor API实现虚拟机生命周期管理。以一个守护进程的方式运行在计算节点上,专门负责创建虚拟机。
虚拟机各生命周期操作的真正执行者(会调用对应的hypervisor的driver)。
底层对接不同虚拟化的平台(KVM/VMware/XEN/Ironic等)
内置周期性任务,完成资源刷新,虚拟机状态同步等功能。
资源管理模块(resource_tracker)配合插件机制,完成资源的统计。
- Hypervisor:计算节点上跑的虚拟化管理程序,虚拟机管理最底层的程序。不同虚拟化技术提供自己的 Hypervisor。 常用的 Hypervisor 有 KVM,Xen, VMWare 等
- nova-conductor:介于nova-database和nova-compute之间,其目的在于消除nova-compute直接访问云数据库。保证了数据库的安全性。数据库操作,解耦其他组件(Nova- Compute)数据库访问;Nova复杂流程控制,如创建,冷迁移,热迁移,虚拟机规格调整,虚拟机重建;其他组件的依赖,如nova- compute需要nova- conductor启动成功后オ能启动;其他组件的心跳定时写入。
- 引入nova-conductor的好处:之前每个nova-compute都是直接访问数据库的。如果由于某种原因,某个计算节点被攻陷了,那攻击者就可以获取访问数据库的全部权限,肆意操作数据库,更加安全,升级更加方便
- nova-console:用户可以通过多种方式访问虚机的控制台: nova-novncproxy,基于 Web 浏览器的 VNC 访问 nova-spice html5 proxy,基于 HTML5 浏览器的 SPICE 访问 nova-xvpnvncproxy
- nova-consoleauth:负责对访问虚拟机控制台请求提供Token认证
nova-cert:提供x509证书支持
- nova-database:用于存储各个模块所需要的必要的信息。一般用Mysql即可。Nova会有一些数据需要存放到数据库中,一般使用MYSQL。数据库安装在控制节点上。nova使用命名为“nova”的数据库。负责持久化记录Nova管理下的各个物理节点上的逻辑资源数量。
- RabbitMQ:Nova 通过 Message Queue 作为子服务的信息中转站。OpenStack 默认是用 RabbitMQ 作为 Message Queue。 MQ 是 OpenStack 的核心基础组件。消息队列机制的实现,各个nova模块之间的通信几乎通过该队列实现,为各个模块传递消息。
3.Nova资源池管理架构
region:区域,地域。AWS 按地域(国家或者城市)设置一个 Region,每个 Region 下有多个 Availability Zone。Openstack 同样支持 Region 的概念,支持全球化部署,比如为了降低网络延时,用户可以选择特定的 Region 来部署服务。各个 Region 之间的计算资源、网络资源、存储资源都是独立的,但所有 Region 共享账户用户信息,因为 Keystone 是实现 openstack 租户用户管理和认证的功能的组件,所以 Keystone 全局唯一,所有 Region 共享一个 Keystone,Keystone endpoint 中存储了访问各个 Region 的 URL。
Availability Zone: AZ 的引入是基于安全的角度考虑,比如我们定义一个机房为一个 AZ,把该机房所有计算节点纳入到一个 AZ 中,其中一个机房因为某种原因down 掉,不会影响其它机房的虚拟机和网络;同时, AZ 对用户来说是一个可见的概念,用户创建虚拟机时,可以明确指出在哪个 AZ,用户可以通过在多个 AZ 创建虚拟机来保证高可靠性。同一个AZ使用同一个共享存储,AZ包含了计算存储以及网络资源,
Host Aggregate: 具有相同属性的主机集合;可以单纯地认为是计算资源,主机组由多个主机组成,如果后端虚拟化使用的是FusionCompute,一个主机对应一个集群;如果后端使用的是VMware,一个主机对应一个vCenter;如果是KVM,一个主机对应一个物理主机;主机组由多个主机组成,但同一个主机组只能使用一种虚拟机化技术
>> region>Availability Zone>Host Aggregate
4.nova典型操作
4.1nova主要操作对象
5.nova创建虚拟机流程
1.用户通过Dashboard/CLI 申请创建虚拟机,并以REST API 方式来请求KeyStone授权
2.Keystone鉴定后和送回auth-token(用来通过REST-call向其他组件发送请求)
3.Dashboard 或者 CLI 将创建虚拟机请求转换成REST API形式并发送给nova-api
4.nova-api 收到请求后向keystone发送请求验证auth-token并获取权限
5.Keystone 验证token并发送角色和权限更新的认证报头
6.nova-api 联系nova-database ,为新的实例创建初始数据库条目(此时虚拟机状态开始变成building)
7.nova-api 发送请求给 nova-scheduler ,以获得适合安装虚拟机的主机
8.nova-scheduler从 queue中拿到请求
9.nova-scheduler 联系 nova-database 通过过滤与权衡来查找最合适的主机
10.nova-scheduler 在过滤与权衡后返回最适合安装虚拟机的主机的ID
11.nova-scheduler 发送请求给 nova-compute ,请求创建虚拟机
12.nova-compute 从 queue中拿到请求,发送请求给 nova-conductor 以获取选定主机的信息,如规格 ( ram , cpu ,disk)
13.nova-conductor 从 queue中拿到请求,联系 nova-db,返回选定主机的信息
14.nova-conductor 将信息发送到 queue中
15.nova-compute 从 queue中得到选定主机的信息
16.nova-compute 通过传递auth-token给glance-api 进行REST调用,向glance 请求使用镜像服务
17.glance-api 与 keystone验证auth-token,nova-compute 得到镜像元数据
18.nova-compute 通过传递auth-token给Neutron-api进行REST调用,以获取网络服务
19.Neutron-api 与 keystone验证auth-token,nova-compute 得到网络信息
20.nova-compute 通过传递auth-token给Cinder-api 进行REST调用,以获取快存储服务
21.cinder-api 与 keystone验证auth-token,nova-compute 得到块存储信息
22.nova-compute 生成驱动数据,驱动hypervisor生成虚拟机,完成虚拟机创建
6.资源管理
- 资源申请
用户在创建虚拟机时,通过指定flavor,对Nova提出具体的资源使用量申请
- 资源调度
Nova根据flavor描述的资源类型与数量,对DB中记录的各个物理节点上的逻辑资源数量进行判断,选择出符合用户需求的节点,供创建虚拟机使用。
- 资源占用
Nova在选定的物理节点上创建虚拟机,此时实际占用资源
- 资源释放
当用户删除虚拟机时,虚拟机占用的资源真正被释放
7.nova调度流程
Nova调度过程,Nova-scheduler的Filter Scheduler
8.nova热迁移流程
l迁移成功后会清除源节点的信息。
l 迁移失败后会回滚,清除目标节点的信息。
REST API是一组关于如何构建Web应用程序API的架构规则、标准或指导,或者说REST API是遵循API原则的一种架构风格。REST是专门针对Web应用程序而设计的,其目的在于降低开发的复杂度,提高系统的可伸缩性。