OpenStack Nova秒级创建虚拟机方案

本文探讨了OpenStack Nova在不同存储和启动方式下创建虚拟机的组合,指出镜像启动和卷启动的四种模式均涉及镜像下载、上传或拷贝,耗时较长。为了实现秒级创建,建议将Glance、Cinder和Nova后端统一为Ceph,并详细介绍了优化步骤,包括修改Glance配置、转换镜像格式、清理缓存镜像等,以实现基于Ceph的写时复制(copy on write)技术,大幅提高创建速度。

OpenStack管理虚拟机生命周期的组件是Nova,Nova创建虚拟机从后端存储类型分为本地LVM存储和远程分布式存储(例如:Ceph/SheepDog/GlusterFS),从启动方式一般分为镜像启动和卷启动两大类,按启动方式和存储后端可以有4种组合:

组合1本地LVM + 镜像启动

此种方式,虚拟机镜像事先一般也会存放在远端的分布式存储上(Ceph或Swift)。当在计算节点首次创建虚拟机时,会从远端分布式存储下载镜像到计算节点做格式转换并缓存为base-image,然后复制完整的镜像到/var/lib/nova/instances/{instance-uuid}目录下作为系统盘,耗时跟镜像大小和带宽有关,一般约数分数以上。

如果在相同的计算节点上第二次以相同的镜像创建虚拟机,因为已经有了镜像缓存,不需要再到远端分布式存储下载镜像,直接从本地计算节点拷贝镜像到虚拟机启动目录作为系统盘,耗时跟镜像大小有关,一般也得数分钟以上。

组合2:本地LVM + 卷启动

此种方式,虚拟机镜像事先一般也会存放在远端的分布式存储上(Ceph或Swift)。当在计算节点首次创建虚拟机时,会从远端分布式存储下载镜像到计算节点做格式转换并缓存为base-image,然后调用cinder在控制节点以base-image创建可bootable的卷,最后以该卷启动虚拟机。耗时跟镜像大小和带宽有关,一般也得数分钟以上。

如果在相同的计算节点上第二次以相同的镜像从卷启动创建虚拟机,因为已经有了镜像缓存,不需要再到远端分布式存储下载镜像,直接调用cinder在控制节点以base-image创建可bootable的卷,最后以该卷启动虚拟机。耗时跟镜像大小和带宽有关,一般也得数分钟以上。

组合3:远程分布式存储Ceph + 镜像启动(采用默认配置)

此种方式,虚拟机镜像事先一般也会存放在远端的分布式存储Ceph上。当在计算节点首次创建虚拟机时,首先会从远程Ceph上下载镜像到该计算节点做格式转换并缓存为base-image,然后上传base-image到远程Ceph Rbd 的pool中作为系统盘,最后以CephRbd pool中的系统盘启动虚拟机。耗时跟镜像大小和带宽有关,一般也得数分钟以上。

在相同的计算节点上第二次以相同的镜像创建虚拟机,因为已经有了镜像缓存,不需要再到远端Ceph下载镜像,直接上传base-image到远程Ceph Rbd 的pool中作为系统盘,最后以CephRbd pool中的系统盘启动虚拟机。耗时跟镜像大小和带宽有关,一般也得数分钟以上。

组合4:远程分布式存储Ceph + 卷启动(采用默认配置)

此种方式,虚拟机镜像事先一般也会存放在远端的分布式存储Ceph上。当在计算节点首次创建虚拟机时,首先会从远程Ceph上下载镜像到该计算节点做格式转换并缓存为base-image,然后调用cinder通过base-image在远程Ceph Rbd 的pool中创建可bootable的启动卷,最后以Ceph Rbd pool中的卷启动虚拟机。耗时跟镜像大小和带宽有关,一般也得数分钟以上。

在相同的计算节点上第二次以相同的镜像以卷启动创建虚拟机,因为已经有了镜像缓存,不需要再到远端Ceph下载镜像,直接调用cinder通过base-image在远程Ceph Rbd 的pool中创建可bootable的启动卷,最后以Ceph Rbd pool中的卷启动虚拟机。耗时跟镜像大小和带宽有关,一般也得数分钟以上。

秒级创建虚拟机优化方案

在优化之前,如果按照上述4种组合任一一种来创建虚拟机,如果批量创建几百台虚拟机,因为有镜像的下载、上传或者拷贝流程,整个创建流程会非常耗时,有些会因为接口超时导致失败。

为了达到秒级创建虚拟机的性能,Glance、Cinder和Nova的后端存储统一以Ceph作为共享存储。Glance上传的虚拟机镜像会上传到Ceph images pool中,Cinder创建的卷会保存在Ceph volumes pool中,Nova系统盘保存在Cephinstances pool中。

如果是以镜像启动创建虚拟机,在同一个计算节点选择相同的镜像不论是第一次还是第二次创建虚拟机,会直接基于ceph images pool的镜像先做snapshot,然后基于该snapshot 进行clone(copy on write)到Cephinstances pool,最后以该系统盘启动虚拟机。利用ceph写时复制特性,不存在镜像的上传、下载和完整拷贝,所以创建速度非常快,可以达到秒级。

如果是以卷启动创建虚拟机,在同一个计算节点选择相同的镜像不论是第一次还是第二次创建虚拟机,会直接基于ceph images pool的镜像先做snapshot,然后调用cinder基于该snapshot 进行clone(copy on write)到Ceph volumes pool,最后以该卷启动虚拟机。利用ceph写时复制特性,不存在镜像的上传、下载和完整拷贝,所以创建速度非常快,可以达到秒级。

 

秒级创建虚拟机的优化步骤如下:

1.在controller控制节点上修改/etc/glance/glance-api.conf镜像配置文件,把show_image_direct_url 参数设置为True。

vim /etc/glance/glance-api.conf

注意:一定要在【DEFAULT】下添加。

然后利用命令serviceopenstack-glance-api restart重启镜像管理服务。

2. 转换镜像格式,通过glance上传的镜像一定要是raw格式。

在上传之前需要命令转换好后上传,转换命令:

qemu-img convert -O raw src-img.qcow2dst-img.raw

用命令行转换成raw格式,主要是解决如下no bootable device问题。

 

3.在计算节点上进入 /var/lib/nova/instances/_base/ 目录,清空该目录下所有的缓存镜像。由于后台程序会先检测该目录下有没有缓存镜像,如果有,会把该缓存镜像上传到ceph中,如果没有,直接在ceph中clone镜像。

步骤如下:

[root@openstack _base]# cd/var/lib/nova/instances/_base/

[root@openstack _base]# ll

-rw-r--r--. 1 qemu qemu 41126400 Jul 24 01:01d7fca384a7c355afa3b70667b60f04dd08cd6f35

[root@openstack _base]# rm -rfd7fca384a7c355afa3b70667b60f04dd08cd6f35

[root@openstack _base]# ll

total 0

 

4.相关的流程源码如下:

 

[root@openstack ~]# vim /usr/lib/python2.7/site-packages/nova/virt/libvirt/imagebackend.py

[root@openstack ~]# vim /usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py

[root@openstack ~]# vim/usr/lib/python2.7/site-packages/glance/api/v2/images.py

 

总结

上述介绍的不同种类的创建虚拟机的组合方式,从核心原理分析其实只有两类。一种是需要完整拷贝镜像,另一种是写时复制(copy on write)。

1. 完整拷贝镜像创建虚拟机

优点:是每个虚拟机独立,不会相互影响。

缺点:存在镜像下载、上传或者拷贝,创建速度慢。

2. 写时复制(copyon write)

优点:每次创建虚拟机都只有很小的增量文件,不存在全量镜像拷贝,创建速度很快。

缺点:以相同的镜像创建的所有虚拟机依赖共同的base-image,如果base-image意外损坏或删除,上层依赖的虚拟机都会受到影响。

速度和安全性往往是一对矛盾体,两种方式需要做一定的权衡。可以在完整拷贝镜像创建虚拟机的方案中提升硬件性能,比如通过高配的磁盘和带宽来降低拷贝镜像的时间。也可以在写时复制(copy on write)的方案中,在虚拟机创建成功后的某个恰当时刻,通过后台执行ceph 的rbd flatten命令断开base-image和增量clone虚拟磁盘的依赖链,达到每个虚拟机相互独立。

 

文章来源:https://www.tyun.cn/new-d.html?id=510

 

了解新钛云服

招聘:高级运维工程师

新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

新钛云服一周年,完成两轮融资,服务五十多家客户

上海某仓储物流电子商务公司混合云解决方案

新钛云服出品的部分精品技术干货

国内主流公有云VPC使用对比及总结

万字长文:云架构设计原则|附PDF下载

刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!

Ceph OSD故障排除|万字经验总结

七个用于Docker和Kubernetes防护的安全工具

运维人的终身成长,从清单管理开始|万字长文!

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?

### OpenStack Horizon 创建实例失败解决方案 当遇到OpenStack Horizon创建虚拟机失败的情况时,可能涉及多个方面的原因。以下是详细的排查和解决方法: #### 1. 检查日志文件 查看Horizon的日志文件可以帮助定位具体错误原因。通常情况下,这些日志位于`/var/log/horizon/`目录下。通过分析日志中的错误信息,可以初步判断问题所在。 ```bash tail -f /var/log/horizon/*.log ``` 如果发现具体的Python异常或API调用失败的信息,则可以根据该提示进一步调查[^1]。 #### 2. 验证Nova服务状态 确保计算节点上的Nova服务正常运行。使用命令行工具检查Nova的服务状态和服务列表,确认所有必要的服务都处于活动状态。 ```bash openstack compute service list nova-status upgrade check ``` 任何不正常的 Nova 组件都需要被修复以保证实例能成功启动。 #### 3. 资源可用性验证 确认有足够的资源来支持新的虚拟机实例。这包括但不限于CPU、内存以及磁盘空间等物理资源;同时也需注意配额设置是否合理,防止因超出限额而导致无法创建新实例。 ```bash openstack quota show <project_id> ``` 对于存储部分,还需单独检验 Cinder 和 Swift 的健康状况及其配置参数,特别是卷类型的定义是否正确无误。 #### 4. 网络连接测试 网络问题是造成实例部署失败的一个常见因素。应仔细审查 Neutron 中关于子网划分、路由表设定等方面的内容,并尝试ping通目标地址来进行连通性的基本检测。 ```bash neutron net-list neutron subnet-show <subnet-id> ping <target-ip-address> ``` 另外,在多租户环境下还要留意安全组规则的应用情况,避免不必要的访问限制影响到实际业务运作。 #### 5. Glance镜像校验 最后一步是对所使用的镜像进行完整性校验。有时即使前面几步都没有发现问题,但如果选用的镜像是损坏或者是版本过旧的话也会引起创建过程中的各种意外情形发生。 ```bash glance image-show <image-id> ``` 建议定期更新并维护好自己的私有仓库内的基础镜像库,从而减少此类风险的发生概率。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值