首页 > 代码库 > OpenStack Mixture HypervisorsDriver configure and implementation theory

OpenStack Mixture HypervisorsDriver configure and implementation theory

通过本文,您将可以了解在 OpenStack 中如何进行混合 Hypervisor 的配置及其实现原理的基本分析。本文主要结合作者在 Nova 中的实际开发经验对 OpenStack 中混合 Hypervisor 场景的原理进行分析,同时介绍在实际的应用场景中如何进行配置。

通常,基于 OpenStack 的混合 Hypervisor 场景中的部署有三个关键步骤:

  1. 配置不同 Hypervisor 类型的 Compute 节点
  2. 标识 Image 的 Platform/Hypervisor 属性,即指定 Image 适用的 Platform/Hypervisor
  3. 基于 Hypervisor 类型的 Image 创建新的 VM

在实际的部署环境中,混合 Hypervisor 的部署架构通常如下(在这里我们将以 PowerVM 和 KVM 的混合场景为例) 图-1 所示:

图 1.混合 Hypervisor 的部署架构 (PowerVM + KVM)

随着企业级数据中心的不断发展,其对混合虚拟化环境的业务需求也在持续增长中,因而也随之带来了对云计算平台中多 Hypervisor 管理工具和技术的需求。OpenStack 作为业界领先的开源云计算管理平台,在混合 Hypervisor 管理方面有着良好的支持

什么是 OpenStack

OpenStack 既是一个社区,也是一个开源软件项目,它提供了一个部署云的操作平台, OpenStack 是一个旨在为公共及私有云的建设与管理提供软件的开源项目。OpenStack 作为基础设施即服务(简称 IaaS)资源,OpenStack 项目的首要任务是简化云的部署过程并为其带来良好的可扩展性。

OpenStack 是一个开源软件项目,为了便于管理该项目各个部分的开发,OpenStack 被分解成了核心项目、孵化项目,以及支持项目和相关项目。最成熟和最重要的项目都是核心项目,他们是:

OpenStack Compute (Nova), OpenStack Image Service (Glance), OpenStack Identity Service (Keystone) 等等。OpenStack Compute (Nova), 是云计算的控制器,它提供一个工具来部署云,包括部署实例、管理网络等。

OpenStack Image Service (Glance), 是一个虚拟机镜像的存储、查询和检索系统,服务包括的 RESTfulAPI 允许用户通过 HTTP 请求查询 VM 镜像元数据,以及检索实际的镜像。

OpenStack Identity Service (Keystone),是身份服务, 提供身份的创建,验证和管理。

获取 OpenStack 源代码

我们可以在OpenStack 源代码仓库 查询和下载 OpensStack 的子项目源代码。

通常的下载方式是使用 git, 例如:

git clone http://github.com/openstack/nova.git

安装和配置 OpenStack

本文主要讲述 OpenStack 中混合 Hypervisor 场景的原理分析与最佳实践,主要涉及到的组件包含 OpenStack Compute (Nova)、 OpenStack Image Service (Glance) 和 OpenStack Identity (Keystone)。OpenStack 的基本安装和配置,请参考 devstack 网站,了解如何使用 devstack 脚本快速安装和配置 OpenStack 环境(推荐使用 devstack 快速安装和配置 OpenStack)。

请参考 OpenStack 安装,配置和验证,了解如何安装,配置和验证 OpenStack。

请参考 OpenStack 平台安装介绍,了解各个平台上的 OpenStack 最佳安装实践。

操作 OpenStack 的方式

操作 OpenStack 的方式:OpenStack dashboard, OpenStack command-line clients, OpenStack APIs 。

OpenStack dashboard 作为 OpenStack 的一个子项目,提供基于 Web 的 GUI 操作界面。

请参考OpenStack dashboard 操作,了解详细的 OpenStack dashboard 操作介绍。

OpenStack command-line clients:OpenStack 的核心子项目都有对应的 command-line client,例如 OpenStack Glance 子项目对应的 command-line client : glance (python-glanceclient),OpenStack Keystone 子项目对应的 command-line client : keystone (python-keystoneclient),OpenStack Nova 子项目对应的command-line client : nova (python-novaclient)等等,请参考OpenStack command-line clients, 了解详细的 OpenStack command-line clients 介绍。

OpenStack 提供了大量的 APIs。请参考OpenStack APIs,了解详细的 OpenStack APIs 介绍。

(本文使用 command-line clients 方式完成 OpenStack 中混合 Hypervisor 实践。)

OpenStack 支持的 Hypervisors

OpenStack 支持当前几乎所有主流的 Hypervisors :PowerVM、KVM、HyperV、Xen、Vmware 等,请参考 Hypervisors 介绍,了解详细的 OpenStack Hypervisors 说明。 OpenStack 在 Nova 组件的子目录 nova/virt/下为 Hypervisor 提供了对应的 compute driver, 例如 nova/virt/PowerVM 提供 PowerVM 的 compute driver、nova/virt/libvirt/提供 KVM 的 compute driver 等等。

值得注意的是在 Nova 的配置文件 nova.conf 里 PowerVM 的 computer driver 的配置是 compute_driver=nova.virt.powervm.PowerVMDriver,KVM 的 computer driver 的配置是 compute_driver=nova.virt.libvirt.LibvirtDriver,而不是 compute_driver=nova/virt/PowerVM, compute_driver=nova/virt/libvirt。

目前,OpenStack 支持的 PowerVM 类型只有 IVM,HMC 尚不支持。详情请参考 OpenStack powervm 配置, 了解更多 OpenStack powervm 配置介绍 和 IBM PowerVM Virtualization Introduction and Configuration 介绍。

Compute 节点的配置及服务启动

通常,OpenStack 会有一个或多个控制节点,也称为 Cloud Controller 节点。对于比较简单的部署场景, OpenStack 中的公共组件,例如 Keystone, Glance, 数据库和消息队列都会部署在一个控制节点上。

通常,需要启动的最小 OpenStack 服务集合包括:qpid, mysql, keystone-all, nova-api, nova-conductor, nova-network, nova-schduler, nova-compute, glance-api, glance-registry.

通过命令 nova-manage service list 可以查看 Nova 相关的服务状态。此外需要注意的是, 由于本文涉及的混合 Hypervisor 场景中 KVM 作为 compute 节点和 OpenStack 控制节点不在同一个操作系统中运行。因此,还需要开放控制节点上一些端口以确保二者之间能够正常通信:如 qpid 所使用的 5672 端口,glance-api 使用的 9292 端口等等。

PowerVM 节点配置

在确认其他服务已经正常启动的情况下,这里我们选择在控制节点上启动基于 PowerVM 的 compute 服务。PowerVM driver 实际上是通过 SSH 协议与远程的 PowerVM 进行通信,因此基于 PowerVM 的 compute service 理论上可以运行在任何可以同控制节点正常通信的操作系统上,这里考虑到配置的复杂度我们将其运行在控制节点上以简化部署拓扑。 接下来需要对 Nova 的配置文件 nova.conf 进行修改以使其支持对 PowerVM 的管理:

compute_driver=nova.virt.powervm.PowerVMDriverpowervm_mgr_type=ivmpowervm_mgr=ivm_hostname_or_ip_addresspowervm_mgr_user=padminpowervm_mgr_passwd=padmin_user_passwordpowervm_img_remote_path=/path/to/remote/image/directorypowervm_img_local_path=/path/to/local/image/directory/on/compute/hosthost=PowervmHost
  • compute_driver 表示当前使用的 compute driver
  • powervm_mgr_type 表示当前使用的 PowerVM manager 类型,目前仅支持 IVM
  • powervm_mgr 用于指定 IVM 的 IP 或 hostname
  • powervm_mgr_user 用于指定 PowerVM manager 的用户名
  • powervm_mgr_passwd 用于指定 PowerVM manager 的密码
  • powervm_img_remote_path 用于指定 image 在 PowerVM manager 上的存放路径
  • powervm_img_local_path 用于指定 image 在 compute service 节点上的存放路径
  • host 用于标识 compute 节点的名字,以同其他 compute 节点进行区分

KVM 节点配置

KVM 的 compute 配置和 PowerVM 稍有不同, 相较于 PowerVM driver,libvirt driver 的配置要更简单一些,因为它不涉及身份验证问题。

#1. 配置 compute 节点的名字host = KVMHost#2. 配置 KVM 作为 Hypervisorlibvirt_type=kvmcompute_driver=nova.virt.libvirt.LibvirtDriver#3. 配置控制节点的 IP 信息以使得当前的 compute 节点和控制节点间可以正常通信sql_connection = mysql://nova:nova@controller_node_ip/novaglance_api_servers=controller_node_ip:9292qpid_hostname=controller_node_ipauth_host = controller_node_ipauth_uri = http://controller_node_ip:35357/

同样,在启动 nova-compute 服务后,可以通过在控制节点上运行 nova-manage service list 检查 这个 KVM 节点的 compute service 的 state。

Image 的属性设置及实现原理

通过 nova-manager service list 命令或 nova service-list 命令检查 PowerVM 和 KVM 的两个 compute service 一切正常后,接下来在进行实际部署虚拟机之前很重要的一步是对 image 属性的设置。只有在设置了 image 的 Hypervisor_type 属性后, Nova scheduler 才能在对新的虚拟机创建请求进行处理时,根据 image 的 Hypervisor type 所指定的属性筛选出符合条件的 host 列表。

Image 属性设置

目前通过 OpenStack 中的 image service 组件 Glance 可以在 image 创建时指定 Hypervisor_type 属性。同时它也支持对已经创建的 image 更新这个属性。

注册 PowerVM 类型的 image 命令如下所示:

glance image-create --name="PowerRhel6" --propertyHypervisor_type=powervm --disk-format=raw --container-format=bare < /home/image/Rhel6.raw.gz

注册 KVM 类型的 image 命令如下所示:

glance image-create --name=cirros-0.3.0-x86_64  --propertyHypervisor_type=kvm --disk-format=qcow2 --container-format=bare < /home/image/cirros.img修改 image 的 Hypervisor_type 属性可以通过下列命令:glance image-update cirros-0.3.1-x86_64-uec --property Hypervisor_type=kvm

实现原理

OpenStack 中 Nova scheduler 在进行虚拟机实例的部署时,其主要工作就是筛选出符合条件的 host 进行虚拟机部署。因此,对于混合 Hypervisor 场景下的部署也就不难理解其原理。也就是说,筛选的基本条件就是要保证 image 的 Hypervisor_type 属性要和 host 公布出来的自己对应的 Hypervisor 类型相匹配。

根据 Nova compute driver 的设计,compute driver(PowerVM driver, KVM driver, ...)在获取有关 host 的信息后,会提供一个名为 supported_instances 的属性,即其自身的 Hypervisor 类型。在进行虚拟机实例部署的时候,nova-scheduler 会通过 image_props_filter 对比 image 的 Hypervisor_type 和 host 所支持的实例的 Hypervisor_type。如果两者相同,那么这个 host 将被选为实例部署的可用 host。如果两者不同,那么这个 host 将被过滤掉。更多实现细节,可以直接参考这里的代码:

https://github.com/openstack/nova/blob/master/nova/scheduler/filters/image_props_filter.py

实例部署

正确配置 PowerVM, KVM 的 Nova compute service, 及 image 的属性后,虚拟机部署的命令不需要指定特别的参数和设置。

部署 PowerVM 实例:

nova boot --image PowerRhel6 --flavor 1 PowerRhel6Inst

部署 KVM 实例:

nova boot --image cirros-0.3.0-x86_64 --flavor 1 KVMCirrosInst

接下来可以分别通过 PowerVM 和 KVM 的相关命令进行验证以检查两个虚拟机实例是否已经正确的部署到了正确的 Hypervisor 上。

可以在 PowerVM (IVM)上使用lssyscfg -r lpar 查看部署在 PowerVM 上的虚拟机实例,可以在 KVM 上使用virsh list --all查看部署在 KVM 上的虚拟机实例。

结束语

在云计算的众多应用场景尤其是私有云的应用场景中, 混合 Hypervisor 场景的配置和管理是其中常见的应用需求之一。 本文简要介绍了在 OpenStack 中如何配置 PowerVM 和 KVM 的 compute service。同时给出了如何对 PowerVM 和 KVM 的 image 进行属性设置以使得 Nova scheduler 能够筛选出符合条件的 host 节点,并简要分析了其实现原理。通过本文,您可以了解如何配置 OpenStack 使其能够管理云计算环境中的混合 Hypervisor 场景。

OpenStack Mixture HypervisorsDriver configure and implementation theory