目录

1 系统分区引导方式

2 从卷中创建虚拟机

3 实践

4 参考文档


1 系统分区引导方式

当启动Openstack虚拟机时,系统分区创建方式有以下五种:

  • 从虚拟机镜像引导:需要用户从Glance镜像库中指定一个镜像,并将其拷贝到临时磁盘;
  • 从虚拟机快照引导:需要用户指定一个虚拟机快照,并将其拷贝临时磁盘来系统分区;
  • 从Volume卷引导:需要用户来指定Cinder 卷,直接挂载为虚拟机系统分区,无需拷贝,因为卷是可引导磁盘,操作系统所需文件已经保存;
  • 从虚拟机镜像引导并挂载新建的Volume卷:需要用户从Glance镜像库中指定一个镜像,镜像内容会被拷贝到一个新创建的Cinder卷中,随后将其挂载为虚拟机的系统盘;
  • 从Volume卷快照引导并挂载新建的Volume卷:需要用户指定Cinder卷的快照,快照将被拷贝到一个新创建的Cinder卷中,随后将其挂载为虚拟机的系统盘。

后面三种与Volume卷相关的三种引导方式,通常系统分区的声明周期通常都比虚拟机的生命周期还要长,因为虚拟机停止时,卷没有被删除。与前两种方式对比,从卷中引导虚拟机系统具有更快的配置和启动速度。Nova存储后端配置为本地文件存储的话,性能方面要弱很多,因为不支持虚拟机的在线迁移,如果存储后端对接共享存储集群(NFS、Ceph等)可以支持虚拟机的在线迁移,因为虚拟机系统分区可以从多次存储节点上并发访问。

2 从卷中创建虚拟机

在通常情况下,从虚拟机镜像或虚拟机快照中创建虚拟机已经足够了,但有些时候我们想要持久化存储的系统盘时而临时盘时,从卷中启动虚拟机将变的非常有用,另外从卷中启动还有以下优点:

  • 可以不受云主机类型中磁盘配额的限制(甚至可以指定一个零磁盘的类型)
  • 持久化的卷生命周期比虚拟机实例的声明周期还要长
  • 可以从卷中直接创建镜像,无论卷是否已经挂载到虚拟机上

3 实践

3.1 创建可启动的卷

(1)从现存的镜像或快照中创建可启动的卷

从镜像创建可启动卷。传入“–image”参数可将一个卷设置为可启动。

$ openstack image list #找到需要指定镜像或快照的UUID
$ openstack volume create --image 619060dd-010f-4d99-9a4c-96f97ae71644 --size 20 bootable_volume

格式:–image IMAGE_ID –size SIZE_IN_GB VOLUME_NAME

(2)从现存的虚拟机实例构建可启动的卷

首先创建一个卷,这里需要预估好目标虚拟机的大小

$ openstack volume create --size 20 my-volume

然后挂载到正在运行的虚拟机上,创建分区,创建文件系统,挂载的指定目录

拷贝当前虚拟机的操作系统到上面卷上,可以采用常规的备份方式,例如dd或rsync拷贝

# dd if=/dev/sda1 of=/dev/sdb1

# rsync -Pa / /mnt/ --exclude=/mnt/ --exclude=/mnt/* --exclude=/tmp/* --exclude=/proc/*

然后再修改卷属性为可启动即可。

$ openstack volume set --property set-bootable=true my-volume

对比这两种方法,还是第一种方法较为简单,从现有虚拟机上创建快照,然后采用第一种方法制作可启动卷即可。

3.2 启动虚拟机

从可启动的卷启动虚拟机的方式

$ openstack server create --flavor cpu1_mem1_disk4 --volume 5b9ba543-bef2-48de-a17e-201716ac700c <span class="se">\</span>
  --nic net-id=e416b526-a2cb-4676-a8b0-f32a7c97ece8 myInstanceFromVolume01

格式:–volume VOLUME_ID为可启动卷ID。

从镜像启动实例并连接非启动卷的方式

$ openstack server create --flavor cpu1_mem1_disk4 --nic net-id=e416b526-a2cb-4676-a8b0-f32a7c97ece8 \
--image 619060dd-010f-4d99-9a4c-96f97ae71644 --block-device-mapping vda=e64b80a5-4592-45d2-8a11-343f2df86e27:::0 \
myInstanceFromVolume02

格式:–flavor 需要指定云主机类型的,但磁盘大小不受限制,这里磁盘类型为4GB,小于20GB仍可以创建,–image 这里必须要指定启动卷所对应的镜像UUID –block-device-mapping  <dev-name=mapping> dev-name为块设备名称,maping格式为<id>:<type>:<size(GB)>:<delete_on_terminate> (optional
extension),即id为可启动卷的UUID,type为类型,size(GB)为以GB计的卷大小,与卷大小一致,delete_on_terminate为是否终止虚拟机时删除卷,0或false为不删除,1或true为删除。

3.3 其他

利用卷启动虚拟具有一些其他新改变:

  • 给现有虚拟机快照会生成卷的快照
  • 可以通过扩展卷的方式给虚拟机系统盘扩容

4 参考文档

Booting an Instance from a Volume - Docs

云硬盘启动与镜像启动源码分析及差异-云技术学习-About云开发-梭伦科技

OpenStack4j - Compute / Servers

OpenStack Docs: 从硬盘启动实例

http://netapp.github.io/openstack-deploy-ops-guide/icehouse/content/section_nova-deployment-choices.html

OpenStack 存储热迁移