前面介绍了 Openstack 入门基础环境部署Keystone 等相关的知识点,今天我将详细的为大家介绍Openstack 镜像服务 Glance相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发分享朋友圈支持一波!!!

Glance服务简介

再Openstack中,Glance主要提供镜像服务,虚拟机的创建需要Glance的支持。Glance有Glance-api和Glance-Registry两个重要服务,其中Glance-api主要接受云系统镜像的构建、删除和读取请求,Glance-Registry主要进行云镜像系统的注册服务。

Glance不需要配置消息队列,但是Glance需要配置Keystone认证中心,在默认情况下,Glance将上传的镜像存放在/var/lib/glance/images/目录下。

Glance支持多种镜像格式,包括raw、vhd、vhdx、vmdk、vdi、iso、qcow2、aki、ami等。更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

Glance服务架构

在Openstack中,Glance服务架构如下图所示:

OpenStack 支持哪些镜像格式 openstack提供镜像服务_数据库

在以上架构中,Glance api负责接收REST API的请求,类似nova-api,并通过其他模块来完成镜像的查找、获取、上传以及删除等操作,该模块默认监听9292端口。Glance-Registry负责与MySQL数据库交互,监听9191端口,用于存储或者获取镜像的元数据,并提供元数据相关的REST接口。Glance-Registry的数据库中有两张表,一张是image表,保存了镜像的格式和大小等信息;另一张是image property表,保存了镜像的定制化信息。

Image Store是一个存储的接口层,glance通过该接口获取镜像。Image Store本身支持Amazon的S3、Openstack的Swift、Ceph、sheepdog、ClusterFS等多种分布式存储。需要注意的是,Image Stoge主要是镜像保存与获取的接口,仅仅是一个接口层,具体的实现还需要外部存储支持。

Glance 服务功能

镜像服务就是用来管理镜像的,让用户能够发现、获取和保存镜像。在OpenStack中提供镜像服务的是Glance,其主要功能如下:

  • 查询和获取镜像的元数据和镜像本身
  • 注册和上传虚拟机镜像,包括镜像的创建、上传、下载和管理
  • 维护镜像信息,包括元数据和镜像本身
  • 支持多种方式存储镜像,包括普通的文件系统、Swift、Amazon S3等
  • 对虚拟机实例执行创建快照命令来创建新的镜像,或者备份虚拟机的状态
mage API的版本

Glance提供的RESTful API目前只有两个版本:API v1和API v2。

  • v1只提供基本的镜像和成员操作功能,包括镜像创建、删除、下载、列表、详细信息查询、更新,以及镜像租户成员的创建、删除和列表。
  • v2除了支持v1的所有功能外,主要增加了镜像位置的添加、删除、修改、元数据和名称空间操作,以及镜像标记操作。

两个版本对镜像存储支持相同,v1从N版开始已经过时,迁移路径使用v2进行替代

镜像格式

虚拟机镜像文件磁盘格式
raw  #无结构的磁盘格式  
vhd  #改格式通用于VMware、Xen、VirtualBox以及其他虚拟机管理程序  
vhdx  #vhd格式的增强版本,支持更大的磁盘尺寸  
vmdx  #一种比较通用的虚拟机磁盘格式  
vdl  #由VirtualBox虚拟机监控程序和QEMU仿真器支持的磁盘格式  
iso  #用于光盘(CD-ROM)数据内容的档案格式  
ploop  #由Virtualzzo支持,用于运行OS容器的磁盘格式  
qcow2  #由QEMU仿真支持,可动态扩展,支持写时复制(Copy on Write)的磁盘格式  
aki  #在Glance中存储的Amazon内核格式  
ari  #在Glance中存储的Amazon虚拟内存盘(Ramdisk)格式  
ami  #在Glance中存储的Amazon机器格式
虚拟机镜像文件容器格式
bare  #没有容器或元数据“信封”的镜像  
ovf  #开放虚拟化格式  
ova  #在Glance中存储的开放虚拟化设备格式  
aki  #在Glance中存储的Amazon内核格式  
ari  #在Glance中存储的Amazon虚拟内存盘(Ramdisk)格式  
Docker  #在Glance中存储的容器文件系统的Docker的tar档案

如果不能确定选择哪种容器格式,那么简单地容器格式指定为bare是最安全地。更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

镜像状态

镜像从上传到识别的过程:

queued  #初始化过程,镜像文件刚被创建,在Glance数据库只有其元数据,镜像数据还没有上传至数据库中。 
saving  #导入数据库过程,是镜像地原始数据在上传到数据库中地一种过渡状态,表示正在上传镜像。  
uploading  #提交给服务识别过程,指示已进行导入数据提交调用,此状态下不允许调用PUT/file(saving状态会执行PUT/file,这是另外一种上传的方法)。  
importing  #准使用状态,指示已经完成导入调用,但是镜像还未准备好使用。

镜像上载完成后的状态

active  #表示可使用  
deactivated  #表示只对管理员开放的权限  
killed  #表示镜像上传中发生错误  
deleted  #镜像将在不久后自动删除,镜像不可用(保留数据)  
pending_delete  #与deleted类似,但是删除后无法恢复
访问权限
Public(公共的)  #可以被所有的项目使用  
Private(私有的) #只有被镜像所有者所在的项目使用  
Shared(共享的)  #一个非共有的镜像可以共享给其他项目,这是通过项目成员(member-*)操作来实现的  
Protected(受保护的)  #这种镜像不能被删除

工作流程解析

OpenStack 支持哪些镜像格式 openstack提供镜像服务_数据库_02

红色方框是对客户端的请求进行认证和授权的服务流程:openstack的操作都需要经过keystone进行身份认证,并授权,glance也不例外,授权成功再去请求glance服务,glance服务接收到外部请求后,会去keystone进行认证,此请求是否已授权,认证通过后,才会将请求传到后端。

  • Auth(授权):用来控制镜像的访问权限,决定镜像信息是否可以修改。

黄色方框的glance domain controller 是主用的中间件,相当于调度器,作用是将glance 内部服务的操作分发到下面的各个功能层。

  • 1)Policy(规则定义):定义镜像操作的访问规则。
  • 2)Quota(配额限制):管理员对用户定义了镜像大小的镜像上传上限。
  • 3)Location(定位):通过glance_store与后台进行交互,在该层新位置添加进行时检查位置URI是否正确,防止镜像位置重复。

蓝色方框里镜像的元数据是通过glance-registry存放在数据库中。镜像本身(chunk 块数据)是通过glance的存储驱动存储在后端的各种存储系统中。

  • 1)Registry Layer(注册层):通过使用单独的服务控制Glance Controller与Glance DB之间的安全交互。
  • 2)Glance DB:存储镜像的元数据信息。
  • 3)Glance Store:用来处理Glance和各种存储后端的交互,提供了一个统一接口来访问后端的存储。

绿色方框是存储后端(store backend)将镜像本身的数据存放在后端存储系统。

  • DB(数据库):实现与数据库进行交互的API,将镜像转换为响应的格式存储在数据库中。

安装配置 Glance

执行命令:

yum install -y openstack-glance

即可成功安装Glance节点。

修改Glance配置文件

在Glance安装后,我们需要对Glance组件进行配置,打开Glance组件的配置文件/etc/glance/glance-api.conf,在该文件的[database]模块中添加如下内容:

connection= mysql+pymysql://glance:glance@192.168.136.101/glance

在上述配置中,mysql+pymysql表示使用的数据库,两个短杠后面的表示登录数据库所使用的用户名和密码,后面一个短杠的glance表示具体的数据库名称,配置完成后文件如下所示:

OpenStack 支持哪些镜像格式 openstack提供镜像服务_openstack_03

初始化Glance数据库

在完成数据库配置后,我们就可以初始化Glance的数据库了,执行命令:

su -s /bin/sh -c "glance-manage db_sync" glance

即可完成。该命令执行结果如下所示:

OpenStack 支持哪些镜像格式 openstack提供镜像服务_云计算_04

注意,从上图可以看出,上述命令在执行时有警告信息弹出,这里我们不用理会,只要上一步没有报错,就可以继续进行。在数据库初始化之后,我们执行命令:

mysql -h 192.168.136.101 -uglance -pglance -e "use glance; show tables;"

来检测Glance数据库初始化的效果,该命令执行结果如下所示:

OpenStack 支持哪些镜像格式 openstack提供镜像服务_openstack_05

从上图可知,我们的Glance数据库初始化创建成功!更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

glance-api配置

在上文Glance安装与初步配置中,我们进行了Glance的安装与数据库配置和初始化。接下来进行Glance的Keystone设置,并启动Glance服务。

首先,我们先来进行glance-api的配置,打开glance-api的配置文件/etc/glance/glance-api.conf,找到其中的[keystone_authtoken]模块,在模块下添加如下内容:

[keystone_authtoken]
auth_uri=http://192.168.136.101:5000
auth_url=http://192.168.136.101:35357
memcached_servers=192.168.136.101:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=glance
password=glance

在上述配置中,auth_type表示验证类型,project_domain_name表示项目默认域,user_domain_name表示用户默认域,project_name表示项目名称,username和password表示用户名和密码,这些配置内容,必须与我们之前对keystone节点的配置相对应,配置完成后的文件如下所示:

OpenStack 支持哪些镜像格式 openstack提供镜像服务_上传_06

之后,我们再找到[paster_depoy]模块,在该模块在添加如下内容:

[paste_deploy]
flavor=keystone

上述配置表示启用上述keystone的相关配置,修改完成后的配置文件如下所示:

OpenStack 支持哪些镜像格式 openstack提供镜像服务_云计算_07

接下来,我们再找到[glance_store]模块,在该模块下添加如下内容:

[glance_store]
stores=file,http
default_store=file
filesystem_store_datadir=/var/lib/glance/images

上述配置内容,主要是配置本地文件系统和镜像文件位置。完成后的配置文件如下所示:

OpenStack 支持哪些镜像格式 openstack提供镜像服务_openstack_08

在所有配置完成后,我们执行命令:

grep "^[a-Z]" /etc/glance/glance-api.conf

查看glance-api配置文件下所有有用的配置,结果如下:

OpenStack 支持哪些镜像格式 openstack提供镜像服务_云计算_09

glance-registry配置

在完成glance-api的配置后,我们接下来要配置glance-registry,glance-registry的配置文件为/etc/glance/glance-registry.conf,该配置文件与glance-api配置文件的区别在于没有glance_store的相关配置。最终,glance-registry的配置文件中的有用内容如下所示:

OpenStack 支持哪些镜像格式 openstack提供镜像服务_云计算_10

glance服务启动

在完成上述所有配置后,我们就可以启动glance服务了,执行命令:

systemctl start openstack-glance-api
systemctl start openstack-glance-registry

即可启动Glance服务。Glance服务启动后,我们可以看到当前设备上开始监听9191和9292端口(9191是glance-registry的监听端口,9292是glance-api的监听端口),如下所示:

OpenStack 支持哪些镜像格式 openstack提供镜像服务_数据库_11

Glance Keytone注册

在前面,我们配置实现了Glance节点在Keystone的注册,今天,我们就来实现Glance在Keystone节点上的注册。

首先,我们先在Openstack上创建Glance的Service服务,执行命令:

openstack service create --name glance --description "Openstack Glance" image

该命令执行结果如下所示:

OpenStack 支持哪些镜像格式 openstack提供镜像服务_上传_12

接下来,我们要创建镜像服务的API端点,我们分别创建public、internal和admin的endpoint端点服务,执行命令:

openstack endpoint create --region RegionOne image public http://192.168.136.101:9292
openstack endpoint create --region RegionOne image internal http://192.168.136.101:9292
openstack endpoint create --region RegionOne image admin http://192.168.136.101:9292

上述三条命令执行结果如下所示:

OpenStack 支持哪些镜像格式 openstack提供镜像服务_上传_13

OpenStack 支持哪些镜像格式 openstack提供镜像服务_上传_14

OpenStack 支持哪些镜像格式 openstack提供镜像服务_数据库_15

更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

Glance 镜像下载测试

最后,我们对之前的配置进行检验,下载一个镜像,并使用Glance节点进行注册,以此来检验Glance的运作情况。

首先,我们先看当前系统中的镜像,执行命令:

openstack image list
glance image-list

可以分别查看当前Glance系统中的镜像,上述两条命令执行情况如下所示:

OpenStack 支持哪些镜像格式 openstack提供镜像服务_云计算_16

从上图中可以看出,当前系统中没有镜像。接下来,我们先现在一个镜像的,执行命令:

wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img

该命令执行结果如下所示:

OpenStack 支持哪些镜像格式 openstack提供镜像服务_上传_17

接下来,我们尝试使用刚才下载的镜像,在glance节点上注册,执行命令:

openstack image create "test-img" --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --public

即可完成镜像的注册,该命令执行结果如下所示:

OpenStack 支持哪些镜像格式 openstack提供镜像服务_数据库_18

之后,我们再次执行命令:

openstack image list
glance image-list

上述两条命令结果如下所示:

OpenStack 支持哪些镜像格式 openstack提供镜像服务_OpenStack 支持哪些镜像格式_19

此外,从上图可以看出,我们的Glance镜像存储位置位于/var/lib/glance/images/目录下,与我们在glance-api中的镜像存储位置配置一致。

由此可见,我们的Glance Keystone注册配置成功!