【前导文章】
《水乳交融:论VMware与OpenStack的整合—(1)》(点击可打开)
《整合VMware与OpenStack—镜像驱动的实现原理》(点击可打开)
一、应用架构
VMware Cinder VMDK Driver块存储驱动的应用架构如下图所示:
VMDK Driver以VMDK格式支持Cinder Volume,即:以VMDK作为后端存储文件格式。Cinder Volume可以存于vSphere支持的任何存储解决方案中,Cinder Volume保存在使用iSCSI、Fibre Channel、FCoE、NFS、VSAN和VVOLs技术的数据存储上;
VMware Nova vCenter Driver与VMware Cinder VMDK Driver必须相配合使用。在nova.conf文件中将Compute Driver定义为vCenter Driver,在cinder.conf文件中将Volume Driver定义为VMDK Driver,并且,在各自的配置文件中,均设置为指向同一个vCenter Server的IP地址。
在Nova的配置文件nova.conf中,要进行相应的设置,如下:
在Cinder的配置文件cinder.conf中,要进行相应的配置,如下:
二、背景知识:Shadow VM(影子虚拟机)
从OpenStack环境中向VMware环境发起创建Cinder volume的操作时,会生成Shadow VM(影子虚拟机),在vSphere web client中,可以观察到其存在,如下图所示:
对上图所示的Shadow VM,其相关背景如下:
(1)在上图中,以“volume”为名字首部的虚拟机是Shadow VM,其上挂载VMDK,永远不会开机启动;
(2)在VMware中,Volume是隶属于虚拟机的二级Object,无法脱离虚拟机而存在。因此,在VMware中,无法单独创建一个Volume,只能在创建虚拟机时创建Volume;
(3)在OpenStack Cinder Service中,Volume是一种独立的对象。
由于以上所述的原因,使用VMware Cinder VMDK Driver创建Volume时,Volume(即VMDK)必须与Shadow VM进行关联。Shadow VM只能在VMware的管理界面上显示,对OpenStack用户而言,在Dashboard里无法看到Shadow VM的存在。
三、技术概览
(1)VMware Cinder VMDK Driver用于管理基于vSphere数据存储的卷(Volume)
Ⅰ)通过vCenter管理
VMware Cinder VMDK Driver连接到vCenter,通过vCenter,对被管理Cluster中的ESXi主机可见的所有数据存储进行动态的访问和管理。
Ⅱ)将vCenter管理的存储资源作为块设备
通过VMDK及其相关的数据存储提供的抽象层,对vCenter管理的存储资源,VMware Cinder VMDK Driver将其作为块设备暴露给OpenStack的Cinder块存储服务,这意味着Cinder Volume可由数据存储上的VMDK文件支持,而数据存储则包括任何使用兼容VMware存储技术的NFS、iSCSI、FiberChannel和vSAN。
(2)Volume的创建和挂载
Ⅰ)使用时再创建
创建一个Volume时,Cinder VMDK Driver将根据需要相应地创建一个VMDK文件,但是,此时并没有实际地执行创建VMDK文件的操作。这一操作要等到第一次将Volume挂载到指定虚拟机的时候,伴随着Shadow VM的创建才能完成。
这样设计的缘由是:当物理主机无法连接Datastore时,在物理主机上创建的虚拟机也无法挂载Datastore上的Volume,在这种情况下,必须调用Storage vMotion以在不同Datastore上迁移Volume,而这会产生相当的资源开销。因此,在要将Volume实际地挂载到虚拟机上的时候再创建Volume,这样的设计可以将Volume创建在虚拟机所在的物理主机能够访问得到的Datastore上,尽可能地避免资源开销;
Ⅱ)Shadow VM的作用
在Volume创建之后和将其实际地挂载到虚拟机之间,Shadow VM(影子虚拟机)用于“停泊”VMDK文件(对应于Cinder Volume),Shadow VM一直关机且不消耗资源。
Ⅲ)挂载Volume
A. 如果Volume从未被挂载,那么Volume及其Shadow VM尚不存在,于是,在将要挂载Volume的虚拟机所在物理主机可见的数据存储(data store)里,创建Volume及其Shadow VM,然后,将Volume从Shadow VM上卸载,再挂载给提出挂载要求的虚拟机。
B. 如果Volume曾经被挂载过,对于提出挂载要求的虚拟机所在的物理主机而言:
Volume及其Shadow VM所在的数据存储(data store)是可见的,那么,将Volume卸载,再挂载给提出挂载要求的虚拟机;
Volume及其Shadow VM所在的数据存储(data store)是不可见的,那么, Storage vMotion将会首先被调用,将Volume迁移到物理主机可见的data store上,然后,将Volume卸载,再挂载给提出挂载要求的虚拟机。
(3)VMDK磁盘文件类型
VMware Cinder VMDK Driver支持3种VMDK磁盘文件类型,即:thin、lazyZeroedThick和eagerZeroedThick,设置时可以使用vmware:vmdk_type参数去指定VMDK的磁盘文件类型,这3种磁盘类型的技术特性如下:
Ⅰ)Thin:只有在需要时才会分配磁盘空间并对其写零,thin磁盘在创建时花费的时间较短。
Ⅱ)lazyZeroedThick:在创建时就分配磁盘空间,但直到第一次写入时才对磁盘写零。
Ⅲ)eagerZeroedThick:在创建时就分配磁盘空间,并对磁盘写零。
(4)克隆类型
使用VMware Cinder VMDK Driver,可以从其他源Volume或快照点创建Volume,支持Full和Linked/Fast克隆类型,设置时使用vmware:clone_type参数去指定克隆类型。
Ⅰ)完整克隆:Full,克隆虚拟机和源虚拟机是两个完全独立的实体,源虚拟机的修改和删除不会影响到克隆虚拟机的运行。缺点是不同虚拟机需要各自占用完全独立的磁盘空间。
Ⅱ)链接克隆: Linked/Fast,克隆虚拟机必须在源虚拟机存在的情况下才能运行,但优点是多个克隆虚拟机之间的公共部分(共同来自源虚拟机的部分)可以共用同一份磁盘空间。
(5)用vCenter存储策略去指定后端的数据存储(data store)
在vCenter 5.5及后续版本中,可以创建一个或多个存储策略,并通过使用vmware:storage_profile参数,将存储策略作为块存储的Volume类型暴露给VMware Cinder VMDK Driver。
比如,在vCenter中有一个名为gold_policy的存储策略,而在一个名为vol_01的块存储Volume类型中,其vmware:storage_profile值被设置为gold_policy,那么,任何使用名为vol_01的Volume类型创建的块存储Volume,都会把Volume创建在与gold_policy存储策略相匹配的数据存储上。
《整合VMware与OpenStack》的下一篇,将先对VMware Neutron NSX Driver网络驱动的应用场景作简要讨论,然后,对整合VMware和OpenStack的技术手段进行总结和进一步的延伸讨论,进而讨论构建VMware与OpenStack共生环境的方法。