OpenStack虚拟机创建过程中镜像格式的变化过程
Glance用来作为独立的大规模镜像查找服务,当它与Nova和Swift配合使用时,就为OpenStack提供了虚拟机镜像的查找服务,像所有的OpenStack项目一样,遵循以下设计思想:
- 基于组件的架构 – 便于快速增加新特性
- 高可用性 – 支持大负荷
- 容错性 – 独立的进程地址空间,避免串行错误
- 开放标准 – 对社区驱动的API提供参考实现
1. Glance架构
Glance主要由三个部分构成:glance-api、glance-registry以及image store。
- Glance-api接收REST API的请求,类似nova-api;
Glance-api在功能上与nova-api十分类似,都是接收REST API请求,然后通过其他模块(glance-registry及image store)来完成诸如镜像的查找、获取、上传、删除等操作,i默认监听端
口9292。
- glance-registry用于与MySQL数据库交互,用于存储或获取镜像的元数据(metadata);
Glance-registry用于提供镜像元数据相关的REST接口,通过glance-registry,可以向数据库中写入或获取镜像的各种数据,glance-registry监听端口9191。Glance的数据库中有两张表,
一张是image表,另一张是image property表。Image表保存了镜像格式、大小等信息;image property表则主要保存镜像的定制化信息。
- image store是一个存储的接口层,通过这个接口,glance可以获取镜像,image store支持的存储有Amazon的S3、OpenStack本身的Swift,还有诸如ceph,sheepdog,GlusterFS等分布式存储。
Image store是镜像保存与获取的接口,它仅仅是一个接口层,具体的实现需要外部的存储支持,目前,支持的接口有Amazon S3、GlusterFS、Swift,sheepdog,ceph等。
Glance体系结构如下图所示,通过glance,OpenStack的三个模块计算组件(nova)、镜像管理组件(glance)、存储组件(swift,ceph,sheepdog等)被连接成一个整体,Glance为Nova提供镜像的查找等操作,而存储组件又为Glance提供了实际的存储服务。而Swift,ceph,gluster,sheepdog等又是Glance存储接口的一些具体实现,Glance的存储接口还能支持S3等第三方的商业组件。
glance add name=”Precise x86_64″ is_public=true
container_format=ovf disk_format=qcow2
< ubuntu-12.04-server-cloudimg-amd64-disk1.img
ubuntu@compute-63-02:/var/lib/glance/images$ ll -alh
total 2.5G
drwxr-xr-x 2 glance glance 4.0K Jan 30 01:30 ./
drwxr-xr-x 6 glance glance 4.0K Dec 27 21:11 ../
-rw-r—– 1 glance glance 768M Dec 27 04:31 5b298155-8bcf-442f-bc83-bc52f3fe5be9
-rw-r—– 1 glance glance 712M Jan 30 01:31 8760d55b-0d91-4987-8980-d6659c7856ab
-rw-r—– 1 glance glance 223M Dec 25 03:58 c036d689-0336-4fcd-a8e0-4aed4dd5e420
-rw-r—– 1 glance glance 768M Dec 27 04:44 d771b2ce-9310-4757-8ec5-d80f8d1e1712
通过qemu-img info命令,先看一下镜像文件的大小和格式如下:
ubuntu@compute-63-02:/var/lib/glance/images$ sudo qemu-img info c036d689-0336-4fcd-a8e0-4aed4dd5e420
image: c036d689-0336-4fcd-a8e0-4aed4dd5e420
file format: qcow2 //qcow2格式的镜像
virtual size: 2.0G (2147483648 bytes) //镜像文件大小的上限为2G,实际使用了223M
disk size: 223M
cluster_size: 65536
(2)通过horizon创建m1.small(具体配置为:1vcpu,2G memory,10G root disk,20G extra volume)的virtual machine
新创建的虚拟机存放在/var/lib/nova/instances目录下,该目录的大体结构如下:
ubuntu@compute-63-12:/var/lib/nova/instances$ ll
total 32
drwxr-xr-x 8 nova nova 4096 Feb 28 21:39 ./
drwxr-xr-x 10 nova nova 4096 Dec 25 01:07 ../
drwxrwxr-x 2 nova nova 4096 Feb 28 21:39 _base/ //相当于镜像文件的cache目录,在此host上创建的所有的vm,都会先cacha到这里
drwxrwxr-x 2 nova nova 4096 Jan 8 05:56 instance-00000022/ //instance-xxxxx新创建的虚拟机
drwxrwxr-x 2 nova nova 4096 Feb 28 03:40 instance-00000034/
drwxrwxr-x 2 nova nova 4096 Feb 28 04:02 instance-00000037/
drwxrwxr-x 2 nova nova 4096 Feb 28 21:39 instance-0000003a/
drwxrwxr-x 2 nova nova 4096 Jan 30 01:30 snapshots/ //此host上虚拟机对应的快照文件
通过查看nova-compute.log可以看到vm创建过程中,镜像文件格式的变化过程,下面总结了下,具体参见下图。
从glance中得知,有个virtual size =2G的qcow2格式的镜像文件Precise x86_64,它在glance中的ID=c036d689-0336-4fcd-a8e0-4aed4dd5e420。