create instance 生成创建虚拟机从nova到调用libvirt的流程是怎样的

发布时间:2021-12-04 09:12:28 作者:柒染
来源:亿速云 阅读:159
# Create Instance:生成创建虚拟机从Nova到调用Libvirt的流程是怎样的

在OpenStack中,虚拟机的创建是一个涉及多个组件的复杂过程。本文将以Nova计算服务为核心,详细分析从API请求到最终通过Libvirt创建虚拟机的完整流程。

## 1. 请求入口:Nova API

```python
# 用户通过以下方式发起请求
nova boot --image <image_id> --flavor <flavor_id> <instance_name>
  1. 请求首先到达nova-api服务
  2. API层进行身份验证(Keystone)和参数校验
  3. 生成初始虚拟机数据库记录(instances表)

2. Nova-Conductor阶段

# nova/conductor/manager.py
def build_instances(self, context, instances, image, filter_properties):
    # 调度准备工作
    ...
  1. 请求转发到nova-conductor
  2. 执行镜像下载准备(Glance交互)
  3. 生成调度请求(包含主机过滤条件)

3. 调度决策:Nova-Scheduler

# nova/scheduler/filter_scheduler.py
def select_destinations(self, context, spec_obj):
    # 选择目标计算节点
    ...
  1. 根据权重和过滤器(RAM/CPU/可用域等)选择计算节点
  2. 常见调度过滤器:
    • ComputeFilter:基础资源校验
    • ImagePropertiesFilter:镜像特性匹配
    • AvailabilityZoneFilter:可用区过滤

4. 计算节点处理:Nova-Compute

# nova/compute/manager.py
def build_and_run_instance(self, context, instance, image):
    # 虚拟机创建主逻辑
    ...
  1. 接收创建请求后执行预处理:

    • 网络配置(Neutron交互)
    • 存储分配(Cinder交互)
    • 安全组规则配置
  2. 生成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>
    

5. Libvirt交互层

# nova/virt/libvirt/driver.py
def _create_domain(self, xml, instance):
    conn = self._get_connection()
    conn.createXML(xml, flags=0)  # 关键调用
  1. 通过Libvirt Python绑定调用底层API

  2. 主要操作步骤:

    • virConnect建立连接
    • virDomainCreateXML创建域
    • virDomainSetAutostart设置自启动
  3. 最终由QEMU/KVM实际启动虚拟机进程

6. 状态同步与回调

  1. Nova更新虚拟机状态为ACTIVE
  2. 通过事件通知机制(Notification)上报状态变更
  3. 记录审计日志(Ceilometer/Monasca)

流程图概览

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完成了从用户请求到实际虚拟机创建的完整生命周期管理。整个过程涉及多个服务的协同工作,体现了云计算平台分层解耦的设计思想。 “`

推荐阅读:
  1. openstack create vm步骤
  2. MySQL5.6 CREATE TABLE源码分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

nova libvirt

上一篇:ADO.NET程序相关项目怎么建立

下一篇:网页里段落的html标签是哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》