虚拟机创建流程中neutron代码分析(一)

前言:

在openstack的学习当中有一说法就是网络占学习时间的百分之七十。这个说法或许有夸大的成分,但不可否认的是openstack中的

网络是及其重要的部分,并且难度也是相当大。试图通过nova创建虚拟机过程中nova和neutron服务交互的过程来学习openstack网络。

写个学习笔记,整理思路。

 

版本信息:

openstack版本:Newton

linux系统:ubuntu1604-server

 

简要流程:

nova在创建虚拟机时会向neutron请求ip和mac地址等port信息。 大概的代码流程如下图所示。

 

 

 详细分析:

 

 _build_and_run_instance():

作用:

nova创建虚拟机与底层libvirt交互的函数。在该函数中请求了各种资源,如镜像,网络,磁盘等。

通过调用_build_resources()函数整体来获得资源的请求。

 

 _build_resources()

作用:

调用_build_networks_for_instance()函数获取port信息。

调用_default_block_device_names()函数获取块设备信息。

获取网络是重点分析的对象。

 

 _build_networks_for_instance()

作用:

判断传入主机信息是否已经分配过ip和mac,如果已经分配过ip和mac就调用get_instance_new_info()函数更新网卡信息。

如果port还没有被分配ip,mac等,则调用_allocate_network()函数获取信息。

 

 _allocate_network()

作用:

1 修改vm的状态为创建中,修改任务状态为网络中

2 采用异步的方式起一个线程去执行_allocate_network_async()函数

 

_allocate_network_async()

作用:

在一个循环中多次尝试调用_allocate_for_instance()函数去获取网络。

 

allocate_for_instance()

作用:

初始化一个http连接的对象:neutron = get_client(),通过该对象能够从nova服务端发送restful请求到neutron服务端。

调用_create_ports_for_instance()函数去创建port信息。

 

补充:

port信息是指一些列网络元素的集合,实际指的是数据库中的一张表。

其中可以看到有项目id,uuid,名称,网络id等其中我们最关心的是 mac_address 和ip_allocation,不用讲太多,这肯定是mac地址和ip地址。

 

 

 

_create_ports_for_instance()

作用:

判断了安全组是否启用,并判断安全组是否配置,如果没有则配置默认的安全组。

调用_create_port_minimal()函数

 

_create_port_minimal()

作用:

判断主机启动时是否制定了ip地址,如果制定了ip地址则将该ip地址填充进变量port_req_body中,调用port.client的方法

以restful的请求方式去neutron请求port中各变量信息。

到这里为止,nova端的网络请求就到一段落,请求会发送到neutron-server中,neutron会处理接下来的过程。

 

关于neutron-server中网络部分的处理,见下一篇笔记。

 

 

参考:http://blog.csdn.net/gj19890923/article/details/51284296

 


__EOF__

本文作者goldsunshine
本文链接https://www.cnblogs.com/goldsunshine/p/7941970.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   金色旭光  阅读(2906)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示