概要

将vSphere 集群加入到OpenStack中作为一个hypervisor或叫做compute driver来使用是一件很痛苦的事,但也是一件有趣的事。可能会出现这样一种使用场景,用户企业以前使用的是vSphere虚拟化架构,现在想使用更友好而简单的OpenStack私有云,但vSphere license还没到期,直接弃用岂不是很可惜,所以希望我们能给他提供一个功能——将已有的vSphere架构纳管到OpenStack中。
这是一件很有难度的事,虽然在R版时,OpenStack官方声称已经能很好地调用vmware api,并且还支持vSphere的高级功能诸如vMotion、DRS和HA,但从我配置使用基本的创建虚拟机功能都报错的情况看来,至少官方在文档提供方面做得很不全面。

配置

glance-api.conf
[default]
...
known_stores = vmware
[glance_store]
filesystem_store_datadir = /zl/images/
stores = files,http,vmware
default_store = vsphere
vmware_server_host = 192.168.3.112
vmware_server_username = administrator@vsphere.local
vmware_server_password = Zl@xxxxxxxx
vmware_datastore_name = Datastore_iscsi
vmware_datacenter_path = MyDatacenter
vmware_datastores = MyDatacenter:Datastore_iscsi
vmware_task_poll_interval = 5
vmware_store_image_dir = /openstack_glance
vmware_api_insecure = True
cinder.conf
[default]
...
enabled_backends = vmware
default_volume_type = vmware
[vmware]
volume_driver = cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver
vmware_host_ip=192.168.3.112
vmware_host_password=Zl@xxxxxxxx
vmware_host_username=administrator@vsphere.local
vmware_wsdl_location=https://192.168.3.112/sdk/vimService.wsdl
vmware_volume_folder= openstack_volume
vmware_insecure = True
vmware_host_version = 6.7
nova.conf
[default]
...
compute_driver = vmwareapi.VMwareVCDriver

[vmware]
host_ip = 192.168.3.112
host_username = administrator@vsphere.local
host_password = Zl@xxxxxxxx
cluster_name = mycluster
#datastore_regex = Datastore_iscsi
datastore_regex = ".*Data.*"
wsdl_location = https://192.168.3.112/sdk/vimService.wsdl
insecure = True

操作

重启服务

systemctl restart openstack-nova-* openstack-cinder-* openstack-glance-*

本地镜像格式转换

qemu-img convert -f raw -O vmdk cirros.raw cirros.vmdk

上传镜像到glance即vSphere的共享存储

glance image-create --name cirros_vmdk --min-disk 1 --disk-format vmdk --container-format bare --property vmware_disktype=“sparse”
--property vmware_ostype=“otherGuest” --property vmware_adaptertype=“ide” < cirros.vmdk(这个vmware_adaptertype可以通过 head -30 cirros.vmdk查看到)
 glance image-create --name centos76_vmdk --min-disk 10 --disk-format vmdk --container-format bare --property vmware_disktype=“sparse” 
 --property vmware_adaptertype=“lsiLogic” --property vmware_ostype=“rhel6Guest” < clear_c76.vmdk(这个lsiLogic若写成lsilogic就完蛋了)

错误

创建云主机报错,只是说主机配置过程出错,具体什么错,没有体现出来

Faults: ['PlatformConfigFault']: BuildAbortException: Build of instance 3df17bd7-d612-4730-a286-45e526d01a63 aborted:主机配置过程中出错

openstack vcenter的关系 openstack vsphere_vim


主机配置过程中出错(an error occurred during host configuration)vSphere VC上可以看到 OpenStack创建了一个新的包(OpenStack)下还有project和instance和openstack_volume

openstack vcenter的关系 openstack vsphere_f5_02


nova show 看到的错误如下:

openstack vcenter的关系 openstack vsphere_f5_03


首先,猜测是网络的问题,毕竟,OpenStack上的网络使用VXLAN,而ESXi上使用VLAN

改为VLAN后,测试过,和网络没关系,而且,人家已经拿到IP了的

openstack vcenter的关系 openstack vsphere_f5_04


其次,猜测是存储的问题。但是,iSCSI共享存储应该没问题吧,毕竟,OpenStack调用vSphere创建的卷和镜像都是没问题的,只是,单独创建卷的时候,卷不会显示在iSCSI存储中,而且cinder这边,第一次创建卷总是出错,第二次才会成功,第三次又会出错,如此反复。vCenter看到的错误

openstack vcenter的关系 openstack vsphere_vim_05


openstack vcenter的关系 openstack vsphere_vim_06

Google说大概是克隆的虚拟机MAC地址不匹配造成的,所以暂时的解决方法是创建虚拟机时,不绑定网卡:

nova boot --flavor 12efc0f5-9e2d-4263-8044-3e1824f8231b --image 5522f53a-bc39-4373-94ad-aaef33de5085 --nic none wahahaya222