OpenStack是公有云的标准云OS框架,目前已经得到各个云厂商支持和客户的认可,很多云解决方案提供商都把云战略转向OpenStack,如传统厂商方案 SoftLayer、Helion、FusionSphere、Suse和Redhat等,以及新型云服务商的方案,如RackSpace、Miratis、Nebula、ClouScaling、MetaCloud、PistonCloud、Canonical等。今天我们来讨论一下OpenStack如何与底层Hypervisor对接和技术原理。

OpenStack和Nova模块

      Nova是OpenStack中管理计算的模块,也是OpenStack众多服务中的一个关键模块,Nova可以为用户按需分配虚拟机,在OpenStack中,Nova是一种服务,而这种服务又由Nova中的几种组件来完成。

openstack hypervisor openstack hypervisor memeroy_openstack

Nova在组成架构上是由Nova-Api/Nova-Sheduler/Nova-Compute等一些关键组件构成,而这些组件都各司其职,具体功能可以查阅OpenStack社区文档中对于各个组件的定义,但是所有组件的通信机制都是通过队列Queue来完成。如上图所示,Nova-Compute组件直接和Hypervisor交互,这就是我们今天要说的重点,Nova如何实现与Hypervisor对接。

OpenStack支持的Hypervisor

      OpenStack提供了一个开放的云计算管理架构,OpenStack自身不提供服务器虚拟化功能,但是支持与不同服务器虚拟化Hypervisor对接。我们熟悉的Hyervisor,例如KVM/Xen和基于他们衍生出来的Hypervisor,在openStack社中也提到Nova-Compute也可以支持LXC(如Docker)、UML、VMware vSphere、Power VM、Hyper-V等虚拟化软件。

openstack hypervisor openstack hypervisor memeroy_openstack_02

Nova-comupte与KVM关系

      由于KVM在OpenStack社区中代码贡献非常高,所以在OpenStack中首选和默认的Hypervisor就是KVM。接下来我们就重点介绍下Nova与KVM是怎么工作的。

      我们从KVM部署入手解析整个对接过程,假如有10台物理服务器用来部署整个OpenStack KVM环境,用第一台服务器部署Nova-Api /Nova-Conductor /Nova-Scheduler作为控制节点,而剩下的9台服务器都作为计算节点,安装部署了Hypervisor KVM和Nova-Computer。

openstack hypervisor openstack hypervisor memeroy_openstack_03

当需要创建虚拟机时,控制节点将通过Nova-Scheduler通过一系列算法(在Openstack社区中定义了30几种Scheduler调度算法)算出计算节点10比较适合建立虚拟机,比如根据CUP使用情况、内存使用情况等。然后Nova-scheduler就通知该计算节点(例如节点10)的Nova-computer完成虚拟的创建。

      Nova-Scheduler组件和Nova-Computer组件之间通信是通过消息队列Queue来完成。Nova-Computer接着会通过Driver来告诉KVM需要的虚拟化资源,Driver(Nova-compute Driver)是由不同虚拟化Hypervisor厂商提供,进行接口和功能适配。

Nova-Computer通过Driver并且通过Libvirt来与KVM对接。由于Libvirt 本身构建于一种抽象的概念之上。它为受支持的Hypervisor提供的常用功能提供通用的API。Nova-Computer通过Driver并且通过Libvirt来与KVM对接。

openstack hypervisor openstack hypervisor memeroy_虚拟化_04

Libvirt架构介绍

      Libvirt是开源虚拟化方案的一个重要模块,实质上是基于虚拟化的语言函数库,介于Openstack和底层虚拟化Hypervisor(如KVM/Xen等)之间。Libvirt将底层具体虚拟化实现屏蔽,对Openstack呈现统一个管理接口调用来完成各类虚拟机的动作(如虚拟机启动、休眠唤醒、热迁移等操作)。

openstack hypervisor openstack hypervisor memeroy_服务器_05

Libvirt采用了CS架构设计,对外承接整合服务器的云管理,对内监控整合服务器的虚拟任务完成情况。Libvirt客户端直接对接OpenStack云管理平台,以API的形式下发的各种管理命令,Libvirt服务端(Libvirtd)接收并处理命令,Libvirtd收到命令后,通过事件机制检测命令,如果任务可以由Libvirtd独立完成的,则处理并返回结果;否则通过Socket通信机制将命令发给下层虚拟化Hypervisor来完成。

openstack hypervisor openstack hypervisor memeroy_openstack_06

 

 简单概括下Openstack Nova与Hypervisor对接整个过程。虚拟机创建等需要提交后,通过安装了Nova-Scheduler等模块的控制节点找到Nova-computer,然后通过Libvirt在发送消息给具体的KVM虚拟化管理程序,在OpenStack KVM方案中,Nova-scheduler根据不同调度策略通过Nova-Computer找到一台满足要求且安装了KVM的服务器,当然还需要Nova-Compute Driver和Libvirt的协助。