Openstack 从云硬盘(卷)中创建虚拟机

目录

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”参数可将一个卷设置为可启动。

1

2

$ 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)从现存的虚拟机实例构建可启动的卷

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

1

$ openstack volume create --size 20 my-volume

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

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

1

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

1

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

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

1

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

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

3.2 启动虚拟机

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

1

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。

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

1

2

3

$ 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 存储热迁移

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenStack是一个开源的云计算平台,可以用于构建和管理公共云和私有云环境。在OpenStack创建虚拟机的源码解析主要涉及以下几个方面: 1. Nova组件:Nova是OpenStack的计算模块,负责管理和调度虚拟机实例。在创建虚拟机时,首先通过Nova API接口向Nova服务发送创建虚拟机的请求。源码涉及了虚拟机规格、镜像选项、网络配置等参数的解析和处理。 2. Glance组件:Glance是OpenStack的映像服务,用于提供虚拟机镜像。在创建虚拟机时,需要从Glance选择合适的镜像作为虚拟机的基础环境。源码通过Glance API接口获取镜像的元数据信息,包括名称、版本、大小、格式等,然后根据需要将镜像下载或者复制到计算节点上。 3. Neutron组件:Neutron是OpenStack的网络服务,负责虚拟机的网络连接和管理。在创建虚拟机时,需要为虚拟机分配IP地址、配置路由和安全组等网络设置。源码通过Neutron API接口获取网络的信息,并将虚拟机的网络配置与物理网络进行关联。 4. Cinder组件:Cinder是OpenStack的块存储服务,可以为虚拟机提供持久性存储。在创建虚拟机时,可以选择并挂载Cinder作为虚拟机硬盘。源码通过Cinder API接口获取存储的信息,并将虚拟机进行关联和挂载。 通过以上的源码解析,可以了解到OpenStack创建虚拟机时,涉及了多个组件的协同工作,包括计算、映像、网络和存储等方面。在实际使用,可以根据需求和实际情况进行定制和扩展,以满足个性化的虚拟机创建需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值