本文主要是介绍深挖Openstack Nova - Compute模块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一. nova-compute是一个非常重要的守护进程,负责创建和终止虚拟机实例,即管理着虚拟机实例的生命周期,包括instance的launch、shutdown、reboot、suspend、resume、terminate、resize、migration、snapshot等。
二. 例如对于创建虚拟机请求,nova-api接收到客户端请求后,经过nova-scheduler调度器调度,再将请求通过rpc机制发送给某个选定的nova-compute节点,nova-compute模块经过一系列的动作之后将命令下发到真正的hypervisor进行虚拟机的创建。
三. nova-compute与Hypervisor一起实现OpenStack对instance生命周期的管理。Nova-compute为这些Hypervisor定义了统一的接口,Hypervisor只需要实现这些接口,就可以以Driver的形式即插即用到OpenStack系统中。OpenStack自带了Hyper-V、LibVirt、VMWare、Xen
四. 目录结构解析(待完善)
(1)/nova/compute/api.py:提供与实例相关的api功能
(2)/nova/compute/rpcapi.py:提供rpc调用的关于实例的api功能,相当于rpc中的client
(3)/nova/compute/manager.py:与rpcapi.py相对应,处理接收到的rpc调用请求,相当于rpc中的server
五. 代码分析 - 创建快照
@wrap_check_policy
@check_instance_cell
@check_instance_state(vm_states=[vm_state.ACTIVE, vm_states.STOPPED,
vm_states.PAUSED, vm_states.SUSPENDED])
def snapshot(self, context, instance, name, extra_properties=None)
对应在/nova/compute/api.py
1. 获取image元数据
# 获取image元数据,为了之后将snapshot上传为镜像做准备
# 虽然镜像和snapshot都可以上传到glance作为镜像启动虚拟机,但还是区分两者不同
# glance将其标记为不同类型:image、snapshot
image_meta = self._create_image(context, instance, name,
'snapshot',
extra_properties=extra_properties)
2. 设置任务状态
# 设置任务状态为IMAGE_SNAPSHOT_PENDING
instance.task_state = task_states.IMAGE_SNAPSHOT_PENDING
instance.save(expected_task_state=[None])
3. 通过RPC调用snapshot_instance函数
# 通过rpc调用/nova/compute/rpcapi.py的snapshot_instance函数
self.compute_rpcapi.snapshot_instance(context, instance,
image_meta['id'])
这篇关于深挖Openstack Nova - Compute模块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!