您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Create Instance:生成创建虚拟机从Nova到调用Libvirt的流程是怎样的
在OpenStack中,虚拟机的创建是一个涉及多个组件的复杂过程。本文将以Nova计算服务为核心,详细分析从API请求到最终通过Libvirt创建虚拟机的完整流程。
## 1. 请求入口:Nova API
```python
# 用户通过以下方式发起请求
nova boot --image <image_id> --flavor <flavor_id> <instance_name>
nova-api
服务instances
表)# nova/conductor/manager.py
def build_instances(self, context, instances, image, filter_properties):
# 调度准备工作
...
nova-conductor
# nova/scheduler/filter_scheduler.py
def select_destinations(self, context, spec_obj):
# 选择目标计算节点
...
ComputeFilter
:基础资源校验ImagePropertiesFilter
:镜像特性匹配AvailabilityZoneFilter
:可用区过滤# nova/compute/manager.py
def build_and_run_instance(self, context, instance, image):
# 虚拟机创建主逻辑
...
接收创建请求后执行预处理:
生成Libvirt域XML:
<!-- 示例片段 -->
<domain type='kvm'>
<name>instance-00000001</name>
<memory unit='KiB'>1048576</memory>
<vcpu>2</vcpu>
<devices>
<disk type='file' device='disk'>
<source file='/var/lib/nova/instances/.../disk'/>
</disk>
</devices>
</domain>
# nova/virt/libvirt/driver.py
def _create_domain(self, xml, instance):
conn = self._get_connection()
conn.createXML(xml, flags=0) # 关键调用
通过Libvirt Python绑定调用底层API
主要操作步骤:
virConnect
建立连接virDomainCreateXML
创建域virDomainSetAutostart
设置自启动最终由QEMU/KVM实际启动虚拟机进程
ACTIVE
graph TD
A[API请求] --> B[Nova-API]
B --> C[Nova-Conductor]
C --> D[Nova-Scheduler]
D --> E[Nova-Compute]
E --> F[Libvirt]
F --> G[QEMU/KVM]
通过以上流程,OpenStack完成了从用户请求到实际虚拟机创建的完整生命周期管理。整个过程涉及多个服务的协同工作,体现了云计算平台分层解耦的设计思想。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。