nova与neutron交互

本文详细解析了Nova如何与Neutron交互来处理虚拟机网络,包括创建和修改虚拟机网络的命令,Nova服务的角色,以及虚机创建、删除流程中的网络操作。在创建虚机时,Nova通过update_port更新Neutron端口信息,同时涉及到了网络资源的分配、虚机端口的绑定和状态更新等关键步骤。此外,文章还探讨了虚机端口恢复脚本和常见问题解答。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1     nova命令

先介绍一下nova命令中与网络相关的一些参数。

 

1.1   指定网络启动虚机

usage: nova boot [--flavor <flavor>] [--image <image>]

                 [--image-with <key=value>] [--boot-volume <volume_id>]

                 [--snapshot <snapshot_id>] [--min-count <number>]

                 [--max-count <number>] [--meta <key=value>]

                 [--file <dst-path=src-path>] [--key-name <key-name>]

                 [--user-data <user-data>]

                 [--availability-zone <availability-zone>]

                 [--security-groups <security-groups>]

                 [--block-device-mapping <dev-name=mapping>]

                 [--block-device key1=value1[,key2=value2...]]

                 [--swap <swap_size>]

                 [--ephemeral size=<size>[,format=<format>]]

                 [--hint <key=value>]

                 [--nic <net-id=net-uuid,v4-fixed-ip=ip-addr,v6-fixed-ip=ip-addr,port-id=port-uuid>]

                 [--config-drive <value>] [--poll]

                 <name>

 

其中,v4/6-fixed-ip不能单独配置,必须和net-id一起配置;在一个--nic中net-id与port-id只能选择一个。

 

命令示例:

根据Port-ID启动虚机:

# neutron port-create  accd72eb-2cd0-4961-ad67-d028c92e5254  --fixed-ip ip_address=1.2.3.20

# nova boot --flavor 100 --image 18f8b6e1-a957-4d94-a3dd-eca757afdeb9  \

  --nic port-id=10e7e093-156e-402b-9a45-ff8ab13dfb03 test_vm_1

 

启动虚机时指定网络,指定IP:

# nova boot --flavor 100 --image 18f8b6e1-a957-4d94-a3dd-eca757afdeb9 \

  --nic net-id=accd72eb-2cd0-4961-ad67-d028c92e5254,v4-fixed-ip=1.2.3.10 test_vm_2

 

创建多网络虚机:

# nova boot --flavor 100 --image 18f8b6e1-a957-4d94-a3dd-eca757afdeb9 \

  --nic net-id=accd72eb-2cd0-4961-ad67-d028c92e5254 \

  --nic net-id= 2125e96e-d2a3-42b3-931f-5a90149d0f90 test_vm_3

 

 

1.2   修改虚机网络

nova支持对于active的虚机添加或删除网卡,对应命令如下:

 

interface-attach            Attach a network interface to a server.

interface-detach            Detach a network interface from a server.

interface-list              List interfaces attached to a server.

 

用法:

nova interface-attach [--port-id <port_id>] [--net-id <net_id>]

                             [--fixed-ip <fixed_ip>]

                             <server>

nova interface-detach <server> <port_id>

 

命令示例:

 

绑定一个端口、网络或者IP地址到虚机:

nova interface-attach 06fd79d1-99a8-451d-955c-f466b8986f34 --port-id c310babc-c833-4b10-9d76-78d60a58af98

将port-id从虚机解绑:

nova interface-detach 8dd2fb5d-30a9-45c7-8931-ba039adcd20f  5138a9ce-7114-4126-82e8-8685a6aeccee

 

查看虚机对应的Port端口:

[root@node-82 ~]# nova interface-list   f09c0b84-8e5a-4a3d-8da9-7d57d105e0e3

+------------+--------------------------------------+--------------------------------------+--------------+-------------------+

| Port State | Port ID                              | Net ID                               | IP addresses | MAC Addr          |

+------------+--------------------------------------+--------------------------------------+--------------+-------------------+

| ACTIVE     | 182b1ed7-beab-46cd-84b1-1daf72f4e266 | accd72eb-2cd0-4961-ad67-d028c92e5254 | 1.2.3.12     | fa:16:3e:3f:3a:91 |

| ACTIVE     | 51b10239-005d-4d20-8d03-269bc85bacc6 | 2125e96e-d2a3-42b3-931f-5a90149d0f90 | 1.1.1.32     | fa:16:3e:d5:6c:5a |

+------------+--------------------------------------+--------------------------------------+--------------+-------------------+

2     nova介绍

2.1   Nova服务

nova主要服务包括:

nova-api:对外提供rest-api。

nova-conductor:用于分发消息。

nova-scheduler:在创建虚机时,选择计算节点。

nova-compute:在计算节点上运行,负责管理虚机的生命周期。

 

3     处理流程

3.1   创建虚机流程


用户创建虚机的命令到达nova-api后,通过rpc发给nova-conductor处理。conductor中,先通过nova-scheduler选择虚机调度到的主机,然后发送到对应主机的nova-compute上进行处理。

 

如下是nova-compute处理虚机创建的详细流程。

 

与网络相关的部分,简要地可以分为几部:

1)  创建网络资源,此时更新neutron port,或者创建neutron port,返回VIF列表

2)  libvirt spawn,根据VIF列表,配置虚机底层网络,然后起虚机进程,并等待虚机启动完成。

3)  ovs-agent捕获到虚机网卡添加到br-int中,发送rpc给plugin更新neutron db port状态为up。

4)  neutron db检测到端口up,发送network-vif-plug event通知nova端口。

 

l  日志分析

创建虚机,通过查看nova-computedebug日志,可以大致了解虚机启动过程。

allocate_for_instance /usr/lib/python2.7/site-packages/nova/network/neutronv2/api.py

GET http://controller:9696/v2.0/networks.json?id=2

GET http://controller:9696/v2.0/security-groups.json?tenant_id=

 POST http://controller:9696/v2.0/ports.json

'{"port": {"binding:host_id": "compute1", "admin_state_up": true, "network_id": "2337cce4-512c-4b36-a5a7-6af99bfe21d2", "tenant_id": "47227b9865f64869aee959af81caf8dd", "device_owner": "compute:nova", "security_groups": ["17be47bc-1629-4266-812f-a0750975f89f"], "device_id": "74f3bd67-4362-477d-b700-c10866dea8a6"}}'

 GET http://controller:9696/v2.0/ports.json?tenant_id=47227b9865f64869aee959af81caf8dd&device_id=74f3bd67-4362-477d-b700-c10866dea8a6

GET http://controller:9696/v2.0/floatingips.json?fixed_ip_address=1.1.1.4&port_id=2cbc7875-b460-4c59-b87f-078e1ff1d5b6

GET http://controller:9696/v2.0/subnets.json?id=dd0ea246-b2f8-498e-adce-c59eec7f8d91

GET http://controller:9696/v2.0/ports.json?network_id=2337cce4-512c-4b36-a5a7-6af99bfe21d2&device_owner=network%3Adhcp

sudo nova-rootwrap /etc/nova/rootwrap.conf brctl addbr qbr2cbc7875-b4

sudo nova-rootwrap /etc/nova/rootwrap.conf brctl setfd qbr2cbc7875-b4 0

sudo nova-rootwrap /etc/nova/rootwrap.conf brctl stp qbr2cbc7875-b4 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值