一: 编译安装openvwitch和libvirt 源码:
1 编译安装openvswitch:
(参考: http://networkstatic.net/configuring-vxlan-and-gre-tunnels-on-openvswitch/ )
apt-get update
apt-get install -y git automake autoconf gcc uml-utilities libtool build-essential git pkg-config linux-headers-`uname -r`
wget http://openvswitch.org/releases/openvswitch-1.10.0.tar.gz
tar zxvf openvswitch-1.10.0.tar.gz
cd openvswitch-1.10.0
./boot.sh
./configure --with-linux=/lib/modules/`uname -r`/build
make && make install
make modules_install
insmod datapath/linux/openvswitch.ko
mkdir -p /usr/local/etc/openvswitch
ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
ovsdb-server -v --remote=punix:/usr/local/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,manager_options \
--private-key=db:SSL,private_key \
--certificate=db:SSL,certificate \
--pidfile --detach --log-file
ovs-vsctl --no-wait init
ovs-vswitchd --pidfile --detach
ovs-vsctl show
2 编译安装并启动libvirt
( 参考: http://blog.csdn.net/u011740215/article/details/10064527 )
二 : 配置网桥:
ovs-vsctl add-br br0
ovs-vsctl add-port br0 eth0
ifconfig eth0 0 && ifconfig br0 10.100.5.247 netmask 255.255.0.0
route add default gw 10.100.0.254 br0
(备注: 其中10.100.5.247为eth0 的ip ,255.255.0.0为原来的子网掩码。10.100.0.254为原来的网关。上述命令将eth0 设置为0,并把原来的ip 付给桥br0中的端口,: br0 .注意,当建立起一个网桥以后,就会自动在此网桥下建立起一个和桥名字一样的端口。 )
三: 安装qemu相关的内核模块和包
dpkg -l | grep qemu
ii ipxe-qemu 1.0.0+git-4.d6b0b76-0ubuntu2 all Virtual package to support use of kvm-ipxe with qemu
ii qemu-common 1.4.0+dfsg-1expubuntu4 all dummy transitional package from qemu-common to qemu-keymaps
ii qemu-keymaps 1.4.0+dfsg-1expubuntu4 all QEMU keyboard maps
ii qemu-kvm 1.4.0+dfsg-1expubuntu4 amd64 QEMU Full virtualization on x86 hardware (transitional package)
ii qemu-system-common 1.4.0+dfsg-1expubuntu4 amd64 QEMU full system emulation binaries (common files)
ii qemu-system-x86 1.4.0+dfsg-1expubuntu4 amd64 QEMU full system emulation binaries (x86)
ii qemu-utils 1.4.0+dfsg-1expubuntu4 amd64 QEMU utilities
四: 编写xml文件,并定义和启动虚拟机:
1 编写xml文档,命名为1.xml
注意其中的:
a
domain 的类型详见libvirt xml的相关解释
b
每个虚拟机的唯一标示
c
memory分配的很小,会导致接下来的安装系统过程出错。
d
e
f
系统被安装在的位置, 需要使用命令 qemu-img create -f qcow2 disk.img 5G 创建。(参考:http://wiki.centos.org/HowTos/KVM )
g
使得能够总镜像安装系统。CentOS-6.4-x86_64-minimal.iso 镜像需要在制定的目录下。
h
设置vnc连接的端口和ip. 使得能够通过VNC 连接到虚拟机。 eg: 10.100.5.247:5900.注意每个新虚拟机vnc的端口应该不同。eg;5901,5902......
i
设置网络连接方式,桥接。每个新虚拟机的mac 应该唯一。
2 定义域并启动虚拟机
virsh define 1.xml
virsh start vm21
此时便可通过vnc连接到正在安装的虚拟机,eg 10.100.5.247:5900
五:通过VNC 连接到虚拟机内部,设置虚拟机的ip 地址,建立vlan 并将虚拟机加入其中。
此时在宿主机上,通过ip addr 命令 可以查得有vnet0 存在,即刚启动的虚拟机的ip,;
在宿主机上,运行命令ovs-vsctl show 命令,可以看到
root@hwbi-HVM-domU:~/xml# ovs-vsctl show
260c025a-6a59-45f9-9f60-9700cf91f5fa
Bridge "br0"
Port "vnet0"
Interface "vnet0"
Port "eth0"
Interface "eth0"
Port "br0"
Interface "br0"
type: internal
ovs_version: "1.9.0"
表明vnet0已经在网桥br0中了。
运行命令 ovs-v=vsctl set port vnet0 tag=2 : 将vnet0 加入到tag为2 的vlan( 如果tag为2 的vnal 不存在,这条命令则首先新建tag为2的vlan)
此时宿主机上再次运行命令: ovs-vsctl show
结果如下:
260c025a-6a59-45f9-9f60-9700cf91f5fa
Bridge "br0"
Port "vnet0"
tag: 2
Interface "vnet0"
Port "eth0"
Interface "eth0"
Port "br0"
Interface "br0"
type: internal
ovs_version: "1.9.0"
至此即完成了全部工作。 按照上述的步骤可以在同一台宿主机上建立另一台虚拟机,并分到与上述机器同一个或者不同的vlan 中,进行vlan 的测试工作。
(备注: 如果通过命令ovs-vsctl del-port vnet0 删除了br0中的端口vnet0,可以直接通过命令ovs-vsctl add-port br0 vnet0 tag=2,将vnet0 加入到br0 ,并分到tag为2 的vlan 中。 注意tag 为0 的含义)
注意: 对于第五步,可以有更方便的方法,即在xml文件中直接设定vlan的tag.
修改方法: 在原来的xml文件中添加如下几行: