0


Neutron — 虚拟机网卡创建过程

目录

文章目录

创建并绑定虚拟机的虚拟网卡

在 OpenStack 中,Nova 负责虚拟机的生命周期管理,Neutron 负责虚拟网络的生命周期管理。而虚拟机的虚拟网卡作为连接虚拟机和虚拟网络的桥梁,其生命周期管理(创建并绑定 / 解绑定并删除虚拟机的虚拟网卡)由 Nova 和 Neutron 协同完成。

1、创建 VM 和 Port 记录

调用 API 创建一个 VM 时,nova-compute 会调用 neutron-server API 同步创建一个 Port 并绑定到 VM 所在的 Compute Node 中:

  1. 调用 Neutron Server API 创建 Port(nova.network.neutronv2.api.API.allocate_for_instance),此时 Neutron Server 验证 API 请求参数并创建一条 Port 的 DB 记录。 实际上还没有创建 Port 的实体。
  2. 根据 Nova 提供的信息,调用 Neutron Server API 更新 Port 信息(nova.network.neutronv2.api.API._update_ports_for_instance),包括:1. device_id:VM_UUID2. device_owner:compute: AZ_NAME3. dns_name:VM_HOSTNAME4. binding:host_id:COMPUTE_NODE_ID5. binding:profile:额外的 Port 信息。
  3. Neutron Server 更新 Port 的 DB 记录后,调用 ML2 的 Mechanism Manger 的 Port Binding(neutron.plugins.ml2.plugin.Ml2Plugin.update_port),确定 Port 和 Compute Node 及其之上的 OvS Agent 的关系,并更新 Port 的 vif_type 和 vif_details 信息。此时依旧没有创建 Port 的实体。1. neutron.plugins.ml2.plugin.Ml2Plugin._bind_port2. neutron.plugins.ml2.manager.MechanismManager._bind_port_level3. neutron.plugins.ml2.drivers.mech_agent.AgentMechanismDriverBase.bind_port4. neutron.plugins.ml2.drivers.mech_agent.SimpleAgentMechanismDriverBase.try_to_bind_segment_for_agent5. neutron.plugins.ml2.drivers.openvswitch.mech_driver.mech_openvswitch.OpenvswitchMechanismDriver.init

在这里插入图片描述

2、创建 VM 和 Port 实体

Port 实体实际上是由 nova-compute 来完成创建的。在上述的步骤 1 中填充完毕 Port 的 DB 记录信息之后,nova-compute 就会获取到这些信息(从 Neutron Server Update Port API 返回),并在指定的 Compute Node 上创建 Port 的实体。

启用 VM 实例(nova.compute.manager.ComputeManager._build_and_run_instance):

  1. nova.virt.libvirt.driver.LibvirtDriver.spawn 启动 VM 实例;
  2. nova.virt.libvirt.driver.LibvirtDriver.plug_vifs 调用 os-vif 库,创建 Port 实体(一张 Vtap 虚拟网卡)并接入到 OvS Bridge 上。

但是,此时 Port 的 states 还是 Down 的。

在这里插入图片描述

3、更新 Port 状态

在 nova-compute 创建了 Port 的实体之后,neutron-server 就要开始 “接管” 这张虚拟网卡了(更新其 DB 信息)。

  1. Neutron OvS Agent 监听 OvS Bridge 的状态(neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent.OVSNeutronAgent.rpc_loop);
  2. Neutron OvS Agent 监听到虚拟网卡的接入时间(neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent.OVSNeutronAgent.treat_devices_added_or_updated);
  3. Neutron OvS Agent 上报 Port 状态到 Neutron Server(neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent.OVSNeutronAgent._bind_devices);
  4. Neutron Server 更新 Port 的 states 为 Active。

由于 nova-compute 在创建虚拟网卡时,已经将 Neutron Port ID(iface-id)等信息写入到 OvS port/interface 中了,因此 Neutron Server 可以识别到具体的 Port 记录。

在这里插入图片描述

标签: 网络

本文转载自: https://blog.csdn.net/Jmilk/article/details/130953055
版权归原作者 范桂飓 所有, 如有侵权,请联系我们删除。

“Neutron — 虚拟机网卡创建过程”的评论:

还没有评论