Glance(OpenStack Image Service)是一个提供发现,注册,和下载镜像的服务。Glance 提供了虚拟机镜像的集中存储。通过 Glance 的 RESTful API,可以查询镜像元数据、下载镜像。虚拟机的镜像可以很方便的存储在各种地方,从简单的文件系统到对象存储系统(比如 OpenStack Swift)。
在 Glance 里镜像被当做模板来存储,用于启动新实例。Glance 还可以从正在运行的实例建立快照用于备份虚拟机的状态。
Glance 具体功能如下:
Clance 在整个 OpenStack 架构中的位置如下图:
在 Newton 之前的版本中,Glance 支持两种 RESTful API V1和V2,两者区别为:
V1只提供了基本的镜像和用户操作功能:镜像创建、删除、下载、列表、详细信息查询、更新,以及镜像租户成员的创建、删除和列表。
V2除了支持V1的所有功能外,主要是增加了如下功能:
● 镜像 location 的添加、删除和修改等操作;
● metadata namespace 操作;
● 镜像 tag 操作。
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 不会真正处理请求。
(2)glance-registry
glance-registry 是系统后台运行的服务进程。 负责处理和存取镜像的 metadata,例如镜像的大小和类型。
V2版本的实现就是将 glance-registry 集成到了 glance-api 内部,这么做的好处是减少了一个中间的处理环节。V1版本在 Newton 中标注被弃用,目前已经被移除。
Glance 自己并不存储镜像。 真正的镜像是存放在后端存储中的。Glance 支持多种后端存储,包括:
具体使用哪种 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
下,可以查看到所有的镜像文件
上传镜像时 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是什么》