部署一个实例的过程

部署一个instance(虚拟机)的过程由nova-compute来实现,当nova-scheduler选定了部署instance的计算节点之后,会通过消息中间件MQ向选定的计算节点发出launch instance的命令,计算节点上运行的nova-compute收到消息后会执行instance创建操作。
查看日志使用下面命令:(新版的devstack使用journalctl)

# journalctl  --unit devstack@n-cpu.service | grep INFO

nova中的tests目录 nova instance-action-list_xml

在界面上可以看到创建的实例的详细信息:

nova中的tests目录 nova instance-action-list_XML_02

创建instance的过程分为4步:

  1. 为instance准备资源
    nova-compute 首先会根据指定的 flavor 依次为 instance 分配内存、磁盘空间和 vCPU。可以从第一张图中看到详细的日志细节。
  2. 创建instance的镜像文件
    资源准备好之后,nova-compute 会为 instance 创建镜像文件。OpenStack 启动一个 instance 时,会选择一个 image,这个 image 由 Glance 管理。
    nova-compute会:首先将该 image 下载到计算节点 ,然后将其作为 backing file 创建 instance 的镜像文件。

从 Glance 下载 image
nova-compute 首先会检查 image 是否已经下载(比如之前已经创建过基于相同 image 的 instance)。如果没有,就从 Glance 下载 image 到本地。
由此可知,如果计算节点上要运行多个相同 image 的 instance,只会在启动第一个 instance 的时候从 Glance 下载 image,后面的 instance 启动速度就大大加快了。


可以在 /opt/stack/data/nova/instances/ 目录下看到镜像的信息,然后可以定位到新建实例的镜像的disk

nova中的tests目录 nova instance-action-list_nova中的tests目录_03

这里有两个容易搞混淆的术语,在此特别说明一下:
(1)image,指的是 Glance 上保存的镜像,作为 instance 运行的模板。 计算节点将下载的 image 存放在 /opt/stack/data/nova/instances/_base 目录下。
(2)镜像文件,指的是 instance 启动盘所对应的文件
(3)二者的关系是:image 是镜像文件 的 backing file。image 不会变,而镜像文件会发生变化。比如安装新的软件后,镜像文件会变大。

  1. 创建instance的XML定义文件
    创建的 XML 文件会保存到该 instance 目录 /opt/stack/data/nova/instances/f1e22596-6844-4d7a-84a3-e41e6d7618ef,命名为 libvirt.xml
  2. 创建虚拟网络并启动虚拟机
    本环境用的是 linux-bridge 实现的虚拟网络。

nova中的tests目录 nova instance-action-list_xml_04


至此,instance 已经成功启动。

OpenStack 图形界面和 KVM CLI 都可以查看到 instance 的运行状态。

nova中的tests目录 nova instance-action-list_xml_05

本文按照《每天5分钟玩转openstack》一书进行操作。