OpenStack Glance是一种提供发现,注册,和下载的镜像服务。OpenStack Glance是一个提供虚拟机镜像的集中式仓库。通过Glance的RESTful API,可以查询镜像元数据下载镜像。虚拟机的镜像可以很方便的存储在各种地方,从简单的文件系统到对象存储系统(如OpenStack Swift项目)。
在Glane里镜像被当做模板来存储,用于启动新实例。 Glance是一个可以组织和管理大量虚拟磁盘镜像的独立服务。Glance为云磁盘镜像提供了一个端到端的解决方案。它还可以从正在运行的实例建立快照用于备份虚拟机的状态。
Glance
组件
Glance有以下几个组件:
-
glance-api, 接收镜像发现,查询,和存储镜像的api调用。
-
glance-registry, 存储,处理和查询镜像的元数据信息。
-
database, 存储镜像元数据
-
repository, 集成了各种openstack组件,比如文件系统,S3, 以及其它的http镜像存储。
Glance接收来自终端用户或Nova组件的镜像的API请求,镜像文件可以存储在对象存储服务swift上或者其它存储仓库。
镜像服务支持以下几种后端存储:
-
文件系统 Openstack的镜像默认存储在文件系统后端。在本地的文件系统里进行保存镜像。
-
对象存储 swift
-
Block Storage cinder.
-
VMware ESX/ESXi or vCenter.
-
S3 亚马逊的s3等等.
-
HTTP 可以使用英特网上的http服务获取镜像。这种方式只能只读。
-
RADOS Block Device (RBD) 使用Ceph的RBD接口存储到Ceph集群中
-
Sheepdog 专为QEMU/KVM提供的一个分布式存储系统.
-
GridFS 使用MongoDB存储镜像.
Glance
架构
Glance具有客户端 - 服务器体系结构,并提供Rest API,通过Rest API来请求服务。通过客户端发送Rest API的请求,并等待Keystone认证。 Glance域控制器管理所有内部操作,这些分为很多层,每层实现自己的任务。
Glance store是glacne和外部存储后端或者本地文件系统提供通信的一个层,并提供统一的访问接口。数据库为每一个组件提供一个集中的数据访问。
Glance架构由以下几个组件组成:
-
Client - 任何应用都可以通过Client来使用glance服务。
-
REST API – 通过REST方式暴露Glance功能。
-
Database Abstraction Layer (DAL) –统一Glance和数据库交互的一个应用层接口。
-
Glance Domain Controller –完成glance主要的功能的中件间:
-
authorization,notifications, policies, database connections.
-
Glance Store – 集成glance和各种后端存储服务.
-
Registry Layer –可选层,通过使用单独的服务来组织domain和DAL之间的安全通信。
Glance
格式
当我们上传镜像时,我们需要指定虚拟机镜像的格式。 Glance支持各种格式,如磁盘格式和容器格式。虚拟磁盘类似于物理服务器的引导驱动程序,只会压缩到文件中。不同的虚拟化支持不同的磁盘格式。
磁盘格式
虚拟机镜像的磁盘格式是底层磁盘镜像的格式。以下是OpenStack支持的磁盘格式。
容器格式
正如OpenStack glance也支持容器格式的概念,它描述了文件格式,并包含关于实际虚拟机的额外元数据。
以下是OpenStack Glance支持的Container格式.
这里注意下,Glance或其他OpenStack组件目前并不支持使用容器格式。如果不确定,最好使用'bare'作为容器格式,比如我们上传镜像到glance,bare就是没有容器.
使用如下命令上传镜像到glance
root@CONTROLLER:~#glance image-create --name "cirros-0.3.4-x86_64" --file/tmp/images/cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-formatbare --visibility public --progress
这里使用image-create来上传镜像,其--name表示上传镜像后镜像的名称,--file表示要上传镜像的路径,磁盘格式--disk-format以qcow2和--container-format为bare。可见性--visibility public表示镜像可以公开访问,进度--pogress表示显示上传进度条。
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
可以停用镜像。也可以重新激活,或者删除。当管理员对镜像进行更新时,可以先把镜像停用,这样镜像对非管理员用户就不可见了,当更新完成后,可以重新激活镜像,以便用户可以用更新后镜像启动虚拟机。