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(最常用,支持快照)、rawvmdk(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

思考题:

  1. Glance 本身不存储镜像文件,只管理元数据——那镜像文件到底存在哪里?如果后端存储是 Swift,整个链路是怎样的?
  2. 如果一个镜像文件很大(比如 20GB),多个计算节点同时请求这个镜像创建 VM,会有什么性能瓶颈?如何优化?
  3. 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

results matching ""

    No results matching ""