1.5计算管理nova
  A4xxB2Tgmb33 2023年11月02日 44 0

1 简介

1.1定位

Nova即OpenStack Compute service,负责提供计算资源的模块

Nova不包括虚拟化软件,Nova定义与底层虚拟化机制交互的驱动程序,并通过基于Web的API公开功能

1.2交互服务

依赖Keystone认证服务、Neutron网络服务和Glance镜像服务,通过Nova模块创建计算实例,Nova调用Glance模块提供的镜像服务,通过Nova模块创建的计算实例启动时,连接到的虚拟或物理网络由Neutron负责

1.3作用

使命:实施服务和相关库,提供对计算资源(包括裸金属、虚拟机和容器)的大规模可扩展、按需、自助访问

Nova负责虚拟机生命周期管理其他计算资源生命周期管理

Nova不负责承载虚拟机的物理主机自身的管理全面的系统状态监控

2 架构

1.5计算管理nova_创建虚拟机

API: 接收 HTTP 请求、转换命令并通过oslo.messaging队列或 HTTP与其他组件通信的组件。

Scheduler: 为虚拟机选择合适的物理主机。

Compute: 虚拟机生命周期和复杂流程控制。

Conductor: 处理需要协调( 建/调整大小)的请求,充当数据库代理或处理对象转换。

Placement:跟踪资源提供者的库存和使用情况。

RPC: Remote Procedure Call,远程过程调用,是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。

nova内部组件通过RPC消息传递机制通信,外部使用HTTP通信

AP服务器处理REST请求,通常涉及数据库读写,将RPC消息发送到其他Nova服务(可选),并生成对REST调用的响应

RPC消息传递是通过oslo.messaging库完成的,它是消息队列之上的抽象

Nova使用基于消息传递的“无共享”架构,大多数主要的nova组件可以在多个服务器上运行,并且有一个监听RPC消息的管理器

2.1 部署实例

1.5计算管理nova_数据库_02

1.5计算管理nova_创建虚拟机_03

Nova服务各组件可分布式部署,且可通过virtDriver对接不同的虚拟化平台

1.5计算管理nova_创建虚拟机_04

Region > Availability Zone > Host Aggregate.

1.5计算管理nova_消息队列_05


1.5计算管理nova_消息队列_06

引入nova-conductor的好处:

安全性上考虑。之前每个nova-compute都是直接访问数据库的。如果由于某种原因,某个计算节点被攻陷了,那就可以获取访问数据库的全部权限建意操作数据库。

方便升级。将数据库和nova-compute解耦,如果数据库的模式改变,nova-Dcompute就不用升级了。

性能上考虑。之前数据库的访问在nova-compute中直接访问且数据库访问是阻塞性的,由于nova-compute只有一个os线程,所以当一个绿色线程去访问数据库的时候会阻塞其他绿色线程,导致绿色线程无法并发。但是nova-conductor是通过rpc 调用,rpc调用是绿色线程友好的,一个rpc call的执行返回前不会阻塞其他绿色线程的执行。这样就会提高了操作的并发。

1.5计算管理nova_消息队列_07

Nova-Scheduler: 确定将虚拟机分配到哪一台物理机,分配过程主要分为两步,过滤和权重;用户创建虚拟机时会提出资源需求,例如CPU、内存、磁盘各需要多少,OpenStack将这些需求定义在flavor中,用户只需要指定flavor就可以了。

调度过程分为两步:

通过过滤器选择满足条件的计算节点;

通过权重选择最优的节点。

1.5计算管理nova_数据库_08

虚拟机生命周期操作的真正执行者( 会调用对应的hypervisor的driver )底层对接不同虚拟化的平台(KVM/VMware/XEN/Ironic等)。内置周期性任务,完成资源刷新,虚拟机状态同步等功能。资源管理模块 ( resource tracker) 配合插件机制,完成资源的统计


3 工作原理和流程

1.5计算管理nova_数据库_09

1.5计算管理nova_消息队列_10

1.5计算管理nova_消息队列_11

1.5计算管理nova_消息队列_12

Step1: 用户通过Dashboard/CLI 申请创建虚拟机,并以REST API方式来请求Keystone授权。

Step2: keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求Step3: 界面或命令行通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token )

Step4: nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。

Step5: keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。

Step6: 通过认证后nova-api和数据库通讯。

Step7: 初始化新建虚拟机的数据库记录。

Step8: nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源( HostID)。

Step9: nova-scheduler进程侦听消息队列,获取nova-api的请求

Step10: nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。

Step11: 对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。

Step12: nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。

Step13: nova-compute会从对应的消息队列中获取创建虚拟机请求的消息

Step14: nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息。

Step15: nova-conductor从消息队队列中拿到nova-compute请求消息。

Step16: nova-conductor根据消息查询虚拟机对应的信息。

Step17: nova-conductor从数据库中获得虚拟机对应信息。

Step18: nova-conductor把虚拟机信息通过消息的方式发送到消息队列中

Step19: nova-compute从对应的消息队列中获取虚拟机信息消息。

Step20: nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。

Step21: glance-api向keystone认证token是否有效,并返回验证结果

Step22: token验证通过,nova-compute获得虚拟机镜像信息 ( URL)。

Step23: nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。

Step24: neutron-server向keystone认证token是否有效,并返回验证结果。

Step25: token验证通过,nova-compute获得虚拟机网络信息。

Step26: nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。

Step27: cinder-api向keystone认证token是否有效,并返回验证结果

Step28: token验证通过,nova-compute获得虚拟机持久化存储信息

Step29: nova-compute根据instance的信息调用配置的虚拟化驱驱动来创建虚拟机。

1.5计算管理nova_创建虚拟机_13

1.5计算管理nova_消息队列_14

1.5计算管理nova_创建虚拟机_15

4 典型操作

1.5计算管理nova_数据库_16

1.5计算管理nova_消息队列_17

1.5计算管理nova_消息队列_18

5、缩略语

KVM: Kernel-based Virtual Machine,基于内核的虚拟机,是一种内建于Linux@ 中的开源虚拟化技术。 具体而言,KVM 可帮助您将Linux 转变为虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境,即虚拟客户机或虚拟机。

MQ: Message Queue,消息队列,分布式消息队列是系统中各个服务以及服务管理进行消息传递的途径。消息队列能够处理域内部以及跨域的消息传输,需要能够水平扩展以支持大容量并发消息发送请求,并且提供方便的SDK供其他服务调用。

QEMU: Quick Emulator,是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以GPL许可证分发源码的模拟处理器软件

Web: World Wide Web,全球广域网,也称为万维网,它是一种基于超文本和HTTP的全球性的、动态交互的、跨平台的分布式图形信息系统。

WSGI: Web Server Gateway Interface,Web服务网关接口,是Python应用程序或框架和Web服务器之间的一种接口。

Xen: 是一个开源的采用半虚拟化技术的VMM,负责在各虚拟机之间进行CPU调度和内存分配。Xen Hypervisor抽象出硬件层,并控制虚拟机的执行,但不会处理网络、存储设备、视频以及其他I/0( 输入/输出)。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

A4xxB2Tgmb33
作者其他文章 更多