OpenStack Glance 总结

一、概述

Glance(OpenStack Image Service)是一个提供发现,注册,和下载镜像的服务。Glance 提供了虚拟机镜像的集中存储。通过 Glance 的 RESTful API,可以查询镜像元数据、下载镜像。虚拟机的镜像可以很方便的存储在各种地方,从简单的文件系统到对象存储系统(比如 OpenStack Swift)。

在 Glance 里镜像被当做模板来存储,用于启动新实例。Glance 还可以从正在运行的实例建立快照用于备份虚拟机的状态。

Glance 具体功能如下:

  • 提供 RESTful API 让用户能够查询和获取镜像的元数据和镜像本身;
  • 支持多种方式存储镜像,包括普通的文件系统、Swift、Ceph 等;
  • 对实例执行快照创建新的镜像。

Clance 在整个 OpenStack 架构中的位置如下图:
这里写图片描述

二、架构

在 Newton 之前的版本中,Glance 支持两种 RESTful API V1和V2,两者区别为:

  1. V1只提供了基本的镜像和用户操作功能:镜像创建、删除、下载、列表、详细信息查询、更新,以及镜像租户成员的创建、删除和列表。

  2. V2除了支持V1的所有功能外,主要是增加了如下功能:

    ● 镜像 location 的添加、删除和修改等操作;
    ● metadata namespace 操作;
    ● 镜像 tag 操作。

  3. V1 和V2对镜像后端存储的支持是相同的。

V1版本的实现,具有 glance-api 和 glance-registry 两个 WSGI 服务,二者都提供 RESTful API,但需要强调的一点是,glance-registry 提供的 RESTful API 是给 glance-api 使用的,并不开放给外部用户。
这里写图片描述

(1)glance-api
glance-api 是系统后台运行的服务进程。 对外提供 RESTful API,响应镜像查询、获取和存储的调用。glance-api 不会真正处理请求。

  • 如果是与镜像 metadata(元数据)相关的操作,glance-api 会把请求转发给 glance-registry;
  • 如果是与镜像自身存取相关的操作,glance-api 会把请求转发给该 image 的存储后端。

(2)glance-registry
glance-registry 是系统后台运行的服务进程。 负责处理和存取镜像的 metadata,例如镜像的大小和类型。

V2版本的实现就是将 glance-registry 集成到了 glance-api 内部,这么做的好处是减少了一个中间的处理环节。V1版本在 Newton 中标注被弃用,目前已经被移除。

Glance 支持多种格式的镜像,包括:
这里写图片描述

Glance 自己并不存储镜像。 真正的镜像是存放在后端存储中的。Glance 支持多种后端存储,包括:

  • A directory on a local file system:这是默认配置,在本地的文件系统里进行保存镜像。
  • GridFS:使用MongoDB存储镜像。
  • Ceph RBD:使用Ceph的RBD接口存储到Ceph集群中。
  • Amazon S3:亚马逊的S3。
  • Sheepdog:专为QEMU/KVM提供的一个分布式存储系统。
  • OpenStack Block Storage (Cinder)
  • OpenStack Object Storage (Swift)
  • HTTP:可以使用英特网上的http服务获取镜像。这种方式只能只读。
  • VMware ESX/ESXi or vCenter。

具体使用哪种 backend,是在 /etc/glance/glance-api.conf 中配置的。

三、操作示例

1. Dashboard 操作
登陆系统,选择“管理员->系统->映像”,点击“创建映像”。
这里写图片描述
填写镜像信息,点击“选择文件”按钮,选取本地镜像文件。
这里写图片描述
选择正确的镜像格式。
这里写图片描述
保存后,可以看到上传的镜像。
这里写图片描述

2. CLI 操作

上面的示例,cirros 这个镜像很小,通过 Dashboard 上传很快,操作会很顺畅。 但如果我们要上传的镜像比较大(比如好几个 G ),那么操作会长时间停留在上传的 Web 界面,我们也不知道目前到底处于什么状态。 对于这样的操作,CLI 是更好的选择。
(1)将镜像上传到控制节点的文件系统中,例如 /root/cirros-0.3.4-x86_64-disk.img
(2)设置环境变量
(3)执行镜像创建命令
这里写图片描述

镜像文件默认是放在控制节点的 /var/lib/glance/images 下,可以查看到所有的镜像文件
这里写图片描述

CLI其他操作:
查看镜像列表
这里写图片描述
删除镜像
这里写图片描述

四、镜像状态流

上传镜像时 Glance 会显示镜像的各种状态。当我们上传镜像时,第一步就是入队列,经过短时间的验证,镜像进入 queued 状态,保存镜像并开始上传。之后镜像会进入 saving 的状态,表示还没有完全上传完毕。镜像完全上传后,状态会变成 active。如果上传失败,将会变成 killed 或 deleted 状态。
这里写图片描述

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

五、镜像和实例

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

当我们启动一个实例时,我们需要指定 flavor。flavor 定义了实例可以有多少个虚拟 CPU,多大的 RAM 以及根磁盘、临时磁盘的大小。

下图显示了启动实例的系统状态。glance 包含一定数量的镜像,compute node 包含可用的 vcpu,内存和本地磁盘资源,cinder-volume 包含一定数量的 volume。
这里写图片描述
启动实例之前,需要选择一个镜像,flavor 和任何可选属性。选定的 flavor 提供一个系统盘,标记为 vda,另外一个临时盘被标记为 vdb(如果 flavor 中临时磁盘为0,则启动实例时不创建 vdb,一般默认也是这样设置)。
这里写图片描述

这里写图片描述
在上图中,基础镜像从 image store 复制到本地磁盘。 vda 是实例的第一个磁盘,如果镜像文件越小,则通过网络复制的数据越少,实例启动就会越快。实例创建时会创建一块空的临时数据盘 vdb(如果 flavor 中临时磁盘为0,则启动实例时不创建 vdb),当实例终止时,它将被删除。随后计算节点提供 vCPU 和内存资源之后,该实例将从 vda 启动。该实例运行并更改计算节点磁盘上的数据。

实例启动后,可以挂载 volume,cinder-volume 提供的 volume 被映射到第三个虚拟磁盘并将其称为 vdc(如果 flavor 中临时磁盘为0,则挂载的 volume 映射的虚拟磁盘为 vdb)。vdc(或vdb) 使用 iSCSI 连接到 cinder-volume。如果 volume store 位于单独的网络上,需要在计算节点 nova.conf 里指定的 my_block_storage_ip,将会通过存储网络直接通信。(本部分参考文档《一文读懂OpenStack Glance是什么》写的有问题,实例启动后,才可以挂载 volume,而不是创建实例同时就能挂载)。

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

六、总结

本文对 OpenStack 镜像服务 Glance 做了详细的介绍,包括其功能、架构、操作示例以及镜像和实例的关系。本文内容参考了网络上的很多有价值的文章,在这里表示非常感谢!

参考文档
https://docs.openstack.org/glance/latest/
http://www.cnblogs.com/sammyliu/p/4249151.html
http://www.cnblogs.com/CloudMan6/p/5384923.html
http://www.cnblogs.com/CloudMan6/p/5393376.html
云技术实践 公众号《一文读懂OpenStack Glance是什么》

猜你喜欢

转载自blog.csdn.net/dylloveyou/article/details/80530838