OpenStack镜像管理:Glance篇
镜像概念与类型
在云计算环境中,镜像是一个包含了操作系统及必要配置的弹性云服务器模板,用于快速创建虚拟机实例。
镜像分类
-
公共镜像:云平台提供的标准操作系统镜像,所有用户可见,具有高度稳定性且为正版授权。包含预装的公共应用,用户可根据需求自助配置环境。
-
私有镜像:基于云服务器或外部镜像文件创建的个人镜像,仅创建者可见。包含操作系统、预装应用及用户私有应用,可显著节省重复配置时间。
-
共享镜像:接受其他用户共享的私有镜像,作为自己的镜像使用。
-
市场镜像:第三方提供的优质镜像,预装操作系统、应用环境和各类软件,支持一键部署,满足建站、开发、可视化管理等需求。
Glance架构演进
Glance是OpenStack的镜像服务,负责虚拟机镜像的发现、注册和交付。
架构演变

- Newton及之前版本:支持REST API V1和V2
- V2 API版本:Glance-Registry功能整合进Glance-API,元数据请求直接操作数据库
- V1 API版本:Glance-Registry作为独立的WSGI Server处理元数据请求,不对用户暴露
- Stein版本开始:Glance-Registry被废弃,完全由Glance-API替代
存储后端支持
通过Store模块接口支持多种存储后端:
- Amazon S3
- Cinder/Swift
- Ceph
- Sheepdog
核心概念区分
镜像、实例与规格

- 镜像(Image):虚拟机模板,包含操作系统和基础配置
- 实例(Instance):基于镜像启动的虚拟机
- 规格(Flavor):定义实例的计算资源(CPU、内存、磁盘等)
关系说明:
- 同一镜像可启动多个实例
- 实例是镜像的独立副本,修改不影响原镜像
- 启动实例时必须指定规格
Glance磁盘格式
| 磁盘格式 | 描述 |
|---|---|
| vhd | Xen、Microsoft、VirtualBox常用格式 |
| vhdx | vhd增强版,支持更大容量 |
| vmdk | VMware常用格式 |
| vdi | VirtualBox和QEMU支持格式 |
| iso | 光盘存档格式 |
| ploog | Virtuozzo支持的容器磁盘格式 |
| qcow2 | QEMU格式,支持动态扩展和写时复制 |
| aki | Amazon内核镜像 |
| ari | Amazon Ramdisk镜像 |
| ami | Amazon机器镜像 |
| raw | 非结构化磁盘镜像格式 |
状态机机制
镜像状态
| 状态 | 描述 |
|---|---|
| queued | 保留镜像标识符,数据未上传 |
| saving | 原始数据正在上传 |
| uploading | 调用import data-put请求 |
| importing | 导入中,尚未就绪 |
| active | 镜像可用 |
| deactivated | 禁止非管理员访问 |
| killed | 上传出错,镜像不可用 |
| deleted | 保留信息但不可用,将自动清理 |
| pending_delete | 类似deleted,数据尚未删除 |
任务状态
| 状态 | 描述 |
|---|---|
| pending | 任务挂起 |
| processing | 任务处理中 |
| success | 任务成功 |
| failure | 任务失败 |

镜像上传实践
上传示例
上传两个镜像文件到controller节点的/root目录:
bash
# 查看文件信息
[root@controller ~]# qemu-img info cirros-0.5.2-x86_64-disk.img
image: cirros-0.5.2-x86_64-disk.img
file format: qcow2
virtual size: 112 MiB (117440512 bytes)
disk size: 15.5 MiB
[root@controller ~]# qemu-img info TinyCore-12.0.iso
image: TinyCore-12.0.iso
file format: raw
virtual size: 20 MiB (20971520 bytes)
disk size: 20 MiB




上传成功:

数据库验证
mysql
MariaDB [glance]> select id,value from image_locations;
+----+--------------------------------------------------------------------+
| id | value |
+----+--------------------------------------------------------------------+
| 1 | file:///var/lib/glance/images/e846b42b-5024-479b-9f79-1ae181bfa14e |
| 2 | file:///var/lib/glance/images/bb8a4940-3bde-428c-83b4-9c98eb430721 |
+----+--------------------------------------------------------------------+
2 rows in set (0.000 sec)
镜像存储位置
bash
[root@controller ~]# find / -name e846b42b-5024-479b-9f79-1ae181bfa14e
/var/lib/glance/images/e846b42b-5024-479b-9f79-1ae181bfa14e
使用Swift作为后端存储
配置修改
bash
# 查看glance配置文件
[root@controller ~]# grep -Ev '^#' /etc/glance/glance-api.conf | grep -Ev '^$'
# 修改关键配置
[root@controller ~]# vim /etc/glance/glance-api.conf
3111 default_store=swift
3982 swift_store_region = RegionOne
4090 swift_store_container = gqdglance
4391 swift_store_auth_address = http://192.168.108.10:5000/v3
4399 swift_store_user = swift
4408 swift_store_key = f8715a7c2bf640b9
# 重启服务
[root@controller ~(keystone_admin)]# systemctl restart openstack-glance*
存储验证
上传镜像后,数据库中存储位置更新:
mysql
MariaDB [glance]> select id,value from image_locations;
+----+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
| id | value |
+----+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 3 | swift+http://192.168.108.10:8080/v1/AUTH_03e49a46342d48ab9607b4919925e42c/gqdglance_6a5a50d9-be54-4151-bd2f-4b1c08efdb18/6a5a50d9-be54-4151-bd2f-4b1c08efdb18 |
+----+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
命令行上传大文件镜像
Web界面上传大文件时缺乏进度提示,建议使用命令行方式:
bash
[root@controller ~(keystone_admin)]# glance image-create \
--name image_centos \
--file CentOS-7-x86_64-Minimal-1810.iso \
--disk-format raw \
--container bare \
--progress
命令行方式提供实时上传进度显示,避免因网络问题导致上传失败而无法感知。
现象如下,有进度条:

镜像获取资源
OpenStack社区提供官方镜像下载:
- 链接:https://docs.openstack.org/image-guide/obtain-images.html
- 多数镜像预装cloud-init包,支持SSH密钥对登录和用户数据注入

总结
Glance作为OpenStack的镜像管理服务,承担着虚拟机镜像的存储、管理和分发任务。通过理解其架构演进、状态机机制和多种存储后端支持,可以更有效地进行镜像管理操作。
实际部署中需注意:
- 根据版本选择合适的API接口
- 大文件镜像上传建议使用命令行方式
- 生产环境可考虑使用Swift等分布式存储作为后端
- 定期清理无效镜像状态,释放存储空间
正确配置和使用Glance服务,能够显著提升OpenStack环境中虚拟机的部署效率和管理便利性。