前言
虚拟机在创建时,可选择:
- 从镜像启动(创建新硬盘)
- 从镜像启动(不创建新硬盘,重点介绍)
- 其它(此处不介绍)
环境
openstack 版本:T
部署方式: kolla-ansible(容器)
块设备: ceph rbd
正文
从镜像启动,并创建新硬盘
该方法实际流程:
首先通过 cinder 创建一块硬盘,然后将镜像信息复制进去,最后将这块盘作为启动盘,启动虚拟机。
该启动方式的一些问题:
- 查询虚拟机时,无法查询到镜像信息。因为它本质上是从硬盘启动,而非镜像,所以查询不到。
- 此时规格中定义的硬盘大小不会起作用,实际硬盘大小由创建时传入的硬盘大小决定。
从镜像启动,不创建新硬盘(重点)
该方法实际流程
nova 直接访问 ceph rbd ,复制镜像文件供虚拟机使用。
根磁盘的大小由规格决定。(虚拟机规格调整时,不能将磁盘调小,只能增或保持不变)
该启动方式的一些问题:
- 使用该方法无法查询到根磁盘的卷信息。因为它没有使用 cinder 创建根磁盘,因此无法通过 cinder 接口查询到根磁盘的信息。
查询详细过程参考:
1. 查询到虚拟机 xml 信息
# 显示虚拟机信息
openstack server show
其中:
OS-EXT-SRV-ATTR:host 指虚拟机所在节点
OS-EXT-SRV-ATTR:instance_name 指虚拟机在 qemu 中的名称
在虚拟机所在节点
执行:
# 进入 libvirt 容器
docker exec -itu0 nova_libvirt bash
# 查询 xml 信息,这里的 instance_name 是指刚刚查询到的虚拟机在 qemu 中的名称
virsh dumpxml <instance_name>
找到 xml 中的 devices 组:
如上图划线处,总体含义是指:
虚拟机的根磁盘由 ceph 的 rbd 提供。
其中块设备所在的 池 是 vms,名称 是 603ad6af-4ffd-4043-b154-ed97fa3781b3_disk
2. 查询块设备
查询该设备的方法有多种,一是直接进入 ceph_mon 容器中查询,二是在 nova_compute 容器中查询。
这里展示在 nova_compute 容器中查询(因为这种方式参考资料很少)。
首先退出刚刚进入的容器。
然后进入 nova_compute 容器:
# 进入容器
docker exec -itu0 nova_compute bash
在该容器中,/etc 下可以发现 ceph 的认证配置文件,这也说明了 nova_compute 直接与 ceph 交互。
# 查看 ceph 配置文件
ls /etc/ceph/
这个 keyring 结尾的文件就是 ceph 认证文件了,连接 ceph 时需要使用它。
使用 rbd 命令查看块设备信息
# rbd ls <pool> 查询该 pool 中的块设备
# 查看所有块设备列表, -k 指定 keyring 文件路径,--id 指定用户(也就是 keyring 文件中的倒数第二个单词:nova)
rbd ls vms -k /etc/ceph/ceph.client.nova.keyring --id nova
# rbd info <pool>/<name>
# 查看单个块设备详情
rbd info vms/603ad6af-4ffd-4043-b154-ed97fa3781b3_disk -k /etc/ceph/ceph.client.nova.keyring --id nova
执行如上命令可以查询到相应的块设备信息。
如果对 qemu 熟悉一点的话,还存在一个 qemu-img 的方法去查看虚拟机镜像(根磁盘)信息。
在这里也是可以使用 qemu-img 对该 rbd 设备进行查询的:
# qemu-img info rbd:<pool>/<name>:keyring=<path>:id=<user>
qemu-img info rbd:vms/603ad6af-4ffd-4043-b154-ed97fa3781b3_disk:keyring=/etc/ceph/ceph.client.nova.keyring:id=nova