如何在 Ubuntu 或 Debian 上安装和配置 KVM 和 Open vSwitch
在当今的多租户数据中心中,虚拟化的概念正在从管理程序驱动的服务器虚拟化扩展到网络虚拟化。在此环境中,基于软件的虚拟交换机与虚拟机管理程序一起安装在服务器上,桥接不同虚拟机 (VM) 之间的流量。
在本教程中,我将演示如何在 Ubuntu 或 Debian 上安装和配置 KVM 和 Open vSwitch (OVS)。 KVM 和 Open vSwitch (OVS) 分别是当今数据中心中最流行的开源管理程序和虚拟交换机。与仅限于基于MAC的二层转发的简单桥接网络相比,OVS允许为虚拟机定义高度定制的转发和过滤策略。
在 Ubuntu 或 Debian 上安装 Open vSwitch
虽然 OVS 在 Ubuntu 或 Debian 上作为软件包提供,但在这里我将从源代码构建它,它将具有最新的功能和错误修复。
首先,安装构建 OVS 的依赖项。
$ sudo apt-get install build-essential libssl-dev linux-headers-$(uname -r)
如下从源代码构建 OVS。以下步骤将构建 OVS 用户空间工具及其内核模块。
$ wget http://openvswitch.org/releases/openvswitch-1.9.3.tar.gz
$ tar xvfvz openvswitch-1.9.3.tar.gz
$ cd openvswitch-1.9.3
$ ./configure --with-linux=/lib/modules/`uname -r`/build
$ make
继续并在 /usr/local/share/
下安装 OVS 用户空间组件
$ sudo make install
下一步是测试 OVS 内核模块(在安装之前)。为此,首先将内核模块加载到内核中。
$ sudo insmod ./datapath/linux/openvswitch.ko
验证OVS内核模块是否加载成功。
$ lsmod | grep openvswitch
openvswitch 97934 0
一旦验证 openvswitch.ko
已成功加载到内核中,请继续安装内核模块,如下所示。
$ sudo make modules_install
配置并启动 Open vSwitch
创建骨架 OVS 配置数据库。
$ sudo mkdir /etc/openvswitch
$ sudo ovsdb-tool create /etc/openvswitch/conf.db ./vswitchd/vswitch.ovsschema
启动OVS数据库服务器。
$ sudo ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock - remote=db:Open_vSwitch,manager_options --pidfile --detach
初始化OVS配置数据库。
$ sudo ovs-vsctl --no-wait init
最后,启动 OVS 守护进程。
$ sudo ovs-vswitchd --pidfile --detach
在 Ubuntu 或 Debian 上安装 KVM
使用 apt-get 命令安装 KVM 和必要的用户空间工具。
$ sudo apt-get install qemu-kvm libvirt-bin bridge-utils virt-manager
将非root普通用户(例如alice
)添加到libvirtd
组,以便该用户无需root权限即可启动虚拟机。
$ sudo adduser alice libvirtd
注销并以用户身份重新登录以使组成员身份更改生效。
运行以下命令。如果您应该看到空的虚拟机列表,则表示 KVM 设置成功。
$ virsh list
Id Name State
----------------------------------------------------
为 KVM 配置 Open vSwitch
现在是时候创建 OVS 桥接启动脚本了,以便在启动或停止 VM 时自动配置 OVS。
安装依赖项(用户模式 Linux 实用程序),它将用于处理 Linux 桥接模式。
$ sudo apt-get install uml-utilities
创建桥启动脚本如下。
$ sudo vi /etc/openvswitch/ovs-ifup
#!/bin/sh
switch='br0'
/sbin/ifconfig $1 0.0.0.0 up
ovs-vsctl add-port ${switch} $1
$ sudo vi /etc/openvswitch/ovs-ifdown
#!/bin/sh
switch='br0'
/sbin/ifconfig $1 0.0.0.0 down
ovs-vsctl del-port ${switch} $1
$ sudo chmod +x /etc/openvswitch/ovs-if*
然后,创建一个默认网桥 br0
,并添加一个物理网络接口,虚拟机将通过该接口与外部网络进行通信。在本教程中,我假设这样的网络接口是 eth5。
$ sudo ovs-vsctl add-br br0
$ sudo ovs-vsctl add-port br0 eth5
使用 KVM 启动 VM
现在您已准备好启动来宾虚拟机。
我假设您已经准备好来宾虚拟机映像(例如,ubuntu-client.img
)。使用以下命令启动来宾 VM。
$ sudo kvm -m 1024 -net nic,macaddr=11:11:11:EE:EE:EE -net tap,script=/etc/openvswitch/ovs-ifup,downscript=/etc/openvswitch/ovs-ifdown -vnc :1 -drive file=/home/dev/images/ubuntu-client.img,boot=on
这将创建并启动一个来宾 VM,其虚拟接口在启动时会自动添加到 OVS 桥br0
。
您可以使用 ovs-vsctl 命令验证 OVS 状态,如下所示。

这是已启动虚拟机的远程桌面会话。
