前言
從虛擬化的層面來說,GuestOS 的生命周期、遷移、快照等管理過程都離不開 Hypervisor 的支持。 EG. KVM/VMwate Workstation/Hpyer-V 等 VMM 。VMware 暴露的 API 接口和 OpenStack Dirver 驅動程序兩種結合,就能夠實現使用 Openstack 平臺來管理多種虛擬化產品。本質上就是 Openstack 的 Nova Service 能夠使用這些 API/Dirver 去連接 VMware Hypervisor 并達到控制的目的。在了解 VMware 接入 Openstack 的兩種方式之前,首先要了解一些關于 VMWare 虛擬化產品的概念:
vSphere:是 VMware 的一個虛擬化產品,是一套整體企業級虛擬化解決方案,其中主要包含了下面兩個組件。
vCenter:表示一個虛擬化數據中心,是所有的物理主機(ESX/ESXI)和虛擬機等資源的統一管理工具。
ESXI(ESX)主機:使用虛擬化軟件 ESX/ESXI 來運行虛擬機的物理主機虛擬化操作系統(實際上是一個可以在裸機上安裝的管理軟件),為虛擬機提供 CPU 和內存資源,同時為虛擬機提供訪問存儲資源和網絡連接的能力。其中 ESX 是收費的,注意:可以直接在裸機上安裝,能更節省硬件資源,類似與 Redhat 的 RHEV-H 。
Datastore:共享數據存儲,用于保存虛擬機、鏡像文件等數據,掛載給 ESX 主機使用。
Openstack 接口驅動
Openstack Nova Project 提供了兩個連接 VMware 的 Driver 實現( nova/nova/virt/vmwareapi/dirver.py):
當然這也會引入一些新的問題,EXAMPLE:
VCDriver 無法讓 Openstack 對 VMware 虛擬機進行直接的操作(需要通過 vCenter 來進行)。這就帶來了資源跨 ESXi 節點導致無法輕易整合的問題。具體來說就是作為 Hypervisor 的 vCenter 整體呈現出來的CPU、內存資源都很充足,但是在創建虛擬機時就會發現任何一個節點的資源都不足以創建虛擬機的情況。 VCDirver 僅僅是實現了 Openstack 對 vCenter 的操作而已。
在開始 VCDirver 的內容之前,先看看 Openstack 默認的虛擬化實現方式 —— KVM
使用 KVM 在 Compute Node 上創建虛擬機的流程
對于 KVM 來說,通過 nove-compute serivce 直接在 Compute Node 創建虛擬機就可以完成。即:
HTTP Request ==> Restful API ==> nova-api ==> RPC & Queue ==> nova-scheduler ==> nova-compute ==> Create VM in Compute_Node
使用 VCDirver 在 vCenter 上創建虛擬機的流程
VMware driver architecture
注意:nova-scheduler 可調度的 nova-compute 可以有多個,并且每個 nova-compute 對應了 vSphere 上的一個 Cluster ,每個 Cluster 又都要有一個 Datastore 進行配置和使用。
通過 Openstack 來創建 vSphere 的虛擬機后,虛擬機在 vCenter 的總控界面中會得到呈現,并且可以支持 VMware 的高級功能。除此之外,在 Horizon 中也會得到呈現,能夠像管理其他 Openstack 虛擬機一樣管理 vCenter 中的虛擬機,但也可能會存在部分 VMware 的功能限制(如ssh keys等)。
配置 vCenter 接入 Openstack
Use the VMwareVCDriver to connect Openstack Compute(nova-compute) with vCenter,and you can access through vCenter to advanced vSphere featuers(vMotion/HA/DRS(Dynamic Resource Scheduling)).
修改 Openstack 配置文件
nova.conf :啟用 vmwareapi.VMwareVCDriver
Dirver
[DEFAULT]...compute_driver=vmwareapi.VMwareVCDriver[vmware]host_ip=<vCenter host IP> #安裝了vCenter的主機IPhost_username=<vCenter username> #安裝vCenter時配置的Login Usernamehost_password=<vCenter password> #vCenter Passwordcluster_name=<vCenter cluster name> #指定要連接vCenter的哪一個Cluster,一個nova-compute Service可以連接一個Clusterdatastore_regex=<optional datastore regex> #指定Cluster的Datastore,每個Cluster都需要至少一個Datastore,可以對應多個Datastorewsdl_location=https://200.21.101.12/sdk/vimService.wsdl #指定wsdl路徑insecure=True #以非Secure的方式訪問
NOTE:EG.datastore_regex="nas.*"
==> select all the data stores that have a name starting with “nas”. if the line is omitted, Compute uses the first data store return by the vSphere API.
glance-api.conf & glance-registry.conf :配置 Image 上傳到 vCenter datastore 中
鏡像下載流程:
a. Openstack 在 Compute Node 上調用 Glance API 下載鏡像
b. 再調用 VMware 的 API 將鏡像上傳到 datastore
# glance-api.conf[glance_store]filesystem_store_datadir = /opt/stack/data/glance/images/# Image 上傳到 filesystem_store_datadir#default_store=file #stores=file,http# Image 上傳到 vCenter datastore 中default_store=vspherestores=vmware,http# VMware Datastore Store Optionsvmware_server_host=<vCenter host IP>vmware_server_username=<vCenter username>vmware_server_password=<vCenter password>vmware_datastores = <datacenterName:datastoreName> # vCenter中數據中心的名稱:數據存儲的名稱;為了避免存儲單向I/O的不便,所以也可以對應多個datastorevmware_api_insecure=Truevmware_task_poll_interval = 5#Create the directory for vmware to store the image filevmware_store_image_dir = /openstack_glance # 默認為 /openstack_glance
# glance-registry.conf[glance_store]default_store=vspherestores = vmware,httpvmware_server_host=<vCenter host IP>vmware_server_username=<vCenter username>vmware_server_password=<vCenter password>vmware_datastore_name=<datastoreName>vmware_datacenter_path=<datacenterName>
和 Openstack 原始支持的 Libvirt Driver 一樣,VMware Driver 也能夠和 Glance service 交互。如架構圖,從 Openstack Image Service 復制 vmdk Image File 到啟動 vCenter 虛擬機的 Shared Datastore 中去,同時還會被緩存下來。即:鏡像需要從 Glance 下載到 Vmware datastore 中。這樣能夠使用 VMware 的資源來存儲屬于 VMware 的文件數據。
cinder.conf:配置在 VMware 的資源上創建 Volume
與創建虛擬機的流程類似,Cinder 的后端存儲支持指定為 VMware,使用 VMware Dirver 去創建卷,最終都是調用 vCenter 的存儲管理的功能。
#cinder.conf[vmware]volume_driver = cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDrivervmware_host_ip=<vCenter host IP>vmware_host_username=<vCenter username>vmware_host_password=<vCenter password>vmware_wsdl_location=https://200.21.101.12/sdk/vimService.wsdlvmware_volume_folder= <VolumeFileName>vmware_insecure = truevmware_host_version = 6.0
通過 Openstack 在 vCenter 上安裝虛擬機
Step1. 上傳 VMDK 鏡像文件
glance image-create --name trusty-cloud /--container-format bare --disk-format vmdk /--property vmware_disktype="sparse" /--property vmware_adaptertype="ide" < /cirros-0.3.2-i386-disk.vmdk
注意:最好使用 Commands 的方式來上傳鏡像文件,因為必須指定鏡像文件的屬性為:
vmware_disktype="sparse"/vmware_adaptertype="ide"/--disk-format vmdk
,使用 Dashboard 來上傳鏡像的話不能準確的指定這些屬性,導致上傳之后的鏡像無法被 ESXI 識別。
轉換鏡像文件格式為 VMDK:VMware 只能認識這種類型的鏡像文件,所以當我們手中的鏡像文件不是 VMDK 時,我們可以轉換鏡像文件的格式。
qemu-img convert -f qcow2 ~/Downloads/trusty-server-cloudimg-amd64-disk1.img /-O vmdk trusty-server-cloudimg-amd64-disk1.vmdk
Step2. 使用 Dashboard 或 Commands 啟動虛擬機,需要使用剛剛上傳 VMDK 格式的鏡像來啟動。
在成功啟動虛擬機的過程中,在 vCenter 的 Log 控制臺上會顯示由創建信息。
Step3. nova list 查看虛擬機信息
fanguiju@fanguiju:~$ cd devstack/fanguiju@fanguiju:~/devstack$ source openrc admin adminfanguiju@fanguiju:~/devstack$ nova list+--------------------------------------+---------------------+--------+------------+-------------+------------------+| ID | Name | Status | Task State | Power State | Networks |+--------------------------------------+---------------------+--------+------------+-------------+------------------+| 42da5d12-a470-4193-8410-0209c04f333a | TestVMwareInterface | ACTIVE | - | NOSTATE | private=10.0.0.2 |+--------------------------------------+---------------------+--------+------------+-------------+------------------+
注意:需要先加載環境變量,如果是使用 admin 身份創建的虛擬機,必須使用 admin 的環境變量才能查看。
ERROR
ERROR 1:
TSG:查看日志發現非正確 Nova Node IP,所以考慮是否在用戶 Home 目錄下有存在 nova.conf 配置文件。在 screen 啟動服務時,沒有指定 config 配置路徑,那么該啟動的服務默認到 home目錄 ==> usr/share ⇒ etc下依次尋找并加載配置文件。
ERROR 2:
TSG:考慮是否相應的服務沒有啟動
ERROR 3:
ERROR glance_store._drivers.vmware_datastore [req-60ec6d3c-0596-45d8-ab97-9ef84360acc1 85c6b9fa9127439880276f070c60dad6 ad9a69f3da8f4aa280389fcdf855aeb5] Communication error sending http PUT request to the url /folder/openstack_glance/7a1fa12f-2b41-4751-b421-c454e9a9673a%3FdcPath%3Ddatacenter%26dsName%3Ddatastore1.Got IOError [Errno 104] Connection reset by peerERROR glance_store._drivers.vmware_datastore [req-60ec6d3c-0596-45d8-ab97-9ef84360acc1 85c6b9fa9127439880276f070c60dad6 ad9a69f3da8f4aa280389fcdf855aeb5] Failed to upload content of image 7a1fa12f-2b41-4751-b421-c454e9a9673a. The request returned an unexpected status: 301.The response body:None
TSG:配置完 Glance service 后,無法上傳鏡像文件。是因為Devstack-L 的 PIP 包版本與 vCenter 6 不兼容。上級包即可。
pip list | grep glance
ERROR 4:
在Openstack創建VMWare虛擬機時無法傳遞鏡像,導致VMWare虛擬機無法引導操作系統。
TSG:
需要使用 commands 方式上傳鏡像,并且在Dashboard中將鏡像的屬性編輯成為 public 。
EXAMPLE:
最后
對于 Openstack 的用戶來說,完全不會感覺到 KVM 虛擬機和 VMware 虛擬機的不同,表面上都是通過 Openstack 去管理底層的虛擬機實現,而終端也都僅是調用了 Openstack API 。Openstack 作為一個云集算管理平臺,只能管理到 nova-compute 這一層,即:知道 nova-compute 對應了哪一個 VMware Cluster,對于 ESX/ESXI 底層的虛擬機實現,Openstack 是無法管理的,都交由 vCenter 管理。所以虛擬機在 Cluster 內的變動,對于 Openstack 來說是完全不會有影響的。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答
圖片精選