Glance的功能
在OpenStack中Glance提供虚拟机的镜像(Image)服务。值得注意的是,Glance本身并不参与大量数据的存储,Glance镜像的存储需要依赖于Swift等项目来完成。
Glance本身并不负责实际的存储,只是用来完成一些镜像的管理工作,所以Glance的功能比较单一,所包含的相应的组件也相对较少。
Glance主要由Glance-API与Glance-registry两个服务组成。Glance-API是进入Glance的入口,负责接收RESTful请求,然后后台的Swift,Amazon S3等存储系统完成镜像的存储与获取。
Glance的Store模块在Juno版本之前是Glance的一个子组件,在Juno之后Glance_Store成为一个独立的组件从Glance中独立出来,但是截至到小韩(笔者)书写这篇博客之前,Glance_Store依然只是用于Glance和Glare项目的特定用途。
Glance基本架构
OpenStack Glance 有一个客户端-服务器架构,它为用户提供一个 REST API,通过它可以执行对服务器的请求。
Glance 域控制器管理分为多个层的内部服务器操作。具体任务由每一层实现。
所有文件(图像数据)操作都使用glance_store 库执行,该库负责与外部存储后端和(或)本地文件系统进行交互。Glance_store 库提供了一个统一的接口来访问后端存储。
Glance 使用一个中央数据库 (Glance DB),它在系统中的所有组件之间共享,默认情况下是基于 sql 的。运营商在一定程度上支持和使用其他类型的数据库后端,但上游并未进行广泛测试。
Glance 架构中存在以下组件:
A client
任何使用 Glance 服务器的应用程序。
使用glance服务的应用程序,可以是命令行工具,horizon,nova等
REST API
glance是一个client-server架构,提供一个REST API,而使用者就是通过REST API来执行关于镜像的各种操作
Database Abstraction Layer (DAL)
应用程序编程接口
(API),统一 Glance 和数据库之间的通信。
Glance Domain Controller- 实现主要的中间件
glance内主要的中间件实现,相当于调度员,作用是将glance内部服务的操作分发到各层(Auth认证,Notifier,Policy策略,Quota,Location,DB数据库连接)具体任务由每个层实现。
第一层:Auth
验证镜像自己或者它的属性是否可以被修改,只有管理员和镜像的拥有者才可以执行修改操作,否则保存。
第二层:Property protection
由glance domain controller控制的七层组件
可选层,只有在glance的配置文件中设置了property_protection_file参数才会生效,它提供了两种类型的镜像属性:
- 核心属性,是在镜像参数中指定的;
- 元数据属性,是任意可以被附加到一个镜像上的key/value
该层的功能就是通过调用glance的public API来管理对meta属性的访问,你也可以在它的配置文件中限定这个访问
第三层:Notifier
把下列信息添加到queue队列中
- 关于所有镜像修改的通知
- 在使用过程中发生的所有的异常和警告
第四层:Policy
- 定义操作镜像的访问规则rules,这些规则都定义在/etc/policy.json文件中
- 监控rules的执行
第五层:Quota
如果针对一个用户,管理员为其规定好他能够上传的所有镜像的大小配额,此处的Quota层就是用来检测用户上传是否超出配额限制:
- 如果没有超出配额限制,那么添加镜像的操作成功
- 如果超出了配额,那么添加镜像的操作失败并且报错。
第六层:Location
与Glance Store交互,如上传下载等。由于可以有多个存储后端,不同的镜像存放的位置都被该组件管理。
- 当一个新的镜像位置被添加时,检测该URI是否正确。
- 当一个镜像位置被改变时,负责从存储中删除该镜像。
- 阻止镜像位置的重复
第七层:DB
- 实现了与数据库API的交互
- 将镜像转换为相应的格式以记录在数据库中。并且从数据库接收的信息转换为可操作的镜像对象。
Glance Store
用来组织处理Glance和各种存储后端的交互
所有有的进行文件操作都是通过调用Glance Store库执行的,它负责与外部存储端和(或)本地文件存储系统的交互。
Glance Store提供了一个统一的接口来访问后端的存储
Registry Layer
用于组织安全的可选层
域和 DAL 之间使用单独的服务进行通信。
Glace组件的介绍
Glance-API
Glance-API主要提供镜像管理的功能,比如Image的导入和导出,镜像元数据的管理等。目前Glance-API使用的v2版本,在v2版本的Glance-API在一定程度上整合了glance-registry的服务功能。v1版本的Glance-API已经在Newton版本中弃用。
Glance-API能够为镜像建立本地缓存,实现API服务节点数量的扩展,提供多个API节点为一个Image提供服务的模式以提高效率。如果只有一个API节点则缓存服务没有意义。本地的Image Cache是对Image文件的完整复制,但是对用户来说这是完全透明的,用户无需关心Image的具体存放位置,无论Image是存放在后端存储还是本地存储用户都是无感知的。
Glance-API接收由GlanceClite发送的RESTful请求;Glance-API会导入Glance_Store项目并初始化后台的存储系统。
Image
Image是Glance所管理的主要资源,类似于VM的虚拟机模板(template),它预装了OS。从Image启动VM,VM被删除后Image不受影响依然存在。Image只是作为VM的启动模板,VM实例上的改动并不会体现在Image上。
镜像的元数据负责精确完整的描述镜像的信息;
id:Image唯一的UUID
Name:image 名字
owner:所有者
size:字节表示的Image大小
…
理解Image
要理解 Image Service,先得搞清楚什么是 Image 以及为什么要用 Image?
在传统 IT 环境下,安装一个系统要么从安装 CD 从头安装,要么用 Ghost 等克隆工具恢复。这两种方式有如下几个问题:
- 如果要安装的系统多了效率就很低
- 时间长,工作量大
- 安装完还要进行手工配置,比如安装其他的软件,设置 IP 等
- 备份和恢复系统不灵活
云环境下需要更高效的方案,这就是 Image。 Image 是一个模板,里面包含了基本的操作系统和其他的软件。
举例来说,有家公司需要为每位员工配置一套办公用的系统,一般需要一个 Win7 系统再加 MS office 软件。 OpenStack 是这么玩的:
- 先手工安装好这么一个虚机
- 然后对虚机执行 snapshot,这样就得到了一个 image
- 当有新员工入职需要办公环境时,立马启动一个或多个该 image 的 instance(虚机)就可以了
在这个过程中,第 1 步跟传统方式类似,需要手工操作和一定时间,但第 2、3 步非常快,全自动化,一般都是秒级别。而且 2、3 步可以循环做。 比如公司新上了一套 OA 系统,每个员工的 PC 上都得有客户端软件。 那么可以在某个现有虚机中先手工安装好 OA 客户端,然后执行 snapshot 操作,得到新的 image,以后可以就直接使用新 image 创建虚机了。另外,snapshot 还有备份的作用,能够非常方便的恢复系统。
理解Image Service
Image Service 的功能是管理 Image,让用户能够发现、获取和保存 Image。在 OpenStack 中,提供 Image Service 的是 Glance,其具体功能如下:
- 提供 REST API 让用户能够查询和获取 image 的元数据和 image 本身
- 支持多种方式存储 image,包括普通的文件系统、Swift、Amazon S3 等
- 对 Instance 执行 Snapshot 创建新的 image
Glance-registry
Glance-registry负责处理与镜像元数据相关的请求,当Glance-API接收到来自GlanceClite的RESTful消息包含有关镜像元数据的请求便将有关镜像元数据的请求消息发送给Glance-registry。然后有Glance-registry负责解析请求的内容,并与DB数据库进行交互,存取或者更新镜像的元数据(镜像元数据指的是保存在数据库中有关Image的一些消息)
DB
只负责存储镜像的元数据
Store backend
Glance 自己并不存储 image。 真正的 image 是存放在 backend 中的。 Glance 支持多种 backend,包括:
- A directory on a local file system(这是默认配置)
- GridFS
- Ceph RBD
- Amazon S3
- Sheepdog
- OpenStack Block Storage (Cinder)
- OpenStack Object Storage (Swift)
- VMware ESX
具体使用哪种 backend,是在 /etc/glance/glance-api.conf 中配置的
其他 backend 的配置可参考
Glance创建Image
Glace-API接收到GlanceClite的RESTful请求,通过WSGI Route模块路由到具体的操作,一般会包含两个操作,一个是负责加载Glance-Store并且初始化后端存储完成对镜像的存取操作;一个是针对Glance DB中的元数据执行操作
Image Status
- Queued: 镜像 ID 已被保留,镜像还没有上传
- Saving: 镜像正被上传
- Active:镜像可以使用了
- Killed:镜像损坏或者不可用
- Deleted:镜像被删除
安装和配置
创建数据库、服务凭证和 API 端点
在安装和配置映像服务之前,您必须创建数据库、服务凭证和 API 端点。
1. 创建数据
- 使用数据库访问客户端以root用户身份连接数据库服务器:
mysql -u root -p
- 创建glance数据库
MariaDB [(none)]> CREATE DATABASE glance;
- 授予对glance数据库的适当访问权限
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \ IDENTIFIED BY 'GLANCE_DBPASS'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \ IDENTIFIED BY 'GLANCE_DBPASS';
- 退出数据访问客户端。
2. 获取凭据
source ./admin_openrc
3. 创建服务凭证
-
创建 glance 用户
openstack user create --domain default --password-prompt glance
-
将admin角色添加到glance用户和 service项目
openstack role add --project service --user glance admin
-
创建glance服务实体
openstack service create --name glance \ --description "OpenStack Image" image
4. 创建Image服务 API 端点
openstack endpoint create --region RegionOne \
image public http://controller:9292
openstack endpoint create --region RegionOne \
image internal http://controller:9292
openstack endpoint create --region RegionOne \
image admin http://controller:9292
安装和配置组件
✔ 笔记
默认配置文件因发行版而异。您可能需要添加这些部分和选项,而不是修改现有的部分和选项。此外,配置片段中的省略号 ( …) 表示您应该保留的潜在默认配置选项。
安装软件包
yum install openstack-glance -y
配置
编辑 /etc/glance/glance-api.conf
文件
cp /etc/glance/glance-api.conf{,.bak}
grep -Ev "^$|#" /etc/glance/glance-api.conf.bak > /etc/glance/glance-api.conf
-
在该[database]部分中,配置数据库访问:
[database] # ... connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
-
在[keystone_authtoken]和[paste_deploy]部分中,配置身份服务访问:
[keystone_authtoken] # ... www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = glance password = GLANCE_PASS [paste_deploy] # ... flavor = keystone
替换为您在身份服务中GLANCE_PASS为用户glance选择的密码 。
✔ 笔记
注释掉或删除该 [keystone_authtoken]部分中的任何其他选项。 -
在该[glance_store]部分中,配置本地文件系统存储和图像文件的位置:
[glance_store] # ... stores = file,http default_store = file filesystem_store_datadir = /var/lib/glance/images/
填充Image服务数据库
su -s /bin/sh -c "glance-manage db_sync" glance
完成安装
启动映像服务并将它们配置为在系统启动时启动:
systemctl enable openstack-glance-api.service
systemctl start openstack-glance-api.service
验证操作
使用CirrOS验证映像服务的操作,这 是一个小型 Linux 映像,可帮助您测试 OpenStack 部署。
✔ 笔记
在控制器节点上执行这些命令。
-
获取admin凭据以访问仅限管理员的 CLI 命令:
source ./admin_openrc
-
进入
/var/lib/glance/images
-
下载 Image
wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
-
上传 Image 到 glance
glance image-create --name "cirros" \ --file cirros-0.4.0-x86_64-disk.img \ --disk-format qcow2 --container-format bare \ --visibility=public
-
确认上传图片并验证属性:
glance image-list