分享

VMware接入Openstack方案分析

问题导读
1、Nova项目中目前有两个VMware相关的Driver有哪些?
2、ESXDriver与其他Hypervisor的接入方式有哪些差别?
3、创建虚拟机时不用下载镜像的更加理想的方式是什么?






在Openstack中Nova项目中目前有两个VMware相关的Driver(ESXDriver,VCDriver)。
从名字上可以清楚的看出来,一个是涉及ESX的Driver,一个是涉及VCenter的Driver。
ESXDriver最早是由Citrix贡献的,VCDriver由Vmware提供。
ESXDriver将ESX作为Hypervisor接入Openstack, VCDriver将Vcenter集群做为Hypervisor接入Openstack。
ESXDriver方式导致的Vmware一些集群特性的丢失,VCDriver方式则解决了这些未能,当然也引入了一些新的问题(后续再说)。
VCDriver更多的体现了Vmware与Openstack的互补,一方面是VMware现有的存量很大,而且很多企业应用并非按照云的思想开发;另一方面新的应用多以云的思想开发。两者互补满足用户需求,这也符合当前各厂商对混合云趋势的共识。

ESXDriver
ESXDriver与其他Hypervisor的接入方式略有差别。
主要有以下缺点:
与KVM等不同,VM跑在ESXi上,并非nova-compute所在节点。
ESXDriver限制,每个nova-compute服务仅支持一台ESXi主机。
不支持VCenter上高级特性,比如DRS。
1.JPG



VCDriver
介绍本文主要介绍VCDriver方式接入。这种方式将集群作为Hypervisor接入,自然就拥有了HA,DRS,VMotion能力。
目前每个compute节点只能同时支持一种hypervisor。Grizzly每个compute服务只能支持一个VCenter集群,Havana版本已经去除了这个限制。
VCDriver中每个cluster都要有一个Datastore进行配置和使用。
由于cluster作为一个hypervisor整体呈现,也带来了资源跨ESXi节点的问题,具体来说就是作为Hypervisor整体呈现的CPU、内存资源很充足,但是创建虚拟机是发现任何一个节点的资源都不满足虚拟机需要的情况。
接入图示
1.png


1.JPG



接入方法
nova.conf文件的配置。(使用VCDriver将c1集群接入)
  1. [DEFAULT]  
  2. compute_driver = vmwareapi.VMwareVCDriver  
  3. [vmware]  
  4. host_password = Huawei-123  
  5. host_username = Administrator@vsphere.local  
  6. host_ip = 186.100.21.221  
  7. #datastore_regex = NOT DEFINED  
  8. cluster_name = c1            #可以支持配置多个cluster   
复制代码



解释:
compute_driver指定所使用的Driver。
host_password/username/ip 用于连接vcenter server。cluseter_name 指定所管理的Vmware集群,从Havana版开始可以指定多个。
datastore_regex datastore配置格式,指定可以使用的datastore。


镜像的使用
从上边图示部分可以看出,镜像从Glance上下载到Vmware的datastore上。
过程是在compute节点上调用glance API下载镜像然后使用VMware的API将镜像写到datastore上。
这样一个传输过程无疑是耗费compute资源并且低效的。
Cinder中基于镜像创建卷过程与此类似,这里不再赘述。
  1. #virt/vmwareapi/vmware_images.py
  2. def fetch_image(context, image, instance, **kwargs):
  3.     """Download image from the glance image server."""
  4.     LOG.debug(_("Downloading image %s from glance image server") % image,
  5.               instance=instance)
  6.     (image_service, image_id) = glance.get_remote_image_service(context, image)
  7.     metadata = image_service.show(context, image_id)
  8.     file_size = int(metadata['size'])
  9.     read_iter = image_service.download(context, image_id)
  10.     read_file_handle = read_write_util.GlanceFileRead(read_iter)
  11.     write_file_handle = read_write_util.VMwareHTTPWriteFile(
  12.                                 kwargs.get("host"),
  13.                                 kwargs.get("data_center_name"),
  14.                                 kwargs.get("datastore_name"),
  15.                                 kwargs.get("cookies"),
  16.                                 kwargs.get("file_path"),
  17.                                 file_size)
  18.     start_transfer(context, read_file_handle, file_size,
  19.                    write_file_handle=write_file_handle)
  20.     LOG.debug(_("Downloaded image %s from glance image server") % image,
  21.               instance=instance)
复制代码


更加理想的方式,是将datastore作为glance的后端,这些创建虚拟机时就不用如此下载镜像。
目前社区已经有类似的BP设想。

已有(2)人评论

跳转到指定楼层
linhai1023 发表于 2014-9-10 20:46:21
谢谢楼主的分享
回复

使用道具 举报

taicai 发表于 2014-12-12 10:21:11
楼主,我现在有个问题想请教你,我们用openstack管理了esx,但是两个不是同一个网段的,我Dashboard分配的地址,esx虚拟机无法获取到,我的控制台也进不去,日志查不到,另外,我想知道,openstack能不能同时管理compute节点的虚拟机还有esx节点的虚拟机? 求解
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条