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云平台。

openstack计算服务是什么.png

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架构图.png

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
Driver

3)对接不同的虚拟化平台

KVM
VMware
Xen
LXC
QEMU

4.Nova典型操作

典型操作.png

Nova主要操作对象
主要操作对象.png

主要操作对象2.png

虚拟机状态介绍
虚拟机状态介绍.png

Last modification:April 10th, 2020 at 10:49 am
如果觉得我的文章对你有用,请随意赞赏