以前的文章中相继介绍了OpenStack中关于Keystone以及Nova组件的概念、架构、原理等内容,那么本文继续讲述OpenStack中的Glance组件的相关理论要点。html
对于Glance组件的理解仍是须要对OpenStack总体概念和组件构成有所掌握,而且在OpenStack这一大项目中,对于各个组件之间的联系的梳理仍是尤其重要的。笔者给出下面的几篇文章,对于初学者而言理解起来有所帮助。mysql
友情连接:sql
OpenStack概念以及核心组件概述shell
OpenStack部署节点类型和架构 数据库
OpenStack核心组件Novaapi
Glance是OpenStack中提供的服务的,用户能够上传和发现与其余服务一块儿使用的数据资源。本文主要从Glance组件的概念及做用、主要的功能模块、基本的架构组成、以及其支持虚拟机镜像的格式类型四个方面进行阐述,最后对Glance项目作一个总结。服务器
对于Glance项目,笔者在以前的文章(参考上述连接文章)中有基本介绍,从中能够了解Glance项目是OpenStack中用来经过Image Service(镜像服务)的。架构
所谓Image能够理解为包含了这些基本操做系统和其余软件的模板,这种模板称为镜像,若是对于镜像还没法理解的朋友能够将其理解为咱们生活中使用的光盘,或者暂时能够认为是副本(例如VMware中的快照)。下文会具体讲述关于镜像服务支持的镜像文件格式类型。负载均衡
那么OpenStack中为何须要这项服务呢?或者说Glance项目的做用是什么呢?
Glance项目主要负责Image(镜像)的注册和查询传送服务,这些Image能够是用户本身制做上传的镜像,也能够是当前实例进行快照(能够理解为复制、备份的意思)后的副本,这两种类型的镜像均可以快速用于实例部署(能够经过Dashboard操做)(这也体现出云环境所带来的便利与优点)。
那么,用户或管理员是如何使用Glance项目所提供的镜像服务的呢?
OpenStack的用户或管理员能够经过Glance提供的RESTful API接口在多台服务器上进行并行查询和访问Glance存储的镜像文件,这些镜像文件默认状况下存储在部署Glance服务的主机目录/var/lib/glance/images上。
而要理解Glance具体的服务请求响应和服务过程,首先须要了解它的功能模块以及做用。
本小节将详细介绍Glance的功能模块组成,为下面对Glance的基本架构理解作铺垫。
glance-api是系统后台运行的服务进程,可使用ps -ef | grep glance-api查看进程信息。对外提供REST API,用于响应image的查询、获取和存储的调用,可是其并不会真正处理请求。而是将请求完成的操做交给相应的其余模块去完成。
所以,glance-api的做用就是接收请求,可是自身不处理请求,能够联想一下服务器集群中负载均衡服务器的做用来类比理解。
查看进程代码例:
[root@ct ~(keystone_admin)]# ps -e | grep glance-api 1256 ? 00:00:02 glance-api 2381 ? 00:00:00 glance-api 2385 ? 00:00:00 glance-api 2388 ? 00:00:00 glance-api 2391 ? 00:00:00 glance-api
glance-registry也是系统后台运行的服务进程,可使用ps -e | grep glance-registry查看进程信息。该进程主要负责处理和存取image和metadata,例如image的大小和类型(下文会具体介绍)。
注意:registry是一个内部服务接口,不会暴露给普通用户。
查看进程代码例:
[root@ct ~(keystone_admin)]# ps -e | grep glance-registry 1253 ? 00:00:02 glance-registry 2365 ? 00:00:00 glance-registry 2366 ? 00:00:00 glance-registry 2367 ? 00:00:00 glance-registry 2368 ? 00:00:00 glance-registry
补充:官网给出说明,对于glance-registry以及其API可能将在S版本的开发时删除,由于在Q版本中已经弃用了该服务组件。不过笔者所部署的R版本中是具备该组件的。
Glance中的数据库,通常是MySQL,或者Mariadb以及SQLite数据库。主要是用于保存image的metdata信息的。上篇文章笔者将实验环境中OpenStack多节点部署的R版本的一键安装的流程详细给出了,其中在真正执行一键部署前是对应答文件进行修改的,并且是使用的sed工具修改了ip地址以及密码(全局问题)。其中对密码的修改仍是很是有必要的,假设您并未对密码进行修改,那么要使用数据库时就须要查看一下用户名和密码了。
下面给出如何登陆该实验的数据库流程:
一、使用vi编辑器打开应答文件;
[root@ct ~]# source keystonerc_admin [root@ct ~(keystone_admin)]# vi openstack.txt
二、末行模式搜索MARIADB;
三、按"n"进行next查找操做,找到对应帐号及密码;
四、登陆数据库,查看有哪些数据库,主要看一下glance数据库中有哪些表
[root@ct ~(keystone_admin)]# mysql -uroot -pb437a94478394d62 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 6962 Server version: 10.1.20-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show databases; #数据库清单 +--------------------+ | Database | +--------------------+ | cinder | | glance | | gnocchi | | information_schema | | keystone | | mysql | | neutron | | nova | | nova_api | | nova_cell0 | | nova_placement | | performance_schema | | test | +--------------------+ 13 rows in set (0.00 sec) MariaDB [(none)]> use glance; #使用glance数据库 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [glance]> show tables; #查看glance数据库中的表 +----------------------------------+ | Tables_in_glance | +----------------------------------+ | alembic_version | | image_locations | | image_members | | image_properties | | image_tags | | images | | metadef_namespace_resource_types | | metadef_namespaces | | metadef_objects | | metadef_properties | | metadef_resource_types | | metadef_tags | | migrate_version | | task_info | | tasks | +----------------------------------+ 15 rows in set (0.00 sec) MariaDB [glance]> exit Bye
经过对应的英文名称也能够验证该服务的做用。
该服务是实际用于存储的,由于glance自身并不存储image的,而是将image存放在backend中的,通常是后端的服务器,专门负责存储工做的,例如Swift、Cinder、Amazon的S三、Ceph存储、Sheepdog等等。在官方文档给出的glance架构中,是将这些不一样的存储类型都归于glance_store源中(用于管理glance与各类存储服务的交互的)。
具体如何规定某种类型的backend要经过对其配置文件进行设置,本文不进行深究,该配置文件默认为:/etc/glance/glance-api.conf。参考下图:
以上就是Glance组件中主要的功能模块了。相较于Nova并不复杂,或许您已经能够在脑海中有了Glance的架构图了,下面就来介绍Glance的基本架构图。
对于Glance基本架构,首先能够参考官方文档:Glance的基本架构
可是结合上述的主要构成,加之考虑到官方的架构图对于初学者而言并不容易理解,所以笔者经过一个简化版本的架构图进行说明。
该架构看上去是否很是简单,下面来简述Glance的工做流程(这里不考虑与其余服务之间的交互):
一、glance-api接收到对应的服务请求,该服务进行响应;
二、此时glance-api服务将会对请求进行判断,假设是与metadata相关的操做则会将该任务交给glance-registry进行处理,对应数据库操做;若是是与image自身相关的操做,则会将请求发给对应的store backend进行处理,对应与之相连的存储服务的相关操做。
前文屡次提到镜像,那么本小节就是来介绍有关Glance中支持的镜像的格式类型的。先来谈谈镜像格式这个词是怎么来的。这个问题涉及到虚拟化技术,简单来说,不一样的商家使用的虚拟化技术都不同,你们所熟悉的可能就是VMware,或者Hyper-V了,对应不一样的虚拟化技术,那么各个厂家对应虚拟机磁盘格式的定义就有着本身的标准。所以,不一样镜像格式的镜像(可能就是一个文件)是因为不一样的虚拟化技术而产生的。
下面列出在OpenStack中常见的几种镜像格式。
RAW是一种没有格式或裸格式的磁盘文件类型,属于非结构化的镜像格式。RAW对数据不作任何修饰和处理,直接保存最原始的状态,因此在性能方面很是出色。因为RAW格式保存原始数据,所以更容易和其余镜像格式进行转换。
QCOW2是QCOW的升级版本,支持QEMU而且支持动态磁盘镜像扩展和写时复制的格式。其主要特性是磁盘文件大小能够动态按需增加,而且不会占用全部的实际磁盘空间大小。例如建立了100GB的QCOW2格式的磁盘,而实际只保存了2GB数据,那么将只占用了实际物理磁盘的2GB空间。与RAW相比,使用这种格式能够节省磁盘容量,但性能较差。
VHD是微软公司产品使用的磁盘格式。 Virtual PC(微软早期虚拟化产品)和 Hyper-V使用的就是VHD格式 VirtualBox也提供了对VHD的支持。如需在 OpenStack上使用 Hyper-V类型的虚拟化,就应上传VHD格式的镜像文件
这个你们都比较熟悉了吧。使用过VMware的都见过。
VMDK是 VMware公司产品使用的磁盘格式,支持多种Hypervisor。目前也是一个开放的通用格式,除了 VMware自家的产品外,QEM和 Virtualbox也提供了对VMDK格式的支持。
VDI是Oracle公司的 VirtualBox虚拟软件所使用的格式。
这个你们也比较熟悉了,不管按照Windows仍是Linux系统都见过。这是一种存档数据文件在光盘上的格式,例如CD-ROM。
该镜像格式是AWS的Kernel镜像格式。
该镜像格式是AWS的Ramdisk镜像格式。
该镜像格式是AWS的虚拟机镜像格式。
补充:本文关于Glance的容器格式不作介绍。
本文主要讲述OpenStack中核心组件之一的Glance项目。其中重点在于Glance所提供的服务、其基本架构和服务流程。Glance的关键还在于镜像格式的类型,这里强调的RAW与QCOW2,要了解它们之间的区别。
笔者能力有限,如有疏漏之处还望指出,感谢您的阅读与支持!