openstack-nova

nova简介

nova是openstack的核心组件之一,负责与计算相关的服务,例如对虚拟机的生命周期进行管理,nova是一个针对虚拟机相关操作的一个组件,但是nova不提供任何虚拟化的功能,nova通过第三方接口,例如libvirt api,调用Hypervisors,因此nova可以支持多种虚拟化技术,例如KVM、QEMU、Xen、VMWare等等。nova内部组件之间通过RPC方式通信,nova与外部组件通过http方式通信,且共同使用一个novaDB来存储数据,nova的每个组件都可以部署一个或者多个以实现横向扩展。

API:对应nova中的nova-api服务,对外提供REST API服务,是nova服务的入口,任何第三方组件发送的请求都先到达API,再由API转发给nova内部的各个组件。

Conductor:对应nova中的nova-conductor服务,提供长时间任务编排功能,如将虚拟机的启动、冷迁移、热迁移抽象成任务,对任务状态进行跟踪。其次为compute提供数据库的代理访问机制,出于安全性和可扩展性的考虑,compute不能直接访问数据库。

Compute:对应nova中的nova-compute服务,提供计算服务,通过调用不同Hypervisor的API来完成对虚拟机生命周期的管理。

Scheduler:对应nova中的nova-scheduler服务,提供对计算资源的调度,通过多种算法来应对不同场景下nova对资源的调度,算法与scheduler是松耦合的,可以自定义算法。

placement:对应nova中的nova-placement服务,提供计算资源的管理,其核心是帮助用户寻找满足资源需求的设备。(注:S版本之后,placement组件被剥离出nova项目,成为一个独立的项目)

nova不通服务间的通信

nova-cert:顾名思义,是与证书有关的服务,用于为上传镜像生成X509证书,作为rpc server运行,对外提供证书有关的RpcAPI,作用和CA类似,仅用于调用openstack兼容EC2的API时候使用,。

nova-objectstore:Nova对象存储接口服务,通过此服务来访问swift和S3。

nova-consoleauth:提供VNC的token认证。

nova-console:提供VNC访问虚拟机的服务

nova组件之间没有直连,消息的投递和获取都是通过消息队列,nova-compute与数据库也没有直接联系,nova-compute需要读写数据库时,将请求发送给消息队列,nova-comductor从消息队列读取该请求,再由nova-conductor按照请求读写数据库。

nova组件是相互独立的,可以根据自己需要进行部署和配置,上图中还有一些组件没有没有列出来,例如:nova-xvpvncproxy、nova-spicehtml5proxy、nova-novncproxy、nova-api-metadata等等。

scheduler的调度流程

scheduler的主要功能是实现主机的调度,当创建虚拟机时,scheduler根据用户提供的Flavor以及nova-scheduler对云平台的主机设置进行筛选,选出最合适的主机进行虚拟机的创建,大体流程如下:

1.节点过滤

通过Filters选择满足条件的节点

2.权重计算

通过计算权重,选择权重最小的节点

compute对hypervisor的调用

nova-compute通过调用Hypervisor实现对实例的生命周期的管理,但是Hypervisor有多种类型,nova-compute为了对接各种类型的Hypervisor采用了Diver架构,nova-compute 为这些 Hypervisor 定义了统一的接口,Hypervisor 只需要实现这些接口,就可以 Driver 的形式即插即用到 OpenStack 系统中。

nova创建虚拟机的流程

1.获取token

1~3,客户端发起请求时,需要携带自己的用户名/密码,发送到keystone

进行认证,认证成功后,keystone生成一个token,keystone将token和endpoint一起返回。

2.认证token

4~5,nova-api收到请求后,使用请求携带的token到keystone去验证token的有效性,验证通过之后,才会向下传递。

3.参数检查

6~7,参数检查有nova-api发起,检查的内容包括:虚拟机命名是否合法、用户提供的Flavor是否存在、虚拟机使用的镜像是否存在、CPU/RAM的配额情况等等,如果检查通过,则会再第7步更新数据库。

4.nova-api与nova-scheduler的请求传递

8~11,nova-api向消息队列投递”创建虚拟机”的请求,nova-scheduler从消息队列获取”创建虚拟机”的请求,nova-scheduler从数据库中获取主机信息,再通过Filter和Weighting,选出符合条件的主机。

5.nova-scheduler与nova-compute的请求传递

12~13,nova-scheduler通过消息队列将筛选出的主机信息传递给nova-compute,给nova-compute使用。

6.nova-compute与nova-conductor的请求传递

14~18,nova-compute通过消息队列将要更新的数据传递给nova-conductor,再由conductor将更新的数据读写入数据库。

7.nova-compute与glance进行交互

19~21,nova-compute从glance中拉取镜像到本地,交互时,glance也需要到keystone进行验证。

8.nova-compute与neutron进行交互

22~24,nova-compute从neutron获取网络资源,交互时,neutron也需要到keystone进行验证。

9.nova-compute与cinder进行交互

25~27,nova-compute从cinder获取块存储资源,交互时,cinder也需要到keystone进行验证。

10.生成libvirt.xml脚本

libvirt.xml脚本被Hypervisor调用,用于虚拟机的创建,创建出来的虚拟机以一个qemu-kvm进程的形式运行再主机上。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值