本文将介绍 OpenStack Compute (Nova) 和 Image (Glance) 项目,解释它们是如何融入整体 OpenStack 架构的,并展示它们的运作方式。本文在说明这些项目的过程中了解了如何安装、配置和使用各个组件。
本文将介绍 OpenStack Compute (Nova),它代表了任何工作负载的核心。如果有些云服务的工作中不包括计算,那么它们充其量只代表静态存储 — 但所有动态活动都会涉及一些计算元素。
OpenStack Compute 这个名称指的是一个特定的项目,该项目也被称为 Nova,但与计算和运行计算的软件相关的项目其实有两个,即 Image 和 Compute:
Nova 控制云计算架构,因此形成一个基础架构服务核心。Nova 也是 OpenStack 家族中最复杂的组件,主要因为它具有高度分散的性质和多个流程。
Nova 与其他几个 OpenStack 服务都有一些接口:它使用 Keystone 来执行其身份验证,使用 Horizon 作为其管理接口,并用 Glance 提供其镜像。它与 Glance 的交互最为密切,Nova 需要下载镜像,以便在加载镜像时使用。
在更详细地讨论 Nova 之前,让我们先仔细了解一下 Image 服务,它按时间顺序表示 Compute 工作负载的开始。Glance 是 OpenStack Image Service 的项目名称,它会注册、列出并检索虚拟机(VM)镜像。
Glance 管理在 OpenStack 集群中的镜像,但不负责实际的存储。它为从简单文件系统到对象存储系统(如 OpenStack Swift 项目)的多种存储技术提供了一个抽象。除了实际的磁盘镜像之外,它还保存描述镜像的元数据和状态信息。
OpenStack Image Store 是虚拟镜像的中央存储库。用户和其他项目可以存储公共和私有镜像,他们可以访问这些镜像来启动实例。他们还可以请求获得可用镜像的列表,检索它们的配置信息,然后将它们作为启动 Nova 实例的基础。您还可以从运行实例拍摄快照,作为备份虚拟机及其状态的一种手段。
在创建镜像之后,Nova 就开始起作用。它通常使用一个镜像来启动一个实例,或 VM。虽然它本身不包括任何虚拟化软件,但它可以通过与虚拟化技术有关联的驱动程序来集成许多常见的虚拟机管理程序。
从实践角度来看,启动实例涉及到识别并指定虚拟硬件模板(在 OpenStack 中被称为风格)。模板描述被分配给 VM 实例的计算(虚拟 CPU)、内存(RAM)和存储配置(硬盘)。默认的安装提供了五种风格,它们由管理员配置。
然后,Nova 通过将执行分配给某个特定的计算节点(在 OpenStack 中被称为主机)来调度被请求的实例。每个系统都必须定期报告其状态和能力,tonova-scheduler
使用数据来优化其分配。
整个分配过程由两个阶段组成。Filtering(过滤)阶段应用了一组过滤器,生成最适合的主机的列表。每个 OpenStack 服务都会公布其能力,这些能力是最重要的考虑因素之一。调度程序将会缩小主机的选择范围,以找到符合请求参数的主机。然后,Weighting(加权)阶段使用了一个特殊的函数来计算每个主机的成本,并对结果进行排序。这个阶段的输出是一个主机列表,这些主机可用最少的成本满足用户对给定数量的实例的请求。
Nova 还执行了其他一些函数,其中有许多函数与涵盖网络、安全性和管理的其他 OpenStack 项目有密切的交互。但 Nova 一般处理这些项目的特定于实例的方面,如连接和取消连接存储、分配 IP 地址,或拍摄运行实例的快照。
Nova 采用的是无共享架构(图 1),这样所有的主要部件都可以在不同的服务器上运行。分布式设计依赖于一个消息队列来处理组件对组件的异步通信。
Nova 将虚拟机的状态存储在一个基于结构化查询语言 (SQL) 的中央数据库中,所有的 OpenStack 组件都使用该数据库。该数据库保存了可用实例类型、网络(如果正在使用nova-network
)和项目的详细信息。用户可以使用 SQLAlchemy 支持的任何数据库。
OpenStack Compute 的主用户界面是 Web 仪表板(OpenStack Horizon)。这是所有 OpenStack 模块的中央门户,为所有项目提供图形界面,并执行应用程序编程接口(API)调用来调用任何被请求的服务。
该 API 基于 Representational State Transfer。这是一个 Web Server Gateway Interface 应用程序,它将统一资源指示器路由到控制器类上的操作方法。该 API 接收 HTTP 请求,处理命令,然后将任务通过消息队列或 HTTP(在使用ObjectStore
的情况下)委派给其他组件。Nova API 支持 OpenStack Compute API、Amazon Elastic Compute Cloud (Amazon EC2) API,以及面向特权用户的 Admin API。它会启动大部分协调活动和策略(如 Quota)。
每个 HTTP 请求都需要一个特定的身份验证凭据,它使用了提供商为 Compute 节点配置的身份验证架构。Authorization Manager 不是一个独立的二进制文件;相反,它是一个 Python 类,任何 OpenStack 组件都可以使用它进行身份验证。它暴露了用户、项目和角色的 API 授权使用情况,并与 OpenStack Keystone 进行通信,以便获得详细信息。实际的用户存储可以是数据库或者 Lightweight Directory Access Protocol(LDAP,轻量级目录访问协议)后端。
ObjectStore
是一个基于 HTTP、基于对象的简单存储(如 Amazon Simple Storage Service),专门针对镜像。通常可以用 OpenStack Glance 取代它。
消息队列为 OpenStack Nova 中的所有组件提供了相互通信、相互协调的一种手段。它就像所有 Nova 组件都共享和更新的一个中心任务列表。
所有这些组件都在一个非阻塞的基于消息的架构上运行,只要它们使用了相同的消息队列服务,就可以在相同或不同的主机上运行。它们使用了 Advanced Message Queuing Protocol,以面向回调的方式进行交互。在默认情况下,大多数分发实现了通过 Kombu 库访问的 RabbitMQ,但也提供了面向 Apache QPID 和 ZeroMQ 的插件。
Nova 组件通过使用 Pub/sub 的 Message Broker,使用远程过程调用实现彼此之间的通信。从技术角度讲,Nova 实现了 rpc.call
(请求/响应;该 API 作为消费者)和rpc.cast
(单向;该 API 作为发布者)。
Nova API 和调度程序使用消息队列作为 Invoker,而 Network 和 Compute 充当了工人。Invoker 通过 rpc.call
或rpc.cast
发送消息。Worker 模式从队列接收消息,并用适当的响应回答每个 rpc.call
。
对于 Nova,要考虑的两个主要守护进程是调度程序和计算守护进程。调度程序确定了为虚拟机请求分配哪个计算主机。它采用了上述的过滤和调度算法,并考虑多种参数,包括亲和性(与共置相关的工作负载)、反亲和性(分发工作负载)、可用区、核心 CPU 使用率、系统内存,以及自定义的 JavaScript Object Notation 时间表。请注意,它只在进行配置时做出此决定,不会重新分配正在运行的实例。
Nova 计算是一个工人守护进程,用于管理与虚拟机管理程序和虚拟机的通信。它从消息队列中检索其订单,并使用虚拟机管理程序的 API 执行虚拟机的创建和删除任务。它还在中央数据库中更新其任务状态。
为了获得完整性,一些守护进程将会覆盖原来分配给 Nova 的、正慢慢迁移到其他项目的功能。Network Manager 负责管理 IP 转发、网桥和虚拟局域网。它是一个工人守护进程,从消息队列读取与网络有关的任务。OpenStack Neutron 现在也涵盖这些功能,可以在适当的位置上选中它。
Volume Manager 负责处理将持久存储的块存储卷附加到虚拟机以及从虚拟机分离持久存储的块存储卷(类似于 Amazon Elastic Block Store)。此功能已被提取到 OpenStack Cinder。这是一个使用 Logical Volume Manager 的 iSCSI 解决方案。
回页首
各发行版和 OpenStack 版本的实际安装说明差别很大。一般来说,它们是作为分发的一部分提供的。不过,您必须完成相同的基本任务。本节让您了解此基本任务涉及的内容。
OpenStack 依赖于一种 64 位 x86 架构;另外,它是为商用硬件而设计的,所以具有极低的系统要求。它可以在配有包含 8GB RAM 的单个系统上运行整套 OpenStack 项目,但对于任何重大的工作,官方建议是,对于运行网络、卷、API、调度程序和镜像服务的云控制器节点,至少要配有 12GB RAM、两个 2TB 硬盘和一个网络适配器。计算节点(运行虚拟实例)的负载将会有更大的差异,但对于简单的系统而言,一个四核 CPU、32GB 的 RAM 和 2Gb 的网络适配器就是一个良好的起点。
安装指南取决于所用的发行版,更具体地说,取决于所选择的软件包管理实用工具。在许多情况下,必须声明存储库。因此,举例来说,如果您使用的是 Zypper,那么您要用zypper ar
向 libzypp
公开:
点击查看代码清单
然后,在控制器和计算节点上安装所需的 Nova 包。软件包管理实用工具应该自动安装所有依赖关系。
为了进行说明,我已经提供了适用于 Ubuntu、Red Hat (Red Hat Enterprise Linux®、CentOS、Fedora) 和 openSUSE 的主要命令:
点击查看代码清单
在计算节点上,运行:
sudo apt-get install nova-compute nova-network sudo apt-get install glance
sudo yum install openstack-nova sudo yum install openstack-glance
sudo zypper install openstack-nova openstack-glance
Nova 配置包括几个文件,但最重要的是 nova.conf,它被安装在 /etc/nova 中。对于标准安装,一组默认选项就可以正常工作,但对于任何特殊要求,则需要编辑配置。您可以在这里查看nova.conf 文件格式,并在此处查看 nova.conf 配置选项列表。
回页首
要了解如何在实践中使用 OpenStack Compute,可以想象一下自己有一个想在 OpenStack 中加载的基本镜像。在配置系统并完成一些个性化的定制后,您可能想获得运行实例的快照,这样就可以加快配置过程,再次执行相同的任务。在完成项目后,您可能会停止实例,甚至可能想要删除镜像。
点击查看大图
您可以在这个窗口中执行其他任务,包括编辑、暂停、挂起和重新启动实例。在使用完实例后,仍将在这里终止实例。
点击查看大图
回页首
这就是开始使用 OpenStack Compute 功能所需的一切。在使用 OpenStack 计划并部署计算工作负载时,需要记住的重点是:它不是一个虚拟化平台,而是一个管理抽象,它允许您使用多种可插拔技术来跨多个虚拟机管理程序协调工作流。OpenStack 只简化了这些组件的管理和集成。