目录
4)storage repository for image files
一、OpenStack 架构
下图体现了 OpenStack 中各个服务之间的相互关系,图中的箭头体现了提供服务方和接受服务方的相对关系。
云计算概念图
OpenStack 由多种服务组成,每种服务具有独立的命名。在整个 OpenStack 架 构中,Keystone 提供认证服务,接收来自用户和服务的认证请求,并对身份进行认证。各个服务之间通过公用的 API 接口进行交互。大部分服务均包含一个 API 进程, 用于侦听 API 请求,根据服务的性质选择处理请求或转发请求。服务进程之间的通讯通过消息队列实现,如 AMQP。
在部署完成的云系统平台上,用户通过 Dashboard 或 RestAPI 方式在经 KeyStone 模块认证授权后,可以执行创建虚拟机服务。通过 Nova 模块创建虚拟机实例,Nova 调用 Glance 模块提供的镜像服务,然后调用 Neutron 模块提供网络服务。根据需要可以选择给虚拟机增加存储卷,卷功能由 Cinder 模块提供服务。整个过程在 Ceilometer 模块的资源监控下完成。同时 Cinder 提供的 Volume 和 Glance提供的镜像可以通过 Swift 对象存储机制进行保存。
通过以上解析可以看到 OpenStack 云平台服务的提供主要是依靠 Nova、Glance、 Cinder 和 Neutron 四个核心模块完成的,四个辅助模块 Horizen、 Ceilometer、 Keystone、Swift 提供的访问、监控、权限和对象存储功能。
二、控制台 Dashboard
Dashboard(项目名称为 horizon)是一个 Web 接口,使得云平台管理员以及用户可以管理不同的 OpenStack 资源以及服务。Dashboard 通过 Apache 的 mod_wsgi 搭建,并通过 python 模块实现和不同的 OpenStack API 进行交互,从而实现管理目的。Dashboard 是一个用以管理、控制 OpenStack 服务的 Web 控制面板,通过它可以实现绝大多数 OpenStack 的管理任务。如实例、镜像、密匙对,卷等。在上一章节中基于 OpenStack 入门体验的大部分操作,都是基于 Dashboard 操作。通过 Dashboard,管理员无需记忆繁琐复杂的 OpenStack 命令。除此之外,用户还可以在控制面板中使用终端或 VNC 直接访问实例控制台。Dashboard 可以实现以下管理任务。
- 实例管理:创建、删除实例,查看终端日志,远程连接实例,管理卷等;
- 访问与安全管理:创建安全组,管理密匙对,设置浮动 IP 地址等;
- 偏好设定:对虚拟硬件模板可以进行不同程度的偏好设定;
- 镜像管理:导入、编辑或删除镜像;
- 用户管理:创建用户、管理用户、设置配额、查看服务目录等;
- 卷管理:管理卷和快照;
- 对象存储处理:创建、删除容器和对象。
三、身份认证服务 Keystone
Keystone (OpenStack Identity Service)中主要涉及到如下几个概念。
1)用户(user)
在 OpenStack 中,用户是使用 OpenStack 云服务的人、系统或服务。用户可以登录或使用指定的 token 访问云中的资源,并可以被指派到指定的项目或角色。认证服务通过对用户身份的确认,来判断一个请求是否被允许。用户通过认证信息如密码、API Keys 等进行验证。
2)项目(project)
项目是各个服务中的一些可以访问的资源集合,用来分组或隔离资源或身份对象。不同服务中,项目所涉及的资源不同。在 Nova 服务中项目可以是云主机,在 Swift 和 Glance 中项目可以是镜像存储,在 Neutron 中项目可以是网络资源。默认情况下,用户总是被绑定到项目中。一个项目中可以有多个用户,一个用户可以属于一个或多个项目。
3)角色(role)
角色是一组用户可以访问的资源权限集合,这些资源包含虚拟机、镜像、存储资源等。 用户既可以被添加到全局的角色,也可以被添加到指定项目内的角色中。其区别是,全局的角色适用于所有项目中的资源权限,而项目内的角色只适用于某个项目内的资源权限。
4)服务(service)
用户使用云中的资源是通过访问服务的方式实现,OpenStack 中包含许多服务,如提供计算服务的 Nova、提供镜像服务的 Glance 以及提供对象存储服务的 Swift。一个服务可以确认当前用户是否具有访问其资源的权限。但是当一个用户尝试访问其项目内的 service 时,该用户必须知道这个服务是否存在以及如何访问这个服务。
5)令牌(token)
令牌是一串数字字符串,用于访问 OpenStack 服务的 API 以及资源。一个令牌可以在特定的时间内生效,并可以在任意时间释放。在 keystone 中主要是引入令牌机制来保护用户对资源的访问。
6)端点(endpoint)
所谓端点,是指用于访问某个服务的网络地址或 URL。如果需要访问一个服务,则必须知道该服务的端点。在 keystone 中包含一个端点模板,这个模板提供了所有已存在的服务的端点信息。一个端点模板包含一个 URL 列表,列表中的每个 URL 都对应一个服务实例的访问地址,并且具有 public、private 和 admin 这三种权限。其中 public 类型的端点可以被全局访问,private 类型的端点只能被 OpenStack 内部服务访问,admin 类型的端点只能被管理员访问。
OpenStack 身份认证服务将管理认证、授权以及服务目录整合为一个访问点,同时也是用户需要和 OpenStack 进行交互的第一个服务。一旦认证通过,终端用户就可以使用其身份访问 OpenStack 其他服务。同样的,其他服务也将利用身份认证服务确认来访用户身份是否合法以及是否具备相应的权限。此外,OpenStack 身份认证服务可以集成其他的身份认证管理系统,如 LDAP 等。
身份认证服务为其他 OpenStack 服务提供验证和授权服务,为所有服务提供终端目录。 此外,提供用户信息但是不在 OpenStack 项目中的服务(如 LDAP 服务)可被整合进先前存在的基础设施中。
为了从身份认证服务中获益,其他的 OpenStack 服务需要身份认证服务合作完成某个任务。当某个 OpenStack 服务收到来自用户的请求时,该服务发送请求到身份认证服务, 以验证该用户是否具有权限进行此次请求。当安装 OpenStack 身份服务时,用户必须将之注册到其 OpenStack 安装环境的每个服务。身份服务才可以追踪到已经安装哪些 OpenStack 服务,并在网络中定位它们。
Keystone 是 OpenStack 框架中负责管理身份验证、服务规则和服务令牌功能的模块。 用户访问资源需要验证用户的身份与权限,服务执行操作也需要进行权限检测,这些都需要通过 Keystone 来处理。Keystone 类似一个服务总线, 或者说是整个 Openstack 框架的注册表,其他服务通过 keystone 来注册其服务的 Endpoint,任何服务之间相互的调用,需要经过 Keystone 的身份验证,并获得目标服务的 Endpoint,从而找到目标服务。以创建一 个云主机为例,下图是 keystone 的工作流程图。
Keystone 工作流程图
身份认证服务包含以下组件。
- 服务器:一个中心化的服务器使用 RESTful 接口来提供认证和授权服务。
- 驱动:驱动或服务后端被整合到集中式服务器中。它们被用来访问 OpenStack 外部仓库的身份信息,并且它们可能已经存在于 OpenStack 被部署在的基础设施(如 SQL 数据库或 LDAP 服务器)中。
- 模块:模块运行于使用身份认证服务的 OpenStack 组件的地址空间中,这些模块拦截服务请求,获取用户凭据,并将它们送入中央服务器以寻求授权。使用 Python Web 服务器网关接口,可以实现中间件模块和 OpenStack 组件间的整合。
四、镜像模块 Glance
镜像服务允许用户发现、注册和获取虚拟机镜像。它提供了一个 REST API,允许查询虚拟机镜像的元数据,并获取一个现存的镜像。可以将虚拟机镜像存放到各种位置,从简单的文件系统到对象存储系统,如 OpenStack Swift 项目,默认是存储在本地文件系统上的。 其实在生产环境中这个模块本身不存储大量的数据,需要挂载后台存储 swift 来存放实际的镜像数据。
在 OpenStack 环境中,镜像是用于在计算节点生成虚拟机。脱离了镜像服务,就无法创建虚拟机,所以镜像服务是 OpenStack 的一个核心服务。
4.1、Glance 主要组件
Glance 镜像服务主要涉及到以下组件。
1)glance-api
glance-api 用于接收镜像 API 的调用,诸如镜像发现、恢复以及存储等。作为一个后台进程,glance-api 对外提供 REST API 接口,响应用户发起的镜像查询、获取和存储的调用。
2)glance-registry
glance-registry 用于存储、处理和恢复镜像的元数据,元数据包括镜像的大小和类型等属性,registry 是一个内部服务接口,不建议暴露给普通用户。
3)database
database 用于存放镜像的元数据,可以根据需要选择数据库,如 MySQL、SQLite 等。
4)storage repository for image files
一般情况下,glance 并不需要存储任何镜像,而是将镜像存储在后端仓库中。Glance 支持多种 repository。主要包括对象存储 Swift、块存储 Cinder、VMware 的 ESX/ESXi 或 者 vCenter、亚马逊的 S3、HTTP 可用服务器、Ceph 等。
4.2、镜像的格式
Glance 支持多种镜像格式,包括磁盘格式和容器格式。OpenStack 中可以支持多种虚拟化的技术,如 KVM、XenServer、Hyper-V 和 VMware 等。用户在上传镜像时,需要指定上传镜像文件的格式。除了磁盘格式,在 Glance 中还有容器的格式。一般在上传镜像时只需指定容器格式为 bare,即为空。因为 Glance 中并没有真正使用到容器格式。容器格式用来表示虚拟机镜像文件是否包含了元数据,例如 OVF 格式。下面列出了 Glance 中常用的几种镜像文件格式。
1)RAW
RAW 是一种没有格式或裸格式的磁盘文件类型,RAW 对数据不做任何修饰和处理,直接保存最原始的状态,所以在性能方面非常出色。由于 RAW 格式保存原始数据,因此更容易和其他镜像格式进行转换。
2)QCOW2
QCOW2 是 QCOW 的升级版本,其主要特性是磁盘文件大小可以动态按需增长,并且不会占用所有的实际磁盘空间大小。例如创建了 100GB 的 QCOW2 格式的磁盘,而实际只保存了 2GB 数据,那么将只占用了实际物理磁盘的 2GB 空间。与 RAW 相比,使用这种格式可以节省磁盘容量。
3)VHD
VHD 是微软公司产品使用的磁盘格式。Virtual PC(微软早期虚拟化产品)和 Hyper-V 使用的就是 VHD 格式。VirtualBox 也提供了对 VHD 的支持。如需在 OpenStack 上使用 Hyper-V 类型的虚拟化,就应上传 VHD 格式的镜像文件。
4)VMDK
VMDK 是 VMware 公司产品使用的磁盘格式。目前也是一个开放的通用格式,除了 VMware 自家的产品外,QEMU 和 VirtualBox 也提供了对 VMDK 格式的支持。
5)VDI
VDI 是 Oracle