当前位置: 首页 > SDN工具 > 正文

libvirt+OpenvSwitch实验:将VM网卡加入OVS创建的虚拟交换机

libvirt+OpenvSwitch实验:将VM网卡加入OVS创建的虚拟交换机

1.从虚拟机映像导入创建虚拟机,使用默认的网络default(这是在安装libvirt套件时默认创建的桥接网络)。命令如下:

# virt-install --name cirros --ram 64 --vcpus 1 --disk path=/root/cirros-0.3.4-x86_64-disk.img,format=qcow2 --network network:default --accelerate --vnc --vncport=5911 --import

2.在创建虚拟机时,将虚拟机的网络加入到 OpenvSwitch 创建的虚拟交换机中,使用如下命令:

# 创建 openvswitch 虚拟交换机
root@mininet-vm:~# ovs-vsctl add-br ovs-br1 
# 创建虚拟机并将虚拟机网卡加入到 ovs-br1 中
root@mininet-vm:~# virt-install --name cirros --ram 64 --vcpus 1 --disk path=/root/cirros-0.3.4-i386-disk-ovs.img,format=qcow2 --network network:ovs-br1 --accelerate --vnc --vncport=5919 --import
ERROR    Error in network device parameters: Virtual network 'ovs-br1' does not exist: Network not found: no network with matching name 'ovs-br1'

3.上面出错的原因是,使用ovs-vsctl创建了 ovs-br1,但是 libvirt 并不知道 ovs-br1的存在,使用命令 virsh 可以看到只存在 default:

root@mininet-vm:~# virsh net-list
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     yes           yes

root@mininet-vm:~# 

也就是说需要告知libvirt,我们创建了ovs-br1,但是并没有告诉 libvirt 如何使用它,先查看一下 libvirt 默认的网络配置情况:

root@mininet-vm:/etc/libvirt/qemu/networks# pwd
/etc/libvirt/qemu/networks
root@mininet-vm:/etc/libvirt/qemu/networks# cat default.xml 
<network>
  <name>default</name>
  <bridge name="virbr0"/>
  <forward/>
  <ip address="192.168.122.1" netmask="255.255.255.0">
    <dhcp>
      <range start="192.168.122.2" end="192.168.122.254"/>
    </dhcp>
  </ip>
</network>

4.我们需要仿照这default来创建一个新的网络,将ovs-br1给包含进来,创建 ovsnet.xml,内容如下:

<network>
      <name>ovs-br1</name>
      <forward mode='bridge'/>
      <bridge name='ovs-br1'/>
      <virtualport type='openvswitch'/>
</network>

使用如下的命令在libvirt中创建网络,启动网络,设置自动启动:

root@mininet-vm:~# virsh net-define ovsnet.xml
root@mininet-vm:~# virsh net-start ovs-br1
root@mininet-vm:~# virsh net-autostart ovs-br1

(注意,上面的xml文件中定义的libvirt ovs-br1 可以随便定义,不一定要与 的名称一致,不过,最好一致,方便记忆)

5.最后,在创建虚拟机时使用刚刚创建和启动的网络:

root@mininet-vm:~# virt-install --name cirros --ram 64 --vcpus 1 --disk path=/root/cirros-0.3.4-i386-disk-ovs.img,format=qcow2 --network network:ovs-br1 --accelerate --vnc --vncport=5919 --import

Everything is OK!
Have a rest.
A cup of coffee :)

另外bloger的介绍:

1.在CentOS 6.5下安装和使用Open vSwitch + KVM.

# wget http://openvswitch.org/releases/openvswitch-1.9.3.tar.gz
#tar -zxf openvswitch-1.9.3.tar.gz
# cd openvswitch-1.9.3
# cp ../openvswitch-1.9.3.tar.gz ~/rpmbuild/SOURCES/
# cp rhel/openvswitch-kmod.files ~/rpmbuild/SOURCES/
# cp rhel/openvswitch.spec ~/rpmbuild/SPECS/
# rpmbuild  -ba ~/rpmbuild/SPECS/openvswitch.spec
# cp rhel/openvswitch-kmod-rhel6.spec ~/rpmbuild/SPECS/

# ls ~/rpmbuild/RPMS/x86_64/ |grep open
kmod-openvswitch-1.9.3-1.el6.x86_64.rpm
openvswitch-1.9.3-1.x86_64.rpm
openvswitch-debuginfo-1.9.3-1.x86_64.rpm

# rpm -ihv openvswitch-1.9.3-1.x86_64.rpm  kmod-openvswitch-1.9.3-1.el6.x86_64.rpm
Preparing...                ########################################### [100%]
   1:kmod-openvswitch       ########################################### [ 50%]
WARNING: /lib/modules/2.6.32-431.el6.x86_64/weak-updates/openvswitch/brcompat.ko needs unknown symbol ovs_dp_ioctl_hook
   2:openvswitch            ########################################### [100%]

2.使用Open vSwitch + KVM

# virsh net-destroy default
# virsh net-autostart --disable default
# service openvswitch start
/etc/openvswitch/conf.db does not exist ... (warning).
Creating empty database /etc/openvswitch/conf.db [  OK  ]
Starting ovsdb-server [  OK  ]
Configuring Open vSwitch system IDs [  OK  ]
Inserting openvswitch module [  OK  ]
Starting ovs-vswitchd [  OK  ]
Enabling gre with iptables [  OK  ]
# ovs-vsctl add-br br0

脚本1:

/etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=172.16.213.131
NETMASK=255.255.255.0
GATEWAY=172.16.213.2
HOTPLUG=no

脚本2:

/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br0
BOOTPROTO=none
HOTPLUG=no

启动网络服务使脚本生效:

# service network restart

查看网卡和网桥启动情况:

# ovs-vsctl show
1bc18f94-0b5c-44c2-afd5-ac7d370499f1
    Bridge "br0"
        Port "eth0"
            Interface "eth0"
        Port "br0"
            Interface "br0"
                type: internal
ovs_version: "1.9.3"

在KVM中使用Open Switch:

# yum install bridge-utils tunctl
# virt-install --name=centos65 --ram 512 --vcpus=1  -f /root/kvm/centos65.qcow2 --cdrom /root/CentOS-6.5-x86_64-minimal.iso --graphics vnc,listen=0.0.0.0,port=5920,  --network bridge=br0
WARNING  KVM acceleration not available, using 'qemu'

开始安装......
ERROR    Unable to add bridge br0 port vnet0: Operation not supported
Domain installation does not appear to have been successful.
If it was, you can restart your domain by running:
  virsh --connect qemu:///system start centos65
otherwise, please restart your installation.

如果不在命令行指定 bridge 为 openvswitch 类型 , libvirt 会尝试 linux 默认的bridge,而virt-install又不支持openvswitch,解决方法如下:

创建虚拟机时,干脆不加网络:

# 需要从光盘 ISO 安装操作系统
# virt-install --connect qemu:///system --name=centos65 --ram 512 --vcpus=1  -f /home/kvm/centos65.qcow2 --cdrom /home/kvm/CentOS-6.5-x86_64-minimal.iso --graphicsvnc,listen=0.0.0.0,port=5920,  --nonetworks
# 从虚拟机映像文件启动
# virt-install --name cirros --ram 64 --vcpus 1 --disk path=/root/cirros-0.3.4-i386-disk-ovs.img,format=qcow2 --nonetworks --accelerate --vnc --vncport=5919 --import

然后编辑生成的虚拟机的xml配置文件:

# virsh
virsh # edit centos65
增加
<interface type='bridge'>
 <source bridge='br0'/>
 <virtualport type='openvswitch' />
 <model type='virtio'/>
</interface>
virsh # start centos65

小小启发:可以直接创建虚拟机配置的xml文件,基于xml文件创建虚拟机,岂不是省事的多了。:)

参考

本文固定链接: http://sdnhub.cn/index.php/libvirt-openvswitch/ | 软件定义网络SDN

该日志由 sdnhub 于2015年05月24日发表在 SDN工具 分类下, 通告目前不可用,你可以至底部留下评论。
原创文章转载请注明: libvirt+OpenvSwitch实验:将VM网卡加入OVS创建的虚拟交换机 | 软件定义网络SDN
关键字:

libvirt+OpenvSwitch实验:将VM网卡加入OVS创建的虚拟交换机:等您坐沙发呢!

发表评论

*

快捷键:Ctrl+Enter