Nova计算服务
1.Nova服务简介
Nova是OpenStack中提供计算资源服务的项目,OpenStack计算的弹性控制器。
Nova提供大规模、可扩展、按需自助服务的计算资源。
Nova支持管理裸机,虚拟机和容器。不负责承载虚拟机的物理主机自身的管理、全面的系统状态监控。
计算服务首次出现在OpenStack的“Austin” 版本中。OpenStack大部分集成项目和Nova之间都存在配合关系
OpenStack最初几个版本中,计算、存储、网络都由Nova实现,后面逐步拆分出存储和网络。
目前Nova专注提供计算服务,依赖Keystone的认证服务,Neutron的网络服务,Glance的镜像服务
OpenStack Compute这个名称指的是一个特定的项目,该项目也被称为Nova,OpenStack的其他组件依托Nova,与Nova协同工作,组成了整个OpenStack云平台。
Nova是什么?
OpenStack中提供计算资源服务的项目
Nova负责什么?
虚拟机生命周期管理
其他计算资源生命周期管理
Nova不负责什么?
承载虚拟机的物理主机自身的管理
全面的系统状态监控
Nova是OpenStack事实上最核心的项目
历史最长: QpenStack 首批两个项目之一
功能最复杂,代码量最大
大部分集成项目和Nova之间都存在配合关系
贡献者在社区中的影响力最大
2.Nova架构
Nova架构图
oslo.messaging库就是把rabbitmq的Python库做了封装,在openstack中调用RPC通信就要调用oslo.messaging库,为RPC和事件通知提供一套统一的接口。
Nova内部服务使用REST调用,Nova和其他OpenStack服务交互时,使用消息队列。
Nova-api 接受rest消息。
Nova-scheduler 选择合适的主机
Nova-conductor 数据库操作和复杂流程控制
Nova-compute 虚拟机生命周期管理和资源管理
Nova集合了多个服务进程,每个进程扮演着不同的角色。用户通过REST API进行访问,Nova的内部服务通过RPC消息进行服务通信。API服务产生数据读写的REST请求,然后产生REST应答。内部服务通信通过oslo.messaging库的PPC消息实现消息的通信。大部分服务进程共用一个中心数据库,也可以吧中心数据放到对象层,实现不同OpenStack发布版本的兼容性。
Nova运行架构
Nova服务各组件可分布式部署,且可通过virtualDriver对接不同的虚拟化平台。
Nova资源池管理架构
Region > Availability Zone > Host Aggregate
3、Nova组件
(1)Nova-API对象功能:
对外提供REST接口,接收和处理请求。
对传入参数进行合法性校验和约束限制。
对请求的资源进行配额的校验和预留。
资源的创建,更新,删除查询等。
虚拟机生命周期管理的入口。
wsgi 是一个 web 组件的接口规范,wsgi将 web 组件分为三类: web服务器,web中间件,web应用程序。
WSG全称Web Server Geteway Interface
1)WSGI Server/gateway
wsgi server可以理解为一个符合wsgi规范的web server,接收request请求,封装一系列环境变量,按照wsgi规范调用注册的wsgi app,最后将response返回给客户端。
wsgi server 基本工作流程:
a)服务器创建socket,监听端口,等待客户端连接。
b)当有请求来时,服务器解析客户端信息放到环境变量environ中,并调用绑定的handler来处理请求。
c)handler解析这个http请求,将请求信息例如method,path等放到environ中。
d)wsgi handler再将一些服务器端信息也放到environ中,最后服务器信息,客户端信息,本次请求信息全部都保存到了环境变量environ中。
e)wsgi handler 调用注册的wsgi app,并将environ和回调函数传给wsgi app
f)wsgi app 将reponse header/status/body 回传给wsgi handler
g)最终handler还是通过socket将response信息塞回给客户端。
2)WSGI Application
wsgi application就是一个普通的callable对象,当有请求到来时,wsgi server会调用这个wsgi app。这个对象接收两个参数,通常为environ,start_response。environ就像前面介绍的,可以理解为环境变量,跟一次请求相关的所有信息都保存在了这个环境变量中,包括服务器信息,客户端信息,请求信息。start_response是一个callback函数,wsgi application通过调用start_response,将response headers/status 返回给wsgi server。
3)WSGI MiddleWare
middleware 包装,可以给wsgi app添加功能,然后还可以在这个app外面再加上其它的middleware来包装它,例如加一个权限认证的middleware。只要这些Middleware符合wsgi规范,甚至还可以在各个框架之间组合重用。
(2)Nova组件 – Conductor
1)Nova-Conductor功能:是OpenStack中的一个RPC服务,主要提供对数据库的查询和权限分配操作。
数据库操作,解耦其他组件(Nova-Compute)数据库访问。
Nova复杂流程控制,如创建,冷迁移,热迁移,虚拟机规格调整,虚拟机重建。
其他组件的依赖,如nova-compute需要nova-conductor启动成功后才能启动。
其他组件的心跳定时写入。
2)引入nova-conductor的好处:
安全性上考虑。之前每个nova-compute都是直接访问数据库的。如果由于某种原因,某个计算节点被攻陷了,那攻击者就可以获取访问数据库的全部权限,肆意操作数据库。
方便升级。将数据库和nova-compute解耦,如果数据库的模式改变,nova-compute就不用升级了。
性能上考虑。之前数据库的访问在nova-compute中直接访问且数据库访问是阻塞性的,由于nova-compute只有一个os线程,所以当一个绿色线程去访问数据库的时候会阻塞其他绿色线程,导致绿色线程无法并发。但是nova-conductor是通过rpc 调用,rpc调用是绿色线程友好的,一个rpc call的执行返回前不会阻塞其他绿色线程的执行。这样就会提高了操作的并发。
(3)Nova组件 – Scheduler
Nova-scheduler:确定将虚拟机分配到哪一台物理机,分配过程主要分为两步,过滤和权重;用户创建虚拟机时会提出资源需求,例如CPU、内存、磁盘各需要多少,OpenStack将这些需求定义在flavor中,用户只需要指定flavor就可以了。
1)Nova-Scheduler功能
筛选和确定将虚拟机实例分配到哪一台物理机。
分配过程主要分为两步,过滤和权重:通过过滤器选择满足条件的计算节点;
通过权重选择最优的节点。
(4)Nova组件 – Compute
1)Nova Compute功能
虚拟机各生命周期操作的真正执行者(会调用对应的hypervisor的driver)。
底层对接不同虚拟化的平台(KVM/VMware/XEN/Ironic等)
内置周期性任务,完成资源刷新,虚拟机状态同步等功能。
资源管理模块(resource_tracker)配合插件机制,完成资源的统计。
2)Nova-Compute框架
Manager
Driver3)对接不同的虚拟化平台
KVM
VMware
Xen
LXC
QEMU
4.Nova典型操作
Nova主要操作对象
虚拟机状态介绍