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种组合任一一种来创建虚拟机,如果批量创建几百台虚拟机,因为有镜像的下载、上传或者拷贝流程,整个创建流程会非常耗时