VMware vSphere

介绍

OpenStack Compute 支持 VMware vSphere 产品系列,并能够访问诸如 vMotion、高可用性 (High Availability) 和动态资源调度 (DRS) 等高级功能。

本节描述如何配置基于 VMware 的虚拟机镜像以进行启动。VMware 驱动程序支持 vCenter 版本 5.5.0 及更高版本。

VMware vCenter 驱动程序使 nova-compute 服务能够与管理一个或多个 ESX 主机集群的 VMware vCenter 服务器进行通信。该驱动程序将每个集群中的 ESX 主机聚合起来,为 Compute 调度器呈现一个大型的虚拟机监控程序实体。由于单个 ESX 主机未暴露给调度器,Compute 调度到集群的粒度级别,而 vCenter 使用 DRS 选择集群内的实际 ESX 主机。当虚拟机进入 vCenter 集群后,它可以利用所有 vSphere 功能。

以下章节描述如何配置 VMware vCenter 驱动程序。

高级架构

下图显示了 VMware 驱动程序架构的高级视图

VMware 驱动程序架构

../../_images/vmware-nova-driver-architecture.jpg

如图所示,OpenStack Compute 调度器会看到三个虚拟机监控程序,它们分别对应于 vCenter 中的一个集群。 nova-compute 包含 VMware 驱动程序。您可以运行多个 nova-compute 服务。建议每个 ESX 集群运行一个 nova-compute 服务,从而确保在 Compute 调度到 nova-compute 服务粒度级别时,实际上也能调度到集群级别。反过来,nova-compute 内部的 VMware 驱动程序与 vCenter API 交互,以选择集群内的适当 ESX 主机。在内部,vCenter 使用 DRS 进行放置。

VMware vCenter 驱动程序还与镜像服务交互,以将 VMDK 镜像从镜像服务后端存储复制过来。图中虚线表示 VMDK 镜像从 OpenStack 镜像服务复制到 vSphere 数据存储。VMDK 镜像缓存在数据存储中,因此仅在首次使用 VMDK 镜像时才需要复制操作。

在 OpenStack 将 VM 引导到 vSphere 集群后,VM 将在 vCenter 中可见,并可以访问 vSphere 高级功能。同时,VM 在 OpenStack 控制台中可见,您可以像管理任何其他 OpenStack VM 一样对其进行管理。您可以在 vCenter 中执行高级 vSphere 操作,同时通过 OpenStack 控制台配置 OpenStack 资源(如 VM)。

该图未显示网络如何适应该架构。有关详细信息,请参阅 VMware vSphere 网络

配置概述

要开始使用 VMware vCenter 驱动程序,请完成以下高级步骤

  1. 配置 vCenter。请参阅 先决条件和限制

  2. nova.conf 文件中配置 VMware vCenter 驱动程序。请参阅 VMware vCenter 驱动程序

  3. 将所需的 VMDK 镜像加载到镜像服务中。请参阅 VMware vSphere 镜像

  4. 配置网络服务 (neutron)。请参阅 VMware vSphere 网络

先决条件和限制

使用以下列表准备一个与 VMware vCenter 驱动程序一起运行的 vSphere 环境

复制 VMDK 文件

在 vSphere 5.1 中,从镜像服务复制大型镜像文件(例如,12 GB 及更大)可能需要很长时间。为了提高性能,VMware 建议您升级到 VMware vCenter Server 5.1 Update 1 或更高版本。有关更多信息,请参阅 发行说明

DRS

对于包含多个 ESX 主机的任何集群,请启用 DRS 并启用完全自动放置。

共享存储

仅支持共享存储,并且数据存储必须在集群中的所有主机之间共享。建议从正在配置为 OpenStack 的集群中删除不打算用于 OpenStack 的数据存储。

集群和数据存储

不要将 OpenStack 集群和数据存储用于其他目的。如果这样做,OpenStack 将显示不正确的使用信息。

网络

网络配置取决于所需的网络模型。请参阅 VMware vSphere 网络

安全组

如果您使用 OpenStack Networking 和 NSX 插件与 VMware 驱动程序配合使用,则支持安全组。

注意

NSX 插件是经过验证的唯一适用于 vSphere 的插件。

VNC

端口范围 5900 - 6105(包括)会自动为 OpenStack 控制下的所有集群中的每个 ESX 主机上的 VNC 连接启用。

注意

除了上述文档中指定的默认 VNC 端口号(5900 到 6000)之外,还使用了以下端口:6101、6102 和 6105。

您必须修改 ESXi 防火墙配置以允许 VNC 端口。此外,为了使防火墙修改在重新启动后仍然有效,您必须创建一个自定义 vSphere 安装包 (VIB),然后将其安装到正在运行的 ESXi 主机上,或添加到用于安装 ESXi 主机的自定义镜像配置文件中。有关如何创建用于持久化防火墙配置修改的 VIB 的详细信息,请参阅 知识库

注意

可以从 openstack-vmwareapi-team/Tools 下载 VIB。

要使用 OpenStack 中的多个 vCenter 安装,必须将每个 vCenter 分配给一个单独的可用区。这是必需的,因为 OpenStack 块存储 VMDK 驱动程序当前无法跨多个 vCenter 安装工作。

VMware vCenter 服务帐户

OpenStack 集成需要一个具有以下最低权限的 vCenter 服务帐户。将权限应用于 Datacenter 根对象,并选择 将权限传播到子对象 选项。

vCenter 权限树

所有权限

数据存储

分配空间

浏览数据存储

低级别文件操作

删除文件

Extension

注册扩展

文件夹

创建文件夹

主机

配置

维护

网络配置

存储分区配置

网络

分配网络

资源

将虚拟机分配给资源池

迁移已关闭的虚拟机

迁移已开启的虚拟机

虚拟机

配置

添加现有磁盘

添加新磁盘

添加或删除设备

高级

CPU 计数

更改资源

磁盘更改跟踪

主机 USB 设备

内存

修改设备设置

原始设备

删除磁盘

重命名

设置注释

交换文件放置

交互

配置 CD 媒体

关机

开机

重置

暂停

清单

从现有创建

创建新

移动

删除

注销

配置

克隆虚拟机

自定义

从虚拟机创建模板

快照管理

创建快照

删除快照

基于配置文件的存储

基于配置文件的存储视图

会话

验证会话

查看并停止会话

vApp

导出

导入

VMware vCenter 驱动程序

使用 VMware vCenter 驱动程序 (VMwareVCDriver) 将 OpenStack Compute 与 vCenter 连接。此推荐配置能够通过 vCenter 访问 vMotion、高可用性和动态资源调度 (DRS) 等 vSphere 高级功能。

VMwareVCDriver 配置选项

将以下 VMware 特定配置选项添加到 nova.conf 文件

[DEFAULT]
compute_driver = vmwareapi.VMwareVCDriver

[vmware]
host_ip = <vCenter hostname or IP address>
host_username = <vCenter username>
host_password = <vCenter password>
cluster_name = <vCenter cluster name>
datastore_regex = <optional datastore regex>

注意

  • 集群:vCenter 驱动程序只能支持单个集群。vCenter 驱动程序使用的集群和数据存储不应包含任何由驱动程序创建的 VM 以外的 VM。

  • 数据存储:datastore_regex 设置指定与 Compute 配合使用的数据存储。例如,datastore_regex="nas.*" 选择所有名称以“nas”开头的的数据存储。如果省略此行,Compute 将使用 vSphere API 返回的第一个数据存储。建议不要使用此字段,而是删除不打算用于 OpenStack 的数据存储。

  • 保留主机内存:reserved_host_memory_mb 选项的值默认为 512 MB。但是,VMware 建议将此选项设置为 0 MB,因为 vCenter 驱动程序报告虚拟机可用的有效内存。

  • vCenter 驱动程序通过实例 ID 生成实例名称。忽略实例名称模板。

  • 最低支持的 vCenter 版本为 5.5.0。从 OpenStack Ocata 版本开始,任何低于 5.5.0 的版本都将被记录为警告。在 OpenStack Pike 版本中,这将强制执行。

一个 nova-compute 服务可以控制包含多个 ESXi 主机的多个集群,从而使 nova-compute 成为高可用性角度的关键服务。由于运行 nova-compute 的主机可能会在 vCenter 和 ESX 仍然运行的情况下发生故障,因此必须保护 nova-compute 服务免受主机故障的影响。

注意

许多 nova.conf 选项与 libvirt 相关,但不适用于此驱动程序。

VMware vSphere 镜像

vCenter 驱动程序支持 VMDK 格式的镜像。可以从 VMware Fusion 或 ESX 环境获取此格式的磁盘。也可以使用 qemu-img 实用程序将其他格式(如 qcow2)转换为 VMDK 格式。VMDK 磁盘可用后,将其加载到镜像服务中。然后,您可以将其与 VMware vCenter 驱动程序一起使用。以下部分提供有关受支持的磁盘和用于转换和上传的命令的更多详细信息。

支持的镜像类型

以 VMDK 格式将镜像上传到 OpenStack 镜像服务。支持以下 VMDK 磁盘类型

  • VMFS Flat Disks(包括 thin、thick、zeroedthick 和 eagerzeroedthick)。请注意,一旦 VMFS thin 磁盘从 VMFS 导出到非 VMFS 位置(如 OpenStack 镜像服务),它将成为预分配的 flat 磁盘。这会影响从镜像服务到数据存储的传输时间,因为必须传输完整的预分配 flat 磁盘,而不是 thin 磁盘。

  • Monolithic Sparse disks。Sparse 磁盘从镜像服务导入到 ESXi 时,会作为 thin 配置磁盘。可以使用 VMware Fusion 获取 Monolithic Sparse 磁盘,也可以使用 qemu-img 实用程序从其他虚拟磁盘格式进行转换。

  • Stream-optimized disks。Stream-optimized 磁盘是压缩的 sparse 磁盘。可以从 VMware vCenter/ESXi 导出到 ovf/ova 模板时获取它们。

下表显示了适用于每种受支持 VMDK 磁盘类型的 vmware_disktype 属性

OpenStack 镜像服务磁盘类型设置

vmware_disktype 属性

VMDK 磁盘类型

sparse

Monolithic Sparse

精简配置

VMFS flat, thin 配置

preallocated (默认)

VMFS flat, thick/zeroedthick/eagerzeroedthick

streamOptimized

压缩 Sparse

在将镜像加载到镜像服务时设置 vmware_disktype 属性。例如,以下命令通过将 vmware_disktype 设置为 sparse 来创建 Monolithic Sparse 镜像

$ openstack image create \
  --disk-format vmdk \
  --container-format bare \
  --property vmware_disktype="sparse" \
  --property vmware_ostype="ubuntu64Guest" \
  ubuntu-sparse < ubuntuLTS-sparse.vmdk

注意

指定 thin 不比当前版本驱动程序中的 preallocated 具有任何优势。未来的版本可能会在将磁盘下载到 vSphere 数据存储后恢复磁盘的 thin 属性。

下表显示了适用于每种受支持的客户 OS 的 vmware_ostype 属性

注意

如果 glance 镜像具有与有效的 VMware guestId 不对应的 vmware_ostype 属性,则 VM 创建将失败,并会记录警告。

OpenStack 镜像服务 OS 类型设置

vmware_ostype 属性

零售名称

asianux3_64Guest

Asianux Server 3 (64 位)

asianux3Guest

Asianux Server 3

asianux4_64Guest

Asianux Server 4 (64 位)

asianux4Guest

Asianux Server 4

darwin64Guest

Darwin 64 位

darwinGuest

Darwin

debian4_64Guest

Debian GNU/Linux 4 (64 位)

debian4Guest

Debian GNU/Linux 4

debian5_64Guest

Debian GNU/Linux 5 (64 位)

debian5Guest

Debian GNU/Linux 5

dosGuest

MS-DOS

freebsd64Guest

FreeBSD x64

freebsdGuest

FreeBSD

mandrivaGuest

Mandriva Linux

netware4Guest

Novell NetWare 4

netware5Guest

Novell NetWare 5.1

netware6Guest

Novell NetWare 6.x

nld9Guest

Novell Linux Desktop 9

oesGuest

Open Enterprise Server

openServer5Guest

SCO OpenServer 5

openServer6Guest

SCO OpenServer 6

opensuse64Guest

openSUSE (64 位)

opensuseGuest

openSUSE

os2Guest

OS/2

other24xLinux64Guest

Linux 2.4x 内核 (64 位)(实验版)

other24xLinuxGuest

Linux 2.4x 内核

other26xLinux64Guest

Linux 2.6x 内核 (64 位)(实验版)

other26xLinuxGuest

Linux 2.6x 内核(实验版)

otherGuest

其他操作系统

otherGuest64

其他操作系统 (64 位)(实验版)

otherLinux64Guest

Linux (64 位)(实验版)

otherLinuxGuest

其他 Linux

redhatGuest

Red Hat Linux 2.1

rhel2Guest

Red Hat Enterprise Linux 2

rhel3_64Guest

Red Hat Enterprise Linux 3 (64 位)

rhel3Guest

Red Hat Enterprise Linux 3

rhel4_64Guest

Red Hat Enterprise Linux 4 (64 位)

rhel4Guest

Red Hat Enterprise Linux 4

rhel5_64Guest

Red Hat Enterprise Linux 5 (64 位) (实验性)

rhel5Guest

Red Hat Enterprise Linux 5

rhel6_64Guest

Red Hat Enterprise Linux 6 (64 位)

rhel6Guest

Red Hat Enterprise Linux 6

sjdsGuest

Sun Java Desktop System

sles10_64Guest

SUSE Linux Enterprise Server 10 (64 位) (实验性)

sles10Guest

SUSE Linux Enterprise Server 10

sles11_64Guest

SUSE Linux Enterprise Server 11 (64 位)

sles11Guest

SUSE Linux Enterprise Server 11

sles64Guest

SUSE Linux Enterprise Server 9 (64 位)

slesGuest

SUSE Linux Enterprise Server 9

solaris10_64Guest

Solaris 10 (64 位) (实验性)

solaris10Guest

Solaris 10 (32 位) (实验性)

solaris6Guest

Solaris 6

solaris7Guest

Solaris 7

solaris8Guest

Solaris 8

solaris9Guest

Solaris 9

suse64Guest

SUSE Linux (64 位)

suseGuest

SUSE Linux

turboLinux64Guest

Turbolinux (64 位)

turboLinuxGuest

Turbolinux

ubuntu64Guest

Ubuntu Linux (64 位)

ubuntuGuest

Ubuntu Linux

unixWare7Guest

SCO UnixWare 7

win2000AdvServGuest

Windows 2000 Advanced Server

win2000ProGuest

Windows 2000 Professional

win2000ServGuest

Windows 2000 Server

win31Guest

Windows 3.1

win95Guest

Windows 95

win98Guest

Windows 98

windows7_64Guest

Windows 7 (64 位)

windows7Guest

Windows 7

windows7Server64Guest

Windows Server 2008 R2 (64 位)

winLonghorn64Guest

Windows Longhorn (64 位) (实验性)

winLonghornGuest

Windows Longhorn (实验性)

winMeGuest

Windows Millennium Edition

winNetBusinessGuest

Windows Small Business Server 2003

winNetDatacenter64Guest

Windows Server 2003, Datacenter Edition (64 位) (实验性)

winNetDatacenterGuest

Windows Server 2003, Datacenter Edition

winNetEnterprise64Guest

Windows Server 2003, Enterprise Edition (64 位)

winNetEnterpriseGuest

Windows Server 2003, Enterprise Edition

winNetStandard64Guest

Windows Server 2003, Standard Edition (64 位)

winNetEnterpriseGuest

Windows Server 2003, Enterprise Edition

winNetStandard64Guest

Windows Server 2003, Standard Edition (64 位)

winNetStandardGuest

Windows Server 2003, Standard Edition

winNetWebGuest

Windows Server 2003, Web Edition

winNTGuest

Windows NT 4

winVista64Guest

Windows Vista (64 位)

winVistaGuest

Windows Vista

winXPHomeGuest

Windows XP Home Edition

winXPPro64Guest

Windows XP Professional Edition (64 位)

winXPProGuest

Windows XP Professional

转换和加载镜像

使用 qemu-img 工具,可以将多种格式(例如 qcow2)的磁盘镜像转换为 VMDK 格式。

例如,以下命令可用于将 qcow2 Ubuntu Trusty 云镜像

$ qemu-img convert -f qcow2 ~/Downloads/trusty-server-cloudimg-amd64-disk1.img \
  -O vmdk trusty-server-cloudimg-amd64-disk1.vmdk

通过 qemu-img 转换的 VMDK 磁盘 始终 是单体稀疏 VMDK 磁盘,具有 IDE 适配器类型。使用前面 Ubuntu Trusty 镜像转换的示例,上传 VMDK 磁盘的命令应如下所示

$ openstack image create \
  --container-format bare --disk-format vmdk \
  --property vmware_disktype="sparse" \
  --property vmware_adaptertype="ide" \
  trusty-cloud < trusty-server-cloudimg-amd64-disk1.vmdk

请注意,在前面的命令中,vmware_disktype 设置为 sparsevmware_adaptertype 设置为 ide

如果镜像并非来自 qemu-img 工具,则 vmware_disktypevmware_adaptertype 可能不同。要确定镜像文件的适配器类型,请使用以下命令并查找 ddb.adapterType=

$ head -20 <vmdk file name>

假设预分配磁盘类型和 iSCSI lsiLogic 适配器类型,以下命令上传 VMDK 磁盘

$ openstack image create \
  --disk-format vmdk \
  --container-format bare \
  --property vmware_adaptertype="lsiLogic" \
  --property vmware_disktype="preallocated" \
  --property vmware_ostype="ubuntu64Guest" \
  ubuntu-thick-scsi < ubuntuLTS-flat.vmdk

当前,具有 IDE 适配器类型的 OS 启动 VMDK 磁盘无法附加到虚拟 SCSI 控制器,同样,具有 SCSI 适配器类型之一的磁盘(例如,busLogic、lsiLogic、lsiLogicsas、paraVirtual)无法附加到 IDE 控制器。因此,如前面的示例所示,正确设置 vmware_adaptertype 属性非常重要。默认适配器类型为 lsiLogic,它是 SCSI,因此如果您确定镜像适配器类型为 lsiLogic,则可以省略 vmware_adaptertype 属性。

标记 VMware 镜像

在混合超融合器环境中,OpenStack Compute 使用 hypervisor_type 标签将镜像与正确的超融合器类型匹配。对于 VMware 镜像,请将超融合器类型设置为 vmware。其他有效的超融合器类型包括:ironiclxcqemu。请注意,qemu 用于 QEMU 和 KVM 超融合器类型。

$ openstack image create \
  --disk-format vmdk \
  --container-format bare \
  --property vmware_adaptertype="lsiLogic" \
  --property vmware_disktype="preallocated" \
  --property hypervisor_type="vmware" \
  --property vmware_ostype="ubuntu64Guest" \
  ubuntu-thick-scsi < ubuntuLTS-flat.vmdk

优化镜像

单体稀疏磁盘下载速度明显更快,但具有额外的转换步骤开销。导入到 ESX 后,稀疏磁盘会转换为 VMFS 扁平精简磁盘。下载和转换步骤仅影响使用稀疏磁盘镜像启动的第一个实例。转换后的磁盘镜像会被缓存,因此后续使用此磁盘镜像的实例可以直接使用缓存版本。

为了避免转换步骤(以牺牲更长的下载时间为代价),请考虑在将其加载到镜像服务之前,将稀疏磁盘转换为精简或预分配磁盘。

使用以下工具之一预转换稀疏磁盘。

vSphere CLI 工具

有时称为远程 CLI 或 rCLI。

假设稀疏磁盘可在 ESX 主机可访问的数据存储上提供,以下命令将其转换为预分配格式

vmkfstools --server=ip_of_some_ESX_host -i \
  /vmfs/volumes/datastore1/sparse.vmdk \
  /vmfs/volumes/datastore1/converted.vmdk

请注意,来自相同 CLI 包的 vifs 工具可用于上传要转换的磁盘。vifs 工具也可用于下载转换后的磁盘(如果需要)。

vmkfstools 直接在 ESX 主机上

如果 ESX 主机上启用了 SSH 服务,则可以通过 scp 将稀疏磁盘上传到 ESX 数据存储,并且本地于 ESX 主机的 vmkfstools 可用于执行转换。登录到主机通过 ssh 后,运行此命令

vmkfstools -i /vmfs/volumes/datastore1/sparse.vmdk /vmfs/volumes/datastore1/converted.vmdk
vmware-vdiskmanager

vmware-vdiskmanager 是随 VMware Fusion 和 VMware Workstation 捆绑在一起的实用工具。以下示例将稀疏磁盘转换为预分配格式

'/Applications/VMware Fusion.app/Contents/Library/vmware-vdiskmanager' -r sparse.vmdk -t 4 converted.vmdk

在前面的情况下,转换后的 vmdk 实际上是一对文件

  • 描述文件 converted.vmdk

  • 实际虚拟磁盘数据文件 converted-flat.vmdk

要上传到镜像服务的文件是 converted-flat.vmdk

镜像处理

ESX 超融合器需要 VMDK 文件的副本才能启动虚拟机。因此,vCenter OpenStack Compute 驱动程序必须通过 HTTP 从镜像服务将 VMDK 下载到超融合器可见的数据存储。为了优化此过程,VMDK 文件首次使用时,它会被缓存到数据存储中。缓存的镜像存储在一个以镜像 ID 命名的文件夹中。需要 VMDK 的后续虚拟机使用缓存版本,无需再次从镜像服务复制文件。

即使使用缓存的 VMDK,仍然存在从缓存位置到共享数据存储中超融合器文件目录的复制操作。为了避免此复制,请以链接克隆模式启动镜像。要了解如何启用此模式,请参阅 vmware.use_linked_clone

注意

您还可以使用镜像服务中的 img_linked_clone 属性(或遗留属性 vmware_linked_clone)来覆盖每个镜像的链接克隆模式。

如果从带有 VMDK 磁盘的 ISO 启动虚拟机镜像,则创建镜像并将其作为空白磁盘附加到虚拟机。在这种情况下,img_linked_clone 属性对于该镜像将被忽略。

如果多个计算节点在同一主机上运行,或者具有共享文件系统,则可以启用它们使用后端数据存储上的相同缓存文件夹。要配置此操作,请在 nova.conf 文件中设置 cache_prefix 选项。其值是存储缓存镜像的文件夹名称的前缀。

注意

只有当计算节点在同一主机上运行,或者具有共享文件系统时,此操作才会生效。

您可以自动清除一段时间后未使用的镜像。要配置此操作,请在 image_cache 部分的 nova.conf 文件中设置这些选项

与 VMware vSphere 的网络

VMware 驱动程序支持使用网络服务 (neutron) 进行网络。根据您的安装,在配置虚拟机之前,请完成以下配置步骤

  1. 在配置虚拟机之前,创建一个与 nova.conf 中的 vmware.integration_bridge 值(默认值为 br-int)相同的名称的端口组。所有 VM NIC 都附加到此端口组,由 OpenStack 网络插件进行管理。

与 VMware vSphere 的卷

VMware 驱动程序支持附加来自块存储服务的卷。建议使用 VMware VMDK 驱动程序来管理基于 vSphere 数据存储的卷。有关 VMware VMDK 驱动程序的更多信息,请参阅 Cinder 手册中的 VMDK 驱动程序(TODO:尚未导入和发布)。此外,iSCSI 卷驱动程序提供有限的支持,只能用于附件。

故障排除

操作员可以通过将 OpenStack 日志与 vCenter 日志关联起来来解决 VMware 特定故障。由 OpenStack 驱动程序发出的每个 RPC 调用都有一个 opID,可以在 vCenter 日志中跟踪它。例如,请考虑以下 nova-compute 日志摘录

Aug 15 07:31:09 localhost nova-compute[16683]: DEBUG oslo_vmware.service [-] Invoking Folder.CreateVM_Task with opID=oslo.vmware-debb6064-690e-45ac-b0ae-1b94a9638d1f {{(pid=16683) request_handler /opt/stack/oslo.vmware/oslo_vmware/service.py:355}}

在这种情况下,opIDoslo.vmware-debb6064-690e-45ac-b0ae-1b94a9638d1f,我们可以 grep vCenter 日志(通常为 /var/log/vmware/vpxd/vpxd.log)以查找是否有任何 CreateVM 操作出现问题。