一、为什么要glance?
要理解镜像服务,先得搞清楚什么是镜像以及为什么要用镜像?
在传统 IT 环境下,安装一个系统要么从安装系统从头安装,要么用 Ghost 等克隆工具恢复。这两种方式有如下几个问题:
云环境下需要更高效的方案,这就是使用镜像。 镜像是像一个模板,里面包含了基本的操作系统和其他的软件。
举例来说,有家公司需要为每位员工配置一套办公用的系统,一般需要一个 Win7 系统再加 office 软件。
OpenStack 是这么玩的:
在这个过程中,第 1 步跟传统方式类似,需要手工操作和一定时间,但第 2、3 步非常快,全自动化,一般都是秒级别并且 2、3 步可以循环做。 比如公司新上了一套 OA 系统,每个员工的 PC 上都得有客户端软件,那么可以在某个现有虚拟机中先手工安装好 OA 客户端,然后执行 snapshot 操作,得到新的镜像,以后可以就直接使用新镜像创建虚拟机了。另外,snapshot 还有备份的作用,能够非常方便的恢复系统。
二、glance的功能
镜像服务的功能是管理镜像,让用户能够发现、获取和保存镜像。在 OpenStack 中,提供镜像服务的是 Glance,其具体功能如下:
①查询和获取镜像的元数据和镜像本身
②注册和上传虚拟机镜像,包括镜像的创建、上传、 下载和管理
③维护镜像信息,包括元数据和镜像本身。
④支持多种方式存储镜像,包括普通的文件系统、Swift. Amazon S3等
⑤对虚拟机实例执行创建快照命令来创建新的镜像,或者备份虚拟机的状态。
三、glance数据传输流程
glance-api 是系统后台运行的服务进程,对外提供 REST API,响应 image 查询、获取和存储的调用,不会真正处理请求。 如果操作是与 image metadata(元数据)相关,glance-api 会把请求转发给 glance-registry,glance-registry会解析请求内容,并与数据库(DB)交互存储、处理、检索镜像的元数据。
如果操作是与 image 自身存取相关,glance-api 会把请求转发给该 image 的 store backend。
glance-registry:是系统后台运行的glance注册服务进程,负责处理与镜像元数据相关的RESTful请求,元数据包括镜像大小、类型等信息。
DB模块:存储的是镜像的元数据,可以选用MYSQL、MariaDB、 SQLite等数据库。
存储后端(Store Backend) 自身并不存储镜像,它将镜像存放在后端存储系统中。镜像本身的数据通过glance_ store存放在各种后端,并可从中获取。支持本地存储、对象存储、RBD块设备、Sheepdog分布式存储、Cinder块存储、VMware数据存储。
四、镜像格式
raw 无结构的磁盘格式
vhd 此格式通用于VMware、Xen、 VirtualBox以及 其他虚拟机管理程序
vhdx vhd格式的增强版本,支持更大的磁盘尺寸
vmdk 一种比较通用的虚拟机磁盘格式
vdi 由VirtualBox虛拟机监控程序和QEMU仿真器支持的磁盘格式
iso 用于光盘(CD- ROM)数据内容的档案格式
ploop 由Virtuozzo支持,用于运行OS容器的磁盘格式
qcow2 由QEMU仿真支持,可动态扩展,支持写时复制(Copy on Write)的磁盘格式
aki 在Glance中存储的Amazon内核格式
ar 在Glance中存储的Amazon虚拟内存盘(Ramdisk)格式
ami 在Glance中存储的Amazon机器格式
五、镜像状态
1、镜像只是上传到glance,被glance统一管理
queued :这是一种初始化状态, 镜像文件刚被创建,在Glance数据库只有其元数据,镜像数据还
没有上传至数据库中
saving:是镜像的原始数据在上传到数据库中的一种过渡状态,表示正在上传镜像
uploading:指示已进行导入数据提交调用,此状态下不允许调用PUT/file (saving状态会执行
PUTfile,这是另外一种上传的方法)
importing:指示已经完成导入调用,但是镜像还未准备好使用
2、在使用过程中可能呈现的五种状态
active:表示当镜像数据成功上传完毕,成为Glance中可用的镜像
deactivated:表示任何非管理员用户都无权访问镜像数据,禁止下载镜像,也禁止镜像导出和镜像克隆之类的操作
killed:表示镜像上传过程中发生错误,镜像不可读.
deleted:镜像将在不久后被自动删除该镜像不可再用,但是目前Glance仍然保留该镜像的相关信息和原始数据
pending_ delete:与deleted相似, Glance还没有清除镜像数据,但处于该状态的镜像不可恢复
六、访问权限
①Public(公共的):可以被所有的项目使用
②Private (私有的):只有被镜像所有者所在的项目使用
③Shared (共享的):一 个非共有的镜像可以共享给其他项目,这是通过项目成员(member-*) 操作来实现
④Protected (受保护的):这种镜像不能被删除