4-Openstack 镜像服务 Glance
1. 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等。
2. Glance服务架构
在Openstack中 , Glance服务架构如下图所示 :

在以上架构中 , Glance api负责接收REST API的请求 , 类似nova-api , 并通过其他模块来完成镜像的查找、获取、上传以及删除等操作 , 该模块默认监听9292端口。Glance-Registry负责与MySQL数据库交互 , 监听9191端口 , 用于存储或者获取镜像的元数据 , 并提供元数据相关的REST接口。Glance-Registry的数据库中有两张表 , 一张是image表 , 保存了镜像的格式和大小等信息;另一张是image property表 , 保存了镜像的定制化信息。
这里需要注意Glance-Registry服务已经在Queens版本中已经被弃用了。
Image Store是一个存储的接口层 , glance通过该接口获取镜像。Image Store本身支持Amazon的S3、Openstack的Swift、Ceph、sheepdog、ClusterFS等多种分布式存储。需要注意的是 , Image Stoge主要是镜像保存与获取的接口 , 仅仅是一个接口层 , 具体的实现还需要外部存储支持。
3. Glance 服务功能
镜像服务就是用来管理镜像的 , 让用户能够发现、获取和保存镜像。在OpenStack中提供镜像服务的是Glance , 其主要功能如下 :
查询和获取镜像的元数据和镜像本身
注册和上传虚拟机镜像 , 包括镜像的创建、上传、下载和管理
维护镜像信息 , 包括元数据和镜像本身
支持多种方式存储镜像 , 包括普通的文件系统、
Swift、Amazon S3等对虚拟机实例执行创建快照命令来创建新的镜像 , 或者备份虚拟机的状态
image API的版本
Glance提供的RESTful API目前只有两个版本 : API v1和API v2。
v1只提供基本的镜像和成员操作功能 , 包括镜像创建、删除、下载、列表、详细信息查询、更新 , 以及镜像租户成员的创建、删除和列表。v2除了支持v1的所有功能外 , 主要增加了镜像位置的添加、删除、修改、元数据和名称空间操作 , 以及镜像标记操作。
两个版本对镜像存储支持相同 , v1从N版开始已经过时 , 迁移路径使用v2进行替代
4. 镜像格式
虚拟机镜像文件磁盘格式
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是最安全地。
5.镜像状态
镜像从上传到识别的过程 :
queued #初始化过程 , 镜像文件刚被创建 , 在Glance数据库只有其元数据 , 镜像数据还没有上传至数据库中。
saving #导入数据库过程 , 是镜像地原始数据在上传到数据库中地一种过渡状态 , 表示正在上传镜像。
uploading #提交给服务识别过程 , 指示已进行导入数据提交调用 , 此状态下不允许调用PUT/file ( saving状态会执行PUT/file , 这是另外一种上传的方法 ) 。
importing #准使用状态 , 指示已经完成导入调用 , 但是镜像还未准备好使用。 镜像上载完成后的状态
active #表示可使用
deactivated #表示只对管理员开放的权限
killed #表示镜像上传中发生错误
deleted #镜像将在不久后自动删除 , 镜像不可用 ( 保留数据 )
pending_delete #与deleted类似 , 但是删除后无法恢复访问权限
Public ( 公共的 ) #可以被所有的项目使用
Private ( 私有的 ) #只有被镜像所有者所在的项目使用
Shared ( 共享的 ) #一个非共有的镜像可以共享给其他项目 , 这是通过项目成员 ( member-* ) 操作来实现的
Protected ( 受保护的 ) #这种镜像不能被删除6. 工作流程解析

红色方框是对客户端的请求进行认证和授权的服务流程 : 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, 将镜像转换为响应的格式存储在数据库中。
7. 安装配置 Glance
7.1 准备环境
创建
glance数据库和glance用户,并授权glance用户允许从任何主机连接以及对glance数据库有所有的权限在
mysql服务器创建glance数据库并授权[root@node02 ~]# mysql -uroot -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 111 Server version: 10.5.22-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE DATABASE glance; Query OK, 1 row affected (0.001 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance123'; Query OK, 0 rows affected (0.009 sec)在别的主机上使用
glance用户连接数据库,看看是否能够正常连接?[root@node01 ~]# mysql -uglance -pglance123 -hnode02 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 113 Server version: 10.5.22-MariaDB MariaDB Server Copyright (c) 2000, 2018, 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 | +--------------------+ | glance | | information_schema | +--------------------+ 2 rows in set (0.003 sec) 导出
admin用户的环境变量,创建glance用户并设置其密码为glance[root@node01 ~]# openstack user create --domain default --password-prompt glance User Password: Repeat User Password: +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | d8c9809484274553a1fc6ec17e56375c | | name | glance | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+ 将
glance用户授权为admin角色,并将其添加到service项目中[root@node01 ~]# openstack role add --project service --user glance admin创建
glance服务实体[root@node01 ~]# openstack service create --name glance \ --description "OpenStack Image" image +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Image | | enabled | True | | id | 479e564368434f41b50c7d3ac1492dab | | name | glance | | type | image | +-------------+----------------------------------+创建
glance endport(服务端点,注册服务)公共端点
[root@node01 ~]# openstack endpoint create --region RegionOne image public http://openstack-vip.net:9292 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 035dae46d8664cb3bc260d068079ac7f | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | 479e564368434f41b50c7d3ac1492dab | | service_name | glance | | service_type | image | | url | http://openstack-vip.net:9292 | +--------------+----------------------------------+私有端点
[root@node01 ~]# openstack endpoint create --region RegionOne image internal http://openstack-vip.net:9292 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | f4f985d57c3d4928bbeb3af81b2791dc | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | 479e564368434f41b50c7d3ac1492dab | | service_name | glance | | service_type | image | | url | http://openstack-vip.net:9292 | +--------------+----------------------------------+管理端点
[root@node01 ~]# openstack endpoint create --region RegionOne image admin http://openstack-vip.net:9292 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | bccb239fe00c4a49bcc147c1a56506b8 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | 479e564368434f41b50c7d3ac1492dab | | service_name | glance | | service_type | image | | url | http://openstack-vip.net:9292 | +--------------+----------------------------------+
7.2 安装配置组件
安装软件包
[root@node01 ~]# dnf --enablerepo=crb install openstack-glance -y这里需要注意,其中有一个包
python3-pyxattr是官网提供的crb仓库中。默认这个仓库是关闭的。因此这里需要临时开启这个库才能进行下一步安装。直接安装有如下图所示报错

配置
glance-api编辑
/etc/glance/glance-api.conf文件,在[database]配置段配置连接glance数据的地址[database] # ... connection = mysql+pymysql://glance:glance123@openstack-vip.net/glance在
[keystone_authtoken]配置段中配置认证相关信息www_authenticate_uri = http://openstack-vip.net:5000 auth_url = http://openstack-vip.net:5000 memcached_servers = openstack-vip.net:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = glance password = glance在
[paste_deploy]配置段中添加flavor = keystone[paste_deploy] # ... flavor = keystone在
[glance_store]配置段中配置本地文件系统存储和镜像文件的位置:[DEFAULT] # ... enabled_backends=fs:file [glance_store] # ... default_backend = fs [fs] filesystem_store_datadir = /var/lib/glance/images/在
[oslo_limit]部分,配置对Keystone的访问, 这里的endpoint_id为创建Image服务API端点中类型为public的id[oslo_limit] auth_url = http://openstack-vip.net:5000 auth_type = password user_domain_id = default username = glance system_scope = all password = glance endpoint_id = 035dae46d8664cb3bc260d068079ac7f region_name = RegionOne确保
Glance账户对系统级资源(如限制)具有读取权限:openstack role add --user glance --user-domain Default --system all reader在
[DEFAULT]部分,可以可选地启用每个租户的配额:[DEFAULT] use_keystone_limits = True请注意,如果启用了这个选项,您必须已经按照上述描述创建了注册的限制。
初始化
glance数据,生成相关表[root@node01 ~]# su -s /bin/sh -c "glance-manage db_sync" glance准备
policy.json配置文件[root@node01 ~]# cat /etc/glance/policy.json { "context_is_admin": "role:admin", "default": "role:admin", "add_image": "", "delete_image": "", "get_image": "", "get_images": "", "modify_image": "", "publicize_image": "role:admin", "copy_from": "", "download_image": "", "upload_image": "", "delete_image_location": "", "get_image_location": "", "set_image_location": "", "add_member": "", "delete_member": "", "get_member": "", "get_members": "", "modify_member": "", "manage_image_cache": "role:admin", "get_task": "role:admin", "get_tasks": "role:admin", "add_task": "role:admin", "modify_task": "role:admin", "deactivate": "", "reactivate": "", "get_metadef_namespace": "", "get_metadef_namespaces":"", "modify_metadef_namespace":"", "add_metadef_namespace":"", "get_metadef_object":"", "get_metadef_objects":"", "modify_metadef_object":"", "add_metadef_object":"", "list_metadef_resource_types":"", "get_metadef_resource_type":"", "add_metadef_resource_type_association":"", "get_metadef_property":"", "get_metadef_properties":"", "modify_metadef_property":"", "add_metadef_property":"", "get_metadef_tag":"", "get_metadef_tags":"", "modify_metadef_tag":"", "add_metadef_tag":"", "add_metadef_tags":"" } [root@node01 ~]# chown root:glance /etc/glance/policy.json启动
openstack-glance-api服务,并将其设置为开机启动。这里这个服务默认监听端口为9292[root@node01 ~]# systemctl enable openstack-glance-api.service [root@node01 ~]# systemctl start openstack-glance-api.service修改
haproxy高可用节点的haproxy配置。在原有的haproxy之后添加如下配置listen openstack_glance_port bind 192.168.71.250:9292 mode tcp log global server 192.168.71.11 192.168.71.11:9292 check inter 3000 fall 3 rise 5验证glance服务可以使用
[root@node01 ~]# glance image-list #结果为空为正常,出现其他结果则进行排错 +----+------+ | ID | Name | +----+------+ +----+------+ [root@node01 ~]# openstack image list #没有结果正常 [root@node01 ~]#
7.3 测试上传镜像
导入
admin用户的环境变量[root@node01 ~]# . keystone_admin.rc下载对应的测试镜像
[root@node01 ~]# wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img将
cirros上传至glance看看是否能够正常上传[root@node01 ~]# glance image-create --name "cirros" --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare --visibility=public +------------------+----------------------------------------------------------------------------------+ | Property | Value | +------------------+----------------------------------------------------------------------------------+ | checksum | 443b7623e27ecf03dc9e01ee93f67afe | | container_format | bare | | created_at | 2024-09-16T19:40:23Z | | disk_format | qcow2 | | id | dc037659-f15e-4a4f-9d20-bd6f8eb05109 | | min_disk | 0 | | min_ram | 0 | | name | cirros | | os_hash_algo | sha512 | | os_hash_value | 6513f21e44aa3da349f248188a44bc304a3653a04122d8fb4535423c8e1d14cd6a153f735bb0982e | | | 2161b5b5186106570c17a9e58b64dd39390617cd5a350f78 | | os_hidden | False | | owner | 9b05bf0c98b24add999507856db2dac5 | | protected | False | | size | 12716032 | | status | active | | stores | fs | | tags | [] | | updated_at | 2024-09-16T19:40:24Z | | virtual_size | 46137344 | | visibility | public | +------------------+----------------------------------------------------------------------------------+ [root@node01 ~]# openstack image list +--------------------------------------+--------+--------+ | ID | Name | Status | +--------------------------------------+--------+--------+ | dc037659-f15e-4a4f-9d20-bd6f8eb05109 | cirros | active | +--------------------------------------+--------+--------+验证:查看
glance的镜像仓库目录下是否有文件生成[root@node01 ~]# ll /var/lib/glance/images/ total 12420 -rw-r----- 1 glance glance 12716032 Sep 17 03:40 dc037659-f15e-4a4f-9d20-bd6f8eb05109
参考链接
玩转企业云计算平台系列 ( 四 ) : Openstack 镜像服务 Glance (qq.com)