Nova创建虚拟机流程解读

一 介绍
创建一个虚拟机至少需要指定的参数有3个:虚拟机名字,镜像,Flavor。执行“nova image-list”命令可以看到目前可用的虚拟机镜像。
命令执行结果如下:
[root@localhost ~(keystone_demo)]# nova image-list
WARNING: Command image-list is deprecated and will be removed after Nova 15.0.0 is released. Use python-glanceclient or openstackclient instead
+--------------------------------------+--------+--------+--------+
| ID                                   | Name   | Status | Server |
+--------------------------------------+--------+--------+--------+
| 740a2773-9cc8-4222-8790-899df4b6d748 | cirros | ACTIVE |        |
+--------------------------------------+--------+--------+--------+
创建一个名为test的虚拟机,使用flavor类型m1.tiny的命令如下:
[root@localhost ~(keystone_demo)]# nova boot --flavor m1.tiny --image cirros test
+--------------------------------------+-----------------------------------------------+
| Property                             | Value                                         |
+--------------------------------------+-----------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                        |
| OS-EXT-AZ:availability_zone          |                                               |
| OS-EXT-STS:power_state               | 0                                             |
| OS-EXT-STS:task_state                | scheduling                                    |
| OS-EXT-STS:vm_state                  | building                                      |
| OS-SRV-USG:launched_at               | -                                             |
| OS-SRV-USG:terminated_at             | -                                             |
| accessIPv4                           |                                               |
| accessIPv6                           |                                               |
| adminPass                            | NeeWrsEoLP3Z                                  |
| config_drive                         |                                               |
| created                              | 2018-03-27T13:24:06Z                          |
| description                          | -                                             |
| flavor                               | m1.tiny (1)                                   |
| hostId                               |                                               |
| id                                   | 8c940566-5996-412b-a75f-96ccc5bf810d          |
| image                                | cirros (740a2773-9cc8-4222-8790-899df4b6d748) |
| key_name                             | -                                             |
| locked                               | False                                         |
| metadata                             | {}                                            |
| name                                 | test                                          |
| os-extended-volumes:volumes_attached | []                                            |
| progress                             | 0                                             |
| security_groups                      | default                                       |
| status                               | BUILD                                         |
| tags                                 | []                                            |
| tenant_id                            | b38c09cb0b5a4d46820c66052bb0ee94              |
| updated                              | 2018-03-27T13:24:06Z                          |
| user_id                              | 7ed4ce59626941478efb08c37cad526e              |
+--------------------------------------+-----------------------------------------------+
创建之后可以执行“nova list”查看虚拟机是否正常运行,下面是执行结果:
[root@localhost ~(keystone_demo)]# nova list
+--------------------------------------+------+---------+------------+-------------+-------------------+
| ID                                   | Name | Status  | Task State | Power State | Networks          |
+--------------------------------------+------+---------+------------+-------------+-------------------+
| 57835459-1d60-40ae-b0c7-381bcbaba738 | test | SHUTOFF | -          | Shutdown    | private=10.0.0.3  |
| 8c940566-5996-412b-a75f-96ccc5bf810d | test | ACTIVE  | -          | Running     | private=10.0.0.10 |
+--------------------------------------+------+---------+------------+-------------+-------------------+
在KVM环境下,使用Libvirt库提供的virsh命令创建一个虚拟机需要一个XML配置文件。
在Nova中创建一个虚拟机同样也需要这个XML配置文件,不同的是这个XML配置文件由Nova根据用户设定的参数自动生成。
针对packstack安装的openstack,Nova生成的配置文件都存放在/var/lib/nova/instances目录,这些配置文件很好体现了Nova在创建虚拟机时需要哪些参数信息。
[root@localhost 8c940566-5996-412b-a75f-96ccc5bf810d(keystone_demo)]# ll
total 2268
-rw-------. 1 root root   18994 Mar 27 21:24 console.log
-rw-r--r--. 1 qemu qemu 2293760 Mar 27 21:25 disk
-rw-r--r--. 1 nova nova      79 Mar 27 21:24 disk.info
8c940566-5996-412b-a75f-96ccc5bf810d表示新建虚拟机的UUID,这个目录下存放了该虚拟机的内核镜像等文件。

二 创建虚拟机过程
创建虚拟机的过程如下图
三 创建虚拟机代码调用关系
1文件 nova.api.openstack.coumpute.servers
1函数 def create(self, req, body):
1调用 (instances, resv_id) = self.compute_api.create(context,
2文件 nova.compute.api
2函数 def create(self, context, instance_type,
2调用 return self._create_instance(
3文件 nova.compute.api
3函数 def _create_instance(self, context, instance_type,
3调用 self.compute_task_api.build_instances(context,
4文件 nova.conductor.manager
4函数 def build_instances(self, context, instances, image, filter_properties,
5调用 hosts = self.scheduler_client.select_destinations(context,
6调用 self.compute_rpcapi.build_and_run_instance(context,
5文件 nova.scheduler.manager
5函数 def select_destinations(self, context, request_spec, filter_properties):
5调用 dests = self.driver.select_destinations(context, request_spec,
5文件 nova.scheduler.filter_scheduler
5函数 def select_destinations(self, context, request_spec, filter_properties):
6文件 nova.compute.api.manager
6函数 def build_and_run_instance(self, context, instance, image, request_spec,
6调用 self._do_build_and_run_instance(*args, **kwargs)
7文件 nova.compute.api.manager
7函数 def _do_build_and_run_instance(self, context, instance, image,
7调用 _build_and_run_instance

四 创建虚拟机过程解析
1 创建虚拟机等TaskAPI任务,已经由nova-conductor承担,因此nova-api监听到创建虚拟机HTTP请求后,会通过RPC调用nova.conductor.manager.ComputeTaskManager中的build_instances()方法。
2 nova-conductor会在build_instances()中生成request_spec字典,其中包括了详细的虚拟机信息,nova-scheduler依据这些信息为虚拟机选中一个最佳的主机,然后nova-conductor再通过RPC调用nova-computer创建虚拟机。
3 nova-compute首先会使用Resource Tracker的Claim机制检测一下主机的可用资源是否能够满足新建虚拟机的需要,然后通过具体的Virt Driver创建虚拟机。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值