openstack之glance介绍
概念
glance为nova提供镜像服务,用于启动实例,预建镜像已安装cloud-init,可以访问openstack基金会获取操作系统镜像:官方镜像
格式
raw:无格式的镜像;
vhd:hyper-v使用的格式;
vmdk:vmware使用的格式;
vdi:VirtualBox使用的格式;
iso:光盘镜像格式;
qcow2:Qemu使用的格式,支持复制中写入;
组件
glance-api:api管理接口;
glance-registry:提供存储镜像metadata及查询服务,v2版本存在,v3版本由glance-api替代;
常用命令
# 下载镜像
openstack image save --file cirros-disk_x86_64.img mycirros
# 上传镜像
# bare:镜像没有元数据封装并且不是容器镜像
openstack image create --file cirros-disk_x86_64.img --container-format bare --disk-format qcow2 mycirros
# 更新镜像元数据
openstack image set --min-ram 8 mycirros
# 删除
openstack image delete mycirros
# 快照
openstack server image create --name 快照名称 虚拟机名称
实例创建有2种模式:boot from image、bootgrom volume
boot from image:由于没有独立的云硬盘,系统盘数据直接保存在宿主机上。创建虚拟机快照时,会将整个系统盘变成镜像上传到glance 中,镜像 size 非0;
boot from volume:系统盘数据保存在独立的卷volume中。创建虚拟机快照时,是对云硬盘创建快照,然后把元数据,比如snapshot ID ,存入 glance 中,由于不保存虚拟机数据,只保存对应元数据,因此镜像 size 为 0。
进阶操作
查看镜像文件详细信息
qemu-img info cirros-0.6.2-x86_64-disk.img
image: cirros-0.6.2-x86_64-disk.img
file format: qcow2
virtual size: 112M (117440512 bytes)
disk size: 20M
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
file cirros-0.6.2-x86_64-disk.img
cirros-0.6.2-x86_64-disk.img: QEMU QCOW Image (v3), 117440512 bytes
本地挂载查看虚拟机内部文件系统
# centos7可能需要编译内核后才能使用network block device
# 加载nbd模块,设置16个分区
modprobe nbd max_part=16
ls /dev/ | grep nbd
nbd0
nbd1
nbd10
nbd11
nbd12
nbd13
nbd14
nbd15
nbd2
nbd3
nbd4
nbd5
nbd6
nbd7
nbd8
nbd9
qemu-nbd --connect=/dev/nbd0 cirros-0.6.2-x86_64-disk.img
lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 28f886d6-c1e5-4eb0-a3f2-5937d97ffbe4 /boot
└─sda2 LVM2_member F0fE81-8ZVE-zjQJ-3EI4-KVfm-vanS-sEgBeE
├─rhel-root xfs 4d35a87f-c89e-4e6a-abe0-548996d0778c /
├─rhel-swap swap 539e62d0-5279-49b0-8bcc-9b12509515d9 [SWAP]
└─rhel-home xfs 864b1ca8-4b4d-470e-a0d1-b84b7fdbcd33 /home
sr0
nbd0
├─nbd0p1 ext3 cirros-rootfs f1511162-06fb-4482-9dab-9a0c76633fb2
└─nbd0p15 vfat AE31-5342
mount /dev/nbd0p1 /mnt
# 虚拟机内部
ls /mnt
boot initrd.img lost+found vmlinuz
# 退出
umount /mnt
qemu-nbd --disconnect /dev/nbd0