OpenStack之Glance模块

一、Glance服务

1.Glance架构

Glance架构是一个典型的CS架构,提供的也是标准的Rest接口,各个layer分层也是很清楚的。

2.Glance服务

Glance是OpenStack镜像服务组件,glance服务默认监听在9292端口,其接收REST API请求,然后通过其他模块(glance-registry及image store)来完成诸如镜像的获取、上传、删除等操作,Glance提供restful API可以查询虚拟机镜像的metadata,并且可以获得镜像,通过Glance,虚拟机镜像可以被存储到多种存储上,比如简单的文件存储或者对象存储(比如OpenStack中swift项目)是在创建虚拟机的时候,需要先把镜像上传到glance,对镜像的列出镜像、删除镜像和上传镜像都是通过glance进行管理。

3.Glance主要组件
  • glance-api
    glance-api是系统后台运行的服务进程,对外提供REST API,响应image查询、获取和存储的调用。
    glance-api不会真正处理请求。如果是与image metadata(元数据)相关的操作,glance-api会把请求转发给 glance-registry。如果是与image自身存取相关的操作,glance-api会把请求转发给该image的store backend。
  • glance-registry
    glance-registry负责与mysql数据交互,用于存储或获取镜像的元数据(metadata),提供镜像元数据相关的REST接口,通过glance-registry可以向数据库中写入或获取镜像的各种数据,glance-registyr监听的端口是9191,glance数据库中有两张表,一张是image表,一张是image property表,image表保存了镜像格式、大小等信息,image property表保存了镜像的定制化信息。
  • Database
    Image的metadata会保持到database中,主要使用MySQL和SQLite。
  • image store
    image store是一个存储的接口层,通过这个接口glance可以获取镜像,image store支持的存储有Amazon的S3、openstack本身的swift、还有ceph、glusterFS、sheepdog等分布式存储,image store是镜像保存与读取的接口,但是它只是一个接口,具体的实现需要外部的支持,glance不需要配置消息队列,但是需要配置数据库和keystone。
    Glance自己并不存储image。真正的image是存放在repository中的,Glance支持多种repository。如下:
A directory on a local file system(这是默认配置)
RADOS block devices
VMware datastore
Amazon S3
HTTP
OpenStack Block Storage (Cinder)
OpenStack Object Storage (Swift)
  • Metadata definition service
    对于厂商、管理员、服务常见的API来说,用户有意地定义自己元数据。此元数据可用于不同类型的资源,如镜像、卷、单个主机和集合。本服务可以定义新属性的键、描述、约束以及与之相关联的资源类型。

4.Glance的格式

(1)磁盘格式
虚拟机镜像的磁盘格式是底层磁盘镜像的格式。以下是OpenStack支持的磁盘格式。

格式说明:

  • 1、RAW
    RAW即常说的裸格式,它其实就是没有格式,最大的特点就是简单,数据写入什么就是什么,不做任何修饰,所以再性能方面很不错,甚至不需要启动这个镜像的虚拟机,只需要文件挂载即可直接读写内部数据。并且由于RAW格式简单,因此RAW和其他格式之间的转换也更容易。在KVM的虚拟化环境下,有很多使用RAW格式的虚拟机。
  • 2、QCOW2
    qcow2是qcow的升级版本,它是QEMU的CopyOn Write特性的磁盘格式,主要特性是磁盘文件大小可以随着数据的增长而增长。譬如创建一个10GB的虚拟机,实际虚拟机内部只用了5GB,那么初始的qcow2磁盘文件大小就是5GB。与RAW相比,使用这种格式可以节省一部分空间资源。
  • 3、VHD
    VHD也是一种通用的磁盘格式。微软公司的Virtual PC和Hyper-V使用的就是VHD格式。VirtualBox也提供了对VHD的支持。如果要在OpenStack上使用Hyper-V的虚拟化,就应该上传VHD格式的镜像文件。
  • 4、VMDK
    VMware创建的一个虚拟机磁盘格式,目前也是一个开放的通用格式,除了VMware自家的产品外,QEMU和VirtualBox也提供了对VMDK格式的支持。
  • 5、VDI
    Oracle公司的VirtualBox虚拟软件所使用的格式。
  • 6、ISO
    ISO是指一种存档数据文件在光盘上的格式。
  • 7、AKI、ARI、AMI
    Amazon公司的AWS所使用的镜像格式。

(2)容器格式
正如OpenStack glance也支持容器格式的概念,它描述了文件格式,并包含关于实际虚拟机的额外元数据。

以下是OpenStack Glance支持的Container格式。

二、Glance处理流程

1.Glance请求流程

Client端发送请求,api端router.py中将请求下发,选择相应的方法处理请求,经过中间auth, notifier, policy, quota到location,会调用到glance_store进行底端存储,并返回存储的位置信息,需要写到数据库中 在跟数据库的交互中需要用到glance_registry,将镜像的相关信息写到数据库中,值得注意的是会将上面镜像存储的位置信息location_uri写入到数据库中,在进行删除等操作会直接从数据库中读取这个uri,进行删除。

2.Glance状态流

上传镜像时Glance会显示镜像的各种状态。当我们第一步上传镜像时,第一步就是入队列,经过短时间的验证,镜像进入queued状态,保存镜像并开始上传。之后镜像会进入saving的状态,表示还没有完全上传完毕。镜像完全上传后,状态会变成Active。如果上传失败,将会变成killed或deleted状态。另外我们还可以使用命令停用或者重新激活完全上传成功的镜像。

下图为glance镜像的状态流转图。

状态说明:

  • queued
    在Glance registry里已经通过验证可以开始存储. 暂时没有镜像数据被上传到glance,镜像大小在上传时设置为0。
  • saving
    表示正在上传镜像到Glance。通过POST /images接口注册镜像,如果有x-image-meta-location http头,这个镜像将不会处于saving状态(因为镜像数据在其他位置已经可用)。
  • active
    表示在glance里是一个完全可用的镜像。当镜像上传成功后,会切换到这个状态。.
  • deactivated
    表示不允许任何非管理的用户访问。禁止下载镜像,同时也禁止所以可能获取镜像数据的操作,比如镜像导出和镜像克隆等操作。
  • killed
    表示上传镜像时发生错误,这个镜像不可用。
  • deleted
    Glance仍然保留了镜像的相关信息,但不能在被使用。这个状态下的镜像将会被自动删除。
  • Deactivatingand Reactivating an image
    可以停用镜像。也可以重新激活,或者删除。当管理员对镜像进行更新时,可以先把镜像停用,这样镜像对非管理员用户就不可见了,当更新完成后,可以重新激活镜像,以便用户可以用更新后镜像启动虚拟机。

三、镜像与实例

如前所述,磁盘镜像作为模板存储。镜像服务存储和管理镜像。实例是在计算节点上运行的单个虚拟机,计算节点管理这些实例。用户可以从用同一个镜像启动任意数量的实例。每个启动的实例都是基于镜像的一个副本,所以实例上的任何修改都不会影响到镜像。我们可以对正在运行实例做快照,并可以用快照于启动另一个新的实例。

当我们启动一个实例时,我们需要指定Flavor。Flavor定义了实例可以有多少个虚拟CPU,多大的RAM以及临时磁盘的大小。 OpenStack提供了预定义的flavor,我们也可以新创建和编辑Flavor。

下图显示了启动实例的系统状态。glance store包含一定数量的镜像,计算节点包含可用的vcpu,内存和本地磁盘资源,cinder-volume包含一定数量的volume。

启动实例之前,需要选择一个镜像,flavor和任何可选属性。选定的 flavor提供一个系统盘,标记为vda,另外一个临时盘被标记为vdb,cinder-volume提供的volume被映射到第三个虚拟磁盘并将其称为vdc。

vdc使用iSCSI连接到cinder-volume。随后计算节点提供vCPU和内存资源之后,该实例将从vda.启动。该实例运行并更改磁盘上的数据。如果volume store位于单独的网络上,需要在计算节点nova.conf里指定的my_block_storage_ip,将会通过存储网络直接通信。

实例被删除后, 除volume之外的其它资源都会被回收。临时盘将会被清空,内存和vCPU资源被会被释放。在这个过程中镜像不会发生任何改变。

四、Glance配置文件

Glance-api.conf :Glance api 服务配置文件.

Glance-registry.conf :Glanceregistry服务配置文件,用户存储镜像有关的元数据。

glance-scrubber.conf :用于清理已删除的镜像的服务。

policy.json :镜像服务的访问控制。在这里,我们可以定义角色和策略,是OpenStack Glance中的安全特性。

参考文章:
http://www.sohu.com/a/156310708_610730
http://www.bubuko.com/infodetail-2287562.html
https://www.2cto.com/net/201707/657859.html

原文地址:https://www.cnblogs.com/tongxiaoda/p/8757977.html