OpenStack之Nova

半兽人 发表于: 2023-02-22   最后更新时间: 2023-03-08 20:52:05  
{{totalSubscript}} 订阅, 904 游览

Nova概述

IaaS的核心组件,也是openstack的核心组件,提供云计算服务、虚拟化服务,Nova本身不支持虚拟化,而是去管理底层的虚拟化(KVM 或 redhat)。

计算

Nova项目也是有好几个组件构成,组件的关系架构图如下,其中网络模块一个是Nova-networking,一个是Neutron,现在大部分使用的都是Neutron

Nova组件

可以看到,在Nova中,有这么几个主要的服务:

  • Nova-api:用于接收请求,请求的发起方可以是用户通过命令或者程序编程接口GUI
  • Scheduler:调度服务,如果接收到的是新建虚拟机请求,Scheduler需要选择一个compute去启动一个虚拟机。
  • Compute Manager:管理虚拟机的启动、关闭、停止,管理虚拟化的整个生命周期。Compute Manager并不直接管理虚拟机,而是通过编写的底层驱动 Compute Driver 去控制 Libvirt(redhat开发的虚拟机管理平台),Libvirt再而控制 KVM、Xen等虚拟化平台。
  • DB:用于数据存储的基础设施数据库。
  • Conductor:即nova-conductor服务,处理需要协同合作的请求,比如创建实例和调整实例等操作;同时还扮演了数据库代理的角色或者是处理对象转换。

在这个图中,值得注意的一点是Nova的几个主要服务组件之间,是通过oslo.messaging进行RPC调用,与外部服务之间通过HTTP的方式、RESTFul接口进行通讯和交互。

OpenStack Nova

Hypervisor

在Compute中,有一个 Hypervisor ,这又是什么呢?

我们说,OpenStack其实是一个云管平台,即其本身不提供虚拟化功能,还是要依赖于操作系统底层的虚拟化技术,其中Hypervisor是虚拟化技术的核心。它是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor)

目前常见的HypervisorQEMUKVMXENVMware等,其中,KVM是集成到Linux内核的Hypervisor,是X86架构且硬件支持虚拟化技术(Intel VTAMD-V)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。最为热门,也最为常用。

qemu-kvm

此外,需要提一下qemu-kvm。

QEMU将KVM整合进来,通过ioctl调用/dev/kvm接口,将有关CPU指令的部分交由内核模块来做。KVM负责CPU虚拟化+内存虚拟化,实现了CPU和内存的虚拟化,但KVM不能模拟其他设备。QEMU模拟IO设备(网卡,磁盘等),KVM加上QEMU之后就能实现真正意义上服务器虚拟化。因为用到了上面两个东西,所以称之为qemu-kvm,看图:

qemu-kvm

如果还没理解,可以查看这篇文章:Openstack(nova)、kvm、qemu和libvirtd之间关系

Libvirt

在KVM这一层之上,是libvirt,它提供统一、稳定、开放源码的对各种虚拟机进行管理的工具(守护进程libvirtd、默认命令行管理工具virsh)和应用程序接口(API)。一些常用的虚拟机管理工具(如virsh、virt-install、virt-manager等)和云计算框架平台(如OpenStack等)都在底层使用libvirt的应用程序接口。

Libvirt支持的多种虚拟化监视器(hypervisor)

Libvirt支持的多种虚拟化监视器(hypervisor)

Openstack与Libvirt的关系

openstack nova计算驱动

nova实质上有两种形式,通常由一个Controller和多个Compute计算节点组成,用户通过命令想nova-api发起创建一个虚拟机请求,nova-api向消息队列(queue)编写数据,随后调度Scheduler、nova-network、nova-volumne。调度成功后也向消息队列写数据,最后Compute接收到消息队列的数据开始响应请求。

screenshot

虚拟机启动流程

如果创建虚拟机没有指定节点,进行权重计算,计算各个节点的剩余资源,Libvirty会自动检测(一般是1分钟)资源并保存在数据库中,nova-Scheduler可以在数据库拿到节点资源,一旦有新的数据写入Compute节点,会马上更新资源统计并保存在数据库。

screenshot

更新于 2023-03-08

查看OpenStack更多相关的文章或提一个关于OpenStack的问题,也可以与我们一起分享文章