Glance即image service(镜像服务),就是为建立虚拟机提供镜像的地方docker
这个问题问的好,openstack就是构建Iaas平台对外提供虚拟机的啊,构建虚拟机没有镜像怎么行,并且还不能只有一个数据库
Glance服务使用户可以发现,注册,检索虚拟机的镜像,它提供一个可以查询虚拟机镜像元数据和检索真实镜像的REST API(实际上就是一个URL,glance就是经过url来标志一个镜像的)json
<Glance Server Location>/v1/image/<ID>后端
<Glance Server Location>:glance服务安装的位置api
/v1:使用v1版本缓存
/images:请求的类型为镜像安全
/<ID>:一个uuid,在glance中全局惟一架构
在Newton以前的版本中,glance支持两种REST API V1和V2,二者区别仍是很明显的:dom
(1). V1只提供了基本的image和member操做功能:镜像建立、删除、下载、列表、详细信息查询、更新,以及镜像tenant成员的建立、删除和列表。工具
(2). V2除了支持V1的全部功能外,主要是增长了以下功能:
(3).V1 和V2对 image store 的支持是相同的。
V1版本的实现,具备glance-api和glance-registry两个WSGI服务,两者都提供REST API,但须要强调的一点是:glance-registry提供的REST API是给glance-api使用的,即The registry is a private internal service meant for use by OpenStack Image service. Do not expose this service to users。
v2的实现就是将glance-registry集成到了glance-api内部,这么作的好处是减小了一个中间的处理环节
在Newton版本中V1已通过时了,而且V1最终会被移除
镜像的数据包括:1.镜像元数据;2.镜像自己即chunk
其中镜像的元数据是经过glance-registry保存到数据库中,而镜像的chunk数据是经过Glance store Drivers存放到各类bakcend store中。
在配置glance时咱们使用file做为后端,即将镜像存放于本地文件系统中,上传或者存储镜像的目录位于按照glance服务的机器上(控制节点),默认目录是:/var/lib/glance/images/,咱们应该确认该目录有足够的空间可使用。
须要特别强调的一点是:fileh后端一般位于控制节点自己,于是这种后端并不适用于多节点部署。
在glance服务上周星期的运行不少进程来支持缓存。在作glance集群时要考虑使用复制服务来确保一致性和可用性,其余的周期性的进程包括auditors, updaters, and reapers。
public 公共的:能够被全部的项目使用。
private 私有的/项目的:只能被image owner所在的project使用(即只能在一个项目中使用)
shared 共享的:一个非共享的image能够共享给其余project。
protected 受保护的:protected的image不能被删除
下图为官网图
注解:
queued:没有上传image数据,只有db中的元数据
saving:正在上传image data。
active:当镜像上传完毕,镜像就能够被使用,此时属于active
deactivated:表示任何非管理员用户都无权访问镜像数据,禁止下载镜像,也禁止镜像导出和镜像克隆之类的操做(请求镜像数据的操做)
killed:表示上传过程当中发生错误,而且镜像不可读
deleted:glance已经保存了该镜像的数据,可是该镜像不在可用,处于该状态的镜像将在不久后被自动删除
pending_delete:与delete想说,glance尚未清除镜像数据,处于该状态的镜像不可恢复
小结:
'queued' => ('saving', 'active', 'deleted')
'saving' => ('active', 'killed', 'deleted', 'queued')
'active' => ('queued', 'pending_delete', 'deleted')
'killed' => ('deleted')
'pending_delete' => ('deleted')
'deleted' => ()
任务的状态
pending:任务已经保留,可是还没开始处理
processing:正在执行
success:执行成功
failure:表示在执行任务的过程当中发生了错误,而且不能继续执行
glance-api
接受api请求,并提供相应操做,包括发现、检索、存储
glance-registry
存储、处理、检索镜像的元数据,元数据包括例如镜像大小、类型等
Database
能够选择组件喜欢的数据库存储进行元数据,大多数使用MySQL或者SQLite.
Storage repository for image files
指的是存储镜像文件的仓库或者称为backend,能够是:
1本地文件存储(或者任何挂载到glance-api控制节点的文件系统)
2.对象存储Object Stroage(Swift)
3.块存储RADOS(ceph)
4.VMware数据存储
5.HTTP
对glance来讲,他的客户端Glance Cli能够是:
1.glance的命令行工具
2.Horizon
3.nova
同keystone同样,glance是Iass的另一个中心,keystone是关于权限的中心,而glance是关于镜像的中心。glance能够被终端用户或者nova服务访问:接受磁盘或者镜像的API请求和定义镜像元数据的操做
注解:
A client
而后使用glance服务的应用程序,能够是命令行工具,horizon,nova等
REST API
glance是一个client-server架构,提供一个REST API,而使用者就是经过REST API来执行关于镜像的各类操做。
Glance Domain Controller(glance域控制器)
glance内主要的中间件实现,至关于调度员,做用是将glance内部服务的操做分发到各层(Auth认证,Notifier,Policy策略,Quota,Location,DB数据库链接)具体任务由每一个层实现。
· 第一层:Auth
验证镜像本身或者它的属性是否能够被修改,只有管理员和镜像的拥有者才能够执行修改操做,不然保存。
· 第二层:Property protection
由glance domain controller控制的七层组件
可选层,只有在glance的配置文件中设置了property_protection_file参数才会生效,它提供了两种类型的镜像属性:
1.核心属性,是在镜像参数中指定的;
2元数据属性,是任意能够被附加到一个镜像上的key/value
该层的功能就是经过调用glance的public API来管理对meta属性的访问,你也能够在它的配置文件中限定这个访问
· 第三层:Notifier
把下列信息添加到queue队列中
1.关于全部镜像修改的通知
2.在使用过程当中发生的全部的异常和警告
· 第四层:Policy
1.定义操做镜像的访问规则rules,这些规则都定义在/etc/policy.json文件中
2.监控rules的执行
· 第五层:Quota
若是针对一个用户,管理员为其规定好他可以上传的全部镜像的大小配额,此处的Quota层就是用来检测用户上传是否超出配额限制:
1.若是没有超出配额限制,那么添加镜像的操做成功
2.若是超出了配额,那么添加镜像的操做失败而且报错。
· 第六层:Location
与Glance Store交互,如上传下载等。因为能够有多个存储后端,不一样的镜像存放的位置都被该组件管理。
1.当一个新的镜像位置被添加时,检测该URI是否正确。
2.当一个镜像位置被改变时,负责从存储中删除该镜像。
3.阻止镜像位置的重复
· 第七层:DB
1.实现了与数据库API的交互
2.将镜像转换为相应的格式以记录在数据库中。而且从数据库接收的信息转换为可操做的镜像对象。
Registry Layer
可选层,用来组织安全
经过使用这个单独的服务,来控制Glance Domain Controller与Glance DB之间的通讯
Clance DB
glance服务使用同一一个核心库Glance DB,该库对glance内部全部依赖数据库的组件来讲是共享的。
Glance Store
用来组织处理Glance和各类存储后端的交互
全部有的进行文件操做都是经过调用Glance Store库执行的,它负责与外部存储端和(或)本地文件存储系统的交互。
Glance Store提供了一个统一的接口来访问后端的存储
当咱们添加一个镜像到glance时,你必须指定虚拟机的disk格式和container格式,关于disk格式请自行研究kvm等虚拟。
disk和container格式是每一个部署的基本配置,经常使用的格式以下:
1.Disk Format
不一样的虚拟化应用的厂针有不一样的虚拟机镜像的disk格式:
raw
This is an unstructured disk image format
vhd
This is the VHD disk format, a common disk format used by virtual machine monitors from VMware, Xen, Microsoft, VirtualBox, and others
vhdx
This is the VHDX disk format, an enhanced version of the vhd format which supports larger disk sizes among other features.
vmdk
Another common disk format supported by many common virtual machine monitors
vdi
A disk format supported by VirtualBox virtual machine monitor and the QEMU emulator
iso
An archive format for the data contents of an optical disc (e.g. CDROM).
ploop
A disk format supported and used by Virtuozzo to run OS Containers
qcow2
A disk format supported by the QEMU emulator that can expand dynamically and supports Copy on Write
aki
This indicates what is stored in Glance is an Amazon kernel image
ari
This indicates what is stored in Glance is an Amazon ramdisk image
ami
This indicates what is stored in Glance is an Amazon machine image
2.Container Format
容器container格式是指虚拟机映像是否包含一个文件格式,该文件格式还包含有关实际虚拟机的元数据。
须要注意的是:容器格式字符串在当前并不会被glance或其余OpenStack组件的使用,因此若是你不肯定,简单的将容器格式指定bare是安全的。
你能够设置以下容器格式:
bare
This indicates there is no container or metadata envelope for the image
ovf
This is the OVF container format
aki
This indicates what is stored in Glance is an Amazon kernel image
ari
This indicates what is stored in Glance is an Amazon ramdisk image
ami
This indicates what is stored in Glance is an Amazon machine image
ova
This indicates what is stored in Glance is an OVA tar archive file
docker
This indicates what is stored in Glance is a Docker tar archive of the container filesystem