Glance
- Glance使用
- 磁盘格式和容器格式
- 基础配置
- 镜像转换
Glance 是 OpenStack 的镜像服务,负责存储、发现和管理虚拟机镜像。它允许用户创建和共享镜像,用于启动虚拟机实例。
Glance 的主要功能
(1)虚拟机镜像的管理
支持镜像的上传、下载、删除和更新。
用户可以通过命令行、API 或 OpenStack Dashboard 管理镜像。
(2)多种镜像格式支持
Glance 支持常见的虚拟机镜像格式,包括:
- RAW:原始磁盘镜像,无压缩。
- QCOW2:QEMU/KVM 的可扩展镜像格式,支持快照和压缩。
- VMDK:VMware 的镜像格式。
- VHD 和 VHDX:Hyper-V 的镜像格式。
- ISO:光盘镜像,常用于安装系统。
(3)多种存储后端支持
Glance 支持多种存储后端,用于存储镜像数据:
本地文件系统。
分布式存储系统(如 Ceph、Swift)。
对象存储服务(如 Amazon S3)。
数据库存储。
(4)镜像共享和访问控制
私有镜像:仅限拥有者使用。
公共镜像:所有租户都可以使用。
共享镜像:拥有者可以指定其他租户访问。
(5)镜像的元数据管理
每个镜像都可以包含元数据(metadata),如操作系统类型、版本、创建时间等。
用户和管理员可以自定义元数据,用于描述镜像特性。
Glance 的架构
(1)核心组件
Glance 包括以下核心组件:
-
Glance API:
提供 RESTful API 接口,供用户和服务调用。
支持镜像的上传、下载、查询和删除等操作。 -
Glance Registry(已弃用):
旧版本用于存储镜像的元数据和注册信息,现在的元数据通常直接存储在数据库中。 -
数据库:
存储镜像的元数据(如镜像的名称、大小、状态、创建时间等)。
存储后端:
存放镜像文件的实际数据。可以是本地文件系统、对象存储(如 Swift)或块存储(如 Ceph,Cinder等)
工作流程
- 镜像上传:
用户通过 CLI 或 API 调用 Glance,将镜像文件上传到 Glance。
Glance API 接收镜像数据,并存储在指定的存储后端,同时在数据库中记录元数据。 - 镜像查询:
用户通过 Glance 查询可用的镜像列表。
Glance 从数据库中检索镜像元数据,并返回给用户。 - 镜像下载:
当 Nova 启动实例时,会从 Glance 下载指定镜像到计算节点。
Glance API 从存储后端检索镜像文件,并提供给 Nova。
Glance使用
Ubuntu2404server环境,Glance版本4.4.0
glance服务
systemctl status glance-api
日志路径
tail -f /var/log/glance/glance-api.log
glance默认的镜像存储位置为本地,在配置文件glance-api.conf中进行指定
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
[image_format]
disk_formats = ami,ari,aki,vhd,vhdx,vmdk,raw,qcow2,vdi,iso,ploop.root-tar
上传cirros测试镜像,web界面也可以上传镜像,但是如果镜像很大则可能失败,这时用命令行界面上传可以成功
Glance的其他命令可参考博文,这里不多概述了
root@controller:~# openstack image create --disk-format qcow2 --container-format bare --file cirros-0.3.4-x86_64-disk.img --progress cirros
[=============================>] 100%
+------------------+-----------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------------+-----------------------------------------------------------------------------------------------------------+
| container_format | bare |
| created_at | 2024-12-03T08:39:25Z |
| disk_format | qcow2 |
| file | /v2/images/500df5b1-45e7-4cf0-acfe-621b2c61ae5b/file |
| id | 500df5b1-45e7-4cf0-acfe-621b2c61ae5b |
| min_disk | 0 |
| min_ram | 0 |
| name | cirros |
| owner | e85a7093d85344378bb1b016fc6a1b1b |
| properties | os_hidden='False', owner_specified.openstack.md5='', owner_specified.openstack.object='images/cirros', |
| | owner_specified.openstack.sha256='' |
| protected | False |
| schema | /v2/schemas/image |
| status | queued |
| tags | |
| updated_at | 2024-12-03T08:39:25Z |
| visibility | shared |
+------------------+-----------------------------------------------------------------------------------------------------------+
root@controller:~# ls /var/lib/glance/images
500df5b1-45e7-4cf0-acfe-621b2c61ae5b
上传的镜像除了存储在本地外,还可以配置cinder,swift,ceph等作为后端存储
- 镜像状态
- Glance 中的图像可以处于以下状态之一:
queued
图像标识符已为 Glance 注册表中的图像保留。没有图像数据上传到 Glance,并且图像大小在创建时未明确设置为零。
saving
表示当前正在将图片的原始数据上传到 Glance。当使用POST /images调用注册图片并且存在x-image-meta-location标头时,该图片永远不会处于保存状态(因为图片数据已在其他位置可用)。
uploading
表示已进行导入数据放入调用。在此状态下,不允许调用PUT /file 。(请注意,对排队图像调用PUT /file会使图像进入保存状态。当图像处于保存状态时,不允许调用PUT /stage。因此,无法在同一图像上使用两种上传方法。)
importing
表示已进行导入调用但图像尚未准备好使用。
active
表示在 Glance 中完全可用的镜像。当上传镜像数据或创建时明确将镜像大小设置为零时,就会发生这种情况。
deactivated
表示不允许任何非管理员用户访问图像数据。禁止下载图像还会禁止可能需要图像数据的图像导出和图像克隆等操作。
killed
表示上传图像数据时发生错误,图像无法读取。
deleted
Glance 保留了有关该镜像的信息,但已不再可用。处于此状态的镜像将在稍后自动删除。
pending_delete
这与已删除类似,但是 Glance 尚未删除映像数据。处于此状态的映像不可恢复。
- Glance 中的图像可以处于以下状态之一:
任务状态
- Glance 中的任务可以处于以下状态之一:
pending
任务标识符已为 Glance 中的任务保留。尚未开始对其进行处理。
processing
该任务已被底层执行器接收,并正在使用该任务类型的后端 Glance 执行逻辑运行。
success
表示该任务已在 Glance 中成功运行。result 任务字段显示有关结果的更多详细信息。
failure
表示在执行任务期间发生错误,无法继续处理。message任务的字段显示错误是什么。
磁盘格式和容器格式
在 OpenStack 的 Glance 服务中,镜像文件需要指定磁盘格式和容器格式。这两个属性决定了镜像文件的组织方式,以及它如何被用作虚拟机实例的磁盘。
- 磁盘格式(Disk Format)
磁盘格式描述镜像文件中虚拟磁盘的存储方式。它决定了镜像如何被解码和加载到虚拟机中, 决定了镜像的存储结构,影响性能、存储占用和功能支持。
格式名称 | 描述 | 使用场景 |
---|---|---|
RAW | 原始磁盘镜像文件,未压缩,未封装。 | 直接复制磁盘的字节内容,效率高但占用空间较大。 |
QCOW2 | QEMU/KVM 的磁盘格式,支持动态分配和快照。 | 文件占用空间小,支持压缩。 常用格式,适合 KVM/QEMU。 |
VMDK | VMware 的磁盘格式,兼容 VMware 产品。 | 使用 VMware 虚拟化平台时。 |
VHD | Microsoft Hyper-V 的磁盘格式,支持动态和固定大小。 | 在 Hyper-V 环境中使用。 |
ISO | 光盘镜像格式,通常用于操作系统的安装盘(例如 Ubuntu、CentOS 的安装 ISO)。 | 系统安装或启动时加载 ISO 文件。 |
AMI | Amazon Machine Image,Amazon EC2 使用的镜像格式。 | 使用 Amazon EC2 云的迁移场景。 |
VDI | VirtualBox 的磁盘格式。 | VirtualBox 用户使用。 |
PLAIN | 非特定格式的数据块镜像,类似于 RAW 格式。 | 特殊场景的自定义存储。 |
- 容器格式(Container Format)
容器格式定义了磁盘镜像的封装方式,以及它是否包含额外的元数据(如启动引导信息、分区表等)。决定了镜像的封装方式,影响其在虚拟化平台上的适用性。
格式名称 | 描述 | 使用场景 |
---|---|---|
bare | 无容器封装的纯磁盘镜像,直接使用磁盘格式(如 RAW、QCOW2)。 | 最常见的容器格式,直接加载磁盘镜像。 |
ovf | Open Virtualization Format,包含虚拟机描述文件和磁盘镜像。 | 跨虚拟化平台迁移或分发镜像。 |
ova | OVF 的封装形式,通常打包为单个文件(包含 OVF 描述和磁盘镜像)。 | 分发虚拟机模板。 |
aki | Amazon Kernel Image,封装用于引导的内核镜像。 | 使用 Amazon 相关服务时。 |
ari | Amazon Ramdisk Image,封装用于引导的 ramdisk 镜像。 | 使用 Amazon 相关服务时。 |
ami | Amazon Machine Image,与磁盘格式 AMI 搭配使用,通常是 Amazon 的完整镜像。 | 使用 Amazon 相关服务时。 |
docker | Docker 容器格式,用于分发和运行容器化应用。 | 容器化场景。 |
- 磁盘格式和容器格式的关系
磁盘格式 和 容器格式 是独立的,但需要配合使用。
例如:
一个 RAW 磁盘镜像通常使用 bare 容器格式,因为它没有额外的封装。
一个 OVF 容器格式的镜像可能使用 QCOW2 或 VMDK 磁盘格式。
如何选择格式
需求 | 磁盘格式 | 容器格式 |
---|---|---|
高性能,简单直接 | RAW | bare |
节省存储空间,支持快照 | QCOW2 | bare |
VMware 平台迁移或集成 | VMDK | ovf |
Hyper-V 平台 | VHD/VHDX | bare |
创建系统安装盘(如 ISO 文件) | ISO | bare |
基础配置
官网示例配置文件
官网参数说明
- glance-api.conf可以在文件中的 部分下放置以下选项[DEFAULT]。它们分别启用 API 服务器的启动和绑定行为。
[DEFAULT]
bind_host=ADDRESS
#绑定到的主机的地址。
#可选。默认值:0.0.0.0
bind_port=PORT
#服务器应绑定到的端口。
#可选。默认值:9292用于 API 服务器
backlog=REQUESTS
#配置套接字的积压请求数。
#可选。默认值:4096
tcp_keepidle=SECONDS
#为每个服务器套接字设置 TCP_KEEPIDLE 的值(以秒为单位)。不支持 OS X。
#可选。默认值:600
client_socket_timeout=SECONDS
#客户端连接套接字操作的超时时间。如果传入连接在此期间处于空闲状态,则它将被关闭。值为0 表示永远等待。
#可选。默认值:900
workers=PROCESSES
#要启动的 Glance API 工作进程数。每个工作进程将侦听同一端口。增加此值可能会提高性能(尤其是在使用启用了压缩的 SSL 时)。通常建议
#每个 CPU 有一个工作进程。值0将阻止创建任何新的工作进程。当data_api设置为 时 glance.db.simple.api,workers必须设置为0或1。
#可选。默认值:默认使用可用的 CPU 数量。
max_request_id_length=LENGTH
#限制记录的 x-openstack-request-id 标头的最大大小。仅当在管道中配置了上下文中间件时才有效。
#可选。默认值:(64受 max_header_line 默认值限制:16384)
image_size_cap=SIZE
#配置 Glance 镜像大小限制
#可通过 Glance API 服务器上传的最大图像大小(以字节为单位)。
#重要提示:只有经过仔细考虑后才能增加此值,并且必须将其设置为低于 8 EB (9223372036854775808) 的值。
#可选。默认值:1099511627776(1 TB)
user_storage_quota=100G
#可选。默认值:0(无限制)。
#配置 Glance 用户存储配额
#此值指定每个用户可以在所有存储系统上使用的最大存储量。可以选择为该值指定单位。值可以以 B、KB、MB、GB 或 TB 为单位,分别表示字节、千字节、兆字节、千兆字节和太字节。默认单位为字节。
- 配置 Glance 存储后端
使用多个存储配置文件系统存储后端
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadirs = /var/glance/store
filesystem_store_datadirs = /var/glance/store1:100
filesystem_store_datadirs = /var/glance/store2:200
此选项只能在配置文件中指定,并且仅适用于文件系统存储后端。
filesystem_store_datadirs 选项允许管理员配置多个存储目录,以在文件系统存储后端保存 Glance 映像。每个目录都可以与其优先级结合使用。
- 可以多次指定此选项以指定多个商店。
必须在 gaze-api.conf 中指定 filesystem_store_datadir 或 filesystem_store_datadirs 选项
优先级为 200 的商店优先于优先级为 100 的商店。
如果没有指定优先级,则默认优先级为“0”。
如果两个文件系统存储具有相同的优先级,则会选择具有最大可用空间的存储来存储图像。
如果多次指定同一个商店,则会引发 BadStoreConfiguration 异常。
配置cinder为后端存储
[root@controller ~]# vi /etc/glance/glance-api.conf
#show_multiple_locations = false
改为
show_multiple_locations = True
修改
[glance_store]
stores = cinder
default_store=cinder
[root@controller ~]# systemctl restart openstack-glance-*
[root@controller ~]# vi /etc/cinder/cinder.conf
#allowed_direct_url_schemes =
改为
allowed_direct_url_schemes =cinder
#image_upload_use_internal_tenant = false
改为
image_upload_use_internal_tenant = True
#最后重启cinder
[root@controller ~]# systemctl restart *cinder*
swift作为后端存储
[root@controller ~]# vi /etc/glance/glance-api.conf
[glance_store]
stores=glance.store.filesystem.Store,glance.store.swift.Store,glance.store.http.Store
default_store=swift
swift_store_region=RegionOne
swift_store_endpoint_type=internalURL
swift_store_container=chinaskill_glance
swift_store_large_object_size=5120
swift_store_large_object_chunk_size=200
swift_store_create_container_on_put=True
swift_store_multi_tenant=True
swift_store_admin_tenants=service
swift_store_auth_address=http://controller:5000/v3
swift_store_user=glance
swift_store_key=000000
[root@controller ~]# systemctl restart openstack-glance-*
配置 VMware 存储后端
- vmware_server_host=ADDRESS
使用 VMware 存储后端时必需。
只能在配置文件中指定。
设置 ESX/ESXi 或 vCenter Server 目标系统的地址。该地址可以包含 IP ( 127.0.0.1)、IP 和端口 ( 127.0.0.1:443)、DNS 名称 ( www.my-domain.com) 或 DNS 和端口。
此选项特定于 VMware 存储后端。 - vmware_server_username=USERNAME
使用 VMware 存储后端时必需。
只能在配置文件中指定。
用于通过 VMware ESX/ESXi 或 vCenter Server 进行身份验证的用户名。 - vmware_server_password=PASSWORD
使用 VMware 存储后端时必需。
只能在配置文件中指定。
用于对 VMware ESX/ESXi 或 vCenter Server 进行身份验证的密码。 - vmware_datastores
使用 VMware 存储后端时必需。
此选项只能在配置文件中指定,并且特定于 VMware 存储后端。 - vmware_datastores 允许管理员配置多个数据存储,以将 Glance 映像保存在 VMware 存储后端。该选项所需的格式为:<datacenter_path>:<datastore_name>:<optional_weight>。
其中 datacenter_path 是数据存储所在数据中心的清单路径。可以给出可选权重来指定优先级。 - vmware_api_retry_count=TIMES
可选。默认值:10
只能在配置文件中指定。
出现连接相关问题时必须重试 VMware ESX/VC 服务器 API 的次数。 - vmware_task_poll_interval=SECONDS
可选。默认值:5
只能在配置文件中指定。
用于轮询在 VMware ESX/VC 服务器上调用的远程任务的间隔。 - vmware_store_image_dir
可选。默认值:/openstack_glance
只能在配置文件中指定。
访问数据存储中存储图像的文件夹的路径。 - vmware_api_insecure=ON_OFF
可选。默认值:False
只能在配置文件中指定。
允许对 ESX/VC 服务器执行不安全的 SSL 请求。
例子:
[glance_store]
vmware_datastores = datacenter1:datastore1
vmware_datastores = dc_folder/datacenter2:datastore2:100
vmware_datastores = datacenter1:datastore3:200
可以多次指定此选项以指定多个数据存储。
必须在 gaze-api.conf 中指定 vmware_datastore_name 或 vmware_datastores 选项
权重为 200 的数据存储优先于权重为 100 的数据存储。
如果没有指定权重,则默认权重为“0”。
如果两个数据存储具有相同的权重,则将选择具有最大可用空间的数据存储来存储图像。
如果数据中心路径或数据存储名称包含冒号 :符号,则必须使用反斜杠进行转义。
配置S3存储后端
- s3_store_host
只能在配置文件中指定。
S3 服务器正在监听的主机。此选项可以包含 DNS 名称(例如 s3.amazonaws.com、my-object-storage.com)或 IP 地址(127.0.0.1)。 - s3_store_access_key
只能在配置文件中指定。
用于与 Amazon S3 或 S3 兼容存储服务器进行身份验证的访问密钥。 - s3_store_secret_key
只能在配置文件中指定。
用于与 Amazon S3 或 S3 兼容存储服务器进行身份验证的密钥。 - s3_store_bucket
只能在配置文件中指定。
在 S3 中存储 Glance 图像的存储桶名称。如果s3_store_create_bucket_on_put设置为 true,即使存储桶不存在也会自动创建。 - s3_store_create_bucket_on_put
可选。默认值:False
只能在配置文件中指定。
确定 S3 是否应创建新的 bucket。此选项采用布尔值来指示如果 bucket 不存在,Glance 是否应在 S3 中创建新的 bucket。 - s3_store_bucket_url_format
可选。默认值:auto
只能在配置文件中指定。
此选项采用用于指定 S3 存储桶中对象地址的访问模型。您可以将值设置为auto、virtual或 path。 - s3_store_large_object_size
可选。默认值:100
只能在配置文件中指定。
S3 应以什么大小(以 MB 为单位)开始对图像文件进行分块并在 S3 中执行分段上传。 - s3_store_large_object_chunk_size
可选。默认值:10
只能在配置文件中指定。
S3 在上传部分时应使用多部分上传部分的大小(以 MB 为单位)。 - s3_store_thread_pools
可选。默认值:10
只能在配置文件中指定。
在 S3 中执行分段上传的线程池数量。
示例:
[glance_store]
s3_store_host = http://s3-ap-northeast-1.amazonaws.com
s3_store_host = https://s3-ap-northeast-1.amazonaws.com
s3_store_host = http://my-object-storage.com
s3_store_host = https://my-object-storage.com:9000
在path风格中,对象的端点看起来像https://s3.amazonaws.com/bucket/example.img。
在virtual风格中,对象的端点看起来像https://bucket.s3.amazonaws.com/example.img。
如果您在存储桶名称中不遵循 DNS 命名约定,则可以获取路径样式的对象,但不能获取虚拟样式的对象。
配置镜像策略的yaml文件:官网
- 配置格式如下
该配置文件通过role:admin形式指定配置权限
root@controller:~# cat /etc/glance/policy.yaml
{
"context_is_admin": "role:admin",
"default": "role:admin",
"add_image": "role:admin",
"delete_image": "",
"get_image": "",
"get_images": "",
"modify_image": "",
"publicize_image": "role:admin",
"communitize_image": "",
"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": "",
"get_tasks": "",
"add_task": "",
"modify_task": "",
"tasks_api_access": "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":""
}
镜像转换
qemu-img 是 QEMU 提供的一个用于创建、转换和操作虚拟机磁盘镜像的命令行工具。它支持多种磁盘镜像格式,如 QCOW2、RAW、VMDK 等,是管理虚拟磁盘镜像的核心工具之一
- 查看镜像信息
输出镜像的大小、格式、实际占用空间等信息
root@controller:~# qemu-img info cirros-0.3.4-x86_64-disk.img
image: cirros-0.3.4-x86_64-disk.img
file format: qcow2
virtual size: 39.2 MiB (41126400 bytes)
disk size: 12.7 MiB
cluster_size: 65536
Format specific information:
compat: 0.10
compression type: zlib
refcount bits: 16
Child node '/file':
filename: cirros-0.3.4-x86_64-disk.img
protocol type: file
file length: 12.7 MiB (13287936 bytes)
disk size: 12.7 MiB
- 转换磁盘格式
将磁盘镜像从一种格式转换为另一种格式
qemu-img convert -f <源格式> -O <目标格式> <源镜像文件> <目标镜像文件>
root@controller:~# qemu-img convert -f qcow2 -O raw cirros-0.3.4-x86_64-disk.img cirros-raw.img
root@controller:~# qemu-img info cirros-raw.img
image: cirros-raw.img
file format: raw
virtual size: 39.2 MiB (41126400 bytes)
disk size: 17.8 MiB
Child node '/file':
filename: cirros-raw.img
protocol type: file
file length: 39.2 MiB (41126400 bytes)
disk size: 17.8 MiB
- 扩展磁盘大小
调整磁盘镜像的大小(只能扩展)需要在操作系统中调整分区才能实际使用扩展空间。
root@controller:~# qemu-img resize cirros-0.3.4-x86_64-disk.img +10M
Image resized.
root@controller:~# qemu-img info cirros-0.3.4-x86_64-disk.img
image: cirros-0.3.4-x86_64-disk.img
file format: qcow2
virtual size: 49.2 MiB (51612160 bytes)
disk size: 12.7 MiB
cluster_size: 65536
Format specific information:
compat: 0.10
compression type: zlib
refcount bits: 16
Child node '/file':
filename: cirros-0.3.4-x86_64-disk.img
protocol type: file
file length: 12.7 MiB (13287936 bytes)
disk size: 12.7 MiB
root@controller:~#
- 压缩磁盘镜像
将磁盘镜像压缩以节省存储空间(适用于 QCOW2)
qemu-img convert -O qcow2 -c <源镜像文件> <目标镜像文件>
root@controller:~# qemu-img convert -O qcow2 -c cirros-0.3.4-x86_64-disk.img cirros-qcow2.img