OpenStack 每日学习课程
日期: 2026-03-30(周一) 今日主题: Glance —— OpenStack 镜像服务
一、核心概念:Glance 是什么?
一句话理解: Glance 就是 OpenStack 的"系统镜像超市"。
想象你去网吧打游戏,每台电脑都能快速恢复成干净的 Windows 系统——这背后靠的就是一个"母盘镜像"。Glance 做的事情完全一样:它负责存储、管理和分发虚拟机镜像,让 Nova(计算服务)在创建虚拟机时能快速拿到操作系统的"底版"。
没有 Glance,Nova 就像一个厨师没有食材——知道怎么做菜,但无从下手。
二、工作原理
关键组件
| 组件 | 职责 |
|---|---|
| glance-api | 对外提供 RESTful API,接收镜像上传/查询/删除请求 |
| glance-registry | 管理镜像元数据(名称、格式、大小、状态等),已在 Queens 版本后合并入 API |
| 后端存储 | 实际存放镜像文件,支持本地文件系统、Swift、Ceph、S3 等 |
| 数据库(MySQL) | 持久化镜像元数据 |
核心流程:上传一个镜像
用户/管理员
│
▼
glance-api(接收请求,验证 Token → Keystone)
│
├─→ 写入元数据 → 数据库(MySQL)
│
└─→ 写入镜像文件 → 后端存储(Swift / Ceph / 本地)
核心流程:Nova 创建虚拟机时拉取镜像
Nova 收到创建 VM 请求
│
▼
向 Glance API 查询镜像 ID
│
▼
下载镜像文件到计算节点本地缓存
│
▼
基于镜像启动虚拟机实例
镜像格式支持
Glance 支持多种格式:qcow2(最常用,支持快照)、raw、vmdk(VMware)、vhd(Hyper-V)、iso 等。
三、实际应用场景
场景 1:企业私有云标准化部署
运维团队制作一个预装了公司安全基线、监控 Agent、统一配置的 CentOS 镜像,上传到 Glance 并设为 public。所有开发团队创建虚拟机时直接选用,保证环境一致性,告别"在我机器上能跑"的问题。
场景 2:多租户镜像隔离
A 公司和 B 公司共用同一套 OpenStack,各自上传自己的定制镜像。Glance 通过 visibility(public / private / shared / community)控制镜像可见范围,A 公司的镜像 B 公司看不到,安全隔离。
场景 3:镜像版本管理与快速回滚
生产环境升级应用后出现问题,运维可以直接用 Glance 中保存的上一版本镜像重新创建实例,实现分钟级回滚,而不需要重新安装系统。
四、动手练习 / 思考题
练习(有环境的同学):
# 查看当前可用镜像列表
openstack image list
# 上传一个本地镜像
openstack image create "my-ubuntu-22.04" \
--file ubuntu-22.04.qcow2 \
--disk-format qcow2 \
--container-format bare \
--public
# 查看镜像详情
openstack image show my-ubuntu-22.04
思考题:
- Glance 本身不存储镜像文件,只管理元数据——那镜像文件到底存在哪里?如果后端存储是 Swift,整个链路是怎样的?
- 如果一个镜像文件很大(比如 20GB),多个计算节点同时请求这个镜像创建 VM,会有什么性能瓶颈?如何优化?
qcow2格式为什么比raw更常用?它的"写时复制"特性对虚拟机快照有什么意义?
五、今日总结
| 维度 | 要点 |
|---|---|
| 是什么 | OpenStack 镜像服务,负责镜像的存储、管理和分发 |
| 核心组件 | glance-api + 后端存储(Swift/Ceph/本地)+ 数据库 |
| 与谁协作 | Keystone(认证)、Nova(拉取镜像创建 VM)、Swift/Ceph(存镜像文件) |
| 关键概念 | 镜像格式(qcow2/raw)、visibility 权限控制、镜像元数据 |
| 一句话记忆 | Glance = 虚拟机的"系统镜像超市",Nova 的原材料供应商 |
下一课预告: Swift —— OpenStack 对象存储服务(Glance 的"仓库")
📁 文件路径:
openstack-learning/openstack-glance-2026-03-30.md