KVM-QEMU

在 Linux 中执行虚拟化需要三个组件

  • KVM 专门与 QEMU 配合使用,并为采用 Intel 和 AMD CPU 的 x86 VM 执行硬件加速。KVM 和 QEMU 是模拟 VM 的虚拟机监控程序;这对组合通常称为 KVM-QEMU 或简称为 KVM。
  • QEMU 是一种机器模拟器,可让主机模拟客户机的 CPU 架构。由于 QEMU 不提供硬件加速,因此它与 KVM 配合良好。
  • libvirt 提供了一种抽象语言来定义和启动 VM,但通常仅用于启动单个 VM。它使用 XML 来表示和定义 VM。

本节介绍如何在 Linux 服务器上使用 KVM/QEMU 和 Libvirt 安装和设置 Cumulus VX,以创建如下所示的两个叶子和一个主干拓扑。

在此拓扑中,leaf01leaf02 是网络上的接入层交换机。leaf01leaf02 连接到 spine01,后者是网络上的汇聚层交换机。为了便于在本指南中描述的初始设置之后进行其他配置,leaf01 和 leaf02 还彼此有两个连接。

请按照以下步骤

  • 创建三个 VM(leaf01、leaf02 和 spine01)以及它们之间的网络连接
  • 登录到交换机
  • 执行基本交换机配置
  • 验证配置

这些步骤已在 Ubuntu Linux 20.04 版本上使用 Cumulus VX 4.2、KVM/QEMU 版本 1:4.2-3ubuntu6.3 和 Libvirt 版本 6.0.0 进行了测试。

创建和配置 VM

以下过程创建 leaf01、leaf02 和 spine01 以及它们之间的网络连接。本节假定您具有 Linux 和 KVM 经验。

下载并安装软件

  1. 下载适用于 KVM 的 Cumulus VX Qcow2 映像

  2. 运行以下命令以安装 KVM、QEMU 和 Libvirt

    local@host:~$ sudo apt update -y
    local@host:~$ sudo apt install -qy qemu ebtables dnsmasq-base qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager python3-pip
    local@host:~$ sudo apt install -qy libxslt-dev libxml2-dev libvirt-dev zlib1g-dev
    
  3. 确认您的 Linux 内核和 BIOS 设置允许使用 KVM 硬件加速

    local@host:~$ kvm-ok
    INFO: /dev/kvm exists
    KVM acceleration can be used
    

创建 VM 和网络连接

  1. qcow2 映像复制到 Linux 服务器三次以创建三个 VM。将它们命名如下

    • leaf01.qcow2
    • leaf02.qcow2
    • spine01.qcow2
  2. 运行以下命令以配置每个 VM。确保在命令末尾指定 VM 的位置。在以下示例命令中,您将 VM 安装在 /var/lib/libvirt/images/ 中。

以下命令定义了 Cumulus VX 的 CPU、内存和磁盘要求,Cumulus VX 至少需要 768MB 的 RAM 和 6GB 的磁盘空间。CumulusVX 4.3 及更高版本需要 2 个 vCPU。CumulusVX 5.0 及更高版本需要 2GB 的 RAM。

local@host:~$ sudo /usr/bin/kvm -curses -vga virtio -name leaf01 -pidfile leaf01.pid -smp 2 -m 768 -net nic,macaddr=00:01:00:00:01:00,model=virtio -net user,net=192.168.0.0/24,hostfwd=tcp::1401-:22 -netdev socket,udp=127.0.0.1:1602,localaddr=127.0.0.1:1601,id=dev0 -device virtio-net-pci,mac=00:02:00:00:00:01,addr=6.0,multifunction=on,netdev=dev0,id=swp1 -netdev socket,udp=127.0.0.1:1606,localaddr=127.0.0.1:1605,id=dev1 -device virtio-net-pci,mac=00:02:00:00:00:02,addr=6.1,multifunction=off,netdev=dev1,id=swp2 -netdev socket,udp=127.0.0.1:1610,localaddr=127.0.0.1:1609,id=dev2 -device virtio-net-pci,mac=00:02:00:00:00:09,addr=6.2,multifunction=off,netdev=dev2,id=swp3 /var/lib/libvirt/images/leaf01.qcow2
local@host:~$ sudo /usr/bin/kvm -curses -vga virtio -name leaf02 -pidfile leaf02.pid -smp 2 -m 768 -net nic,macaddr=00:01:00:00:02:00,model=virtio -net user,net=192.168.0.0/24,hostfwd=tcp::1402-:22 -netdev socket,udp=127.0.0.1:1604,localaddr=127.0.0.1:1603,id=dev0 -device virtio-net-pci,mac=00:02:00:00:00:03,addr=6.0,multifunction=on,netdev=dev0,id=swp1 -netdev socket,udp=127.0.0.1:1605,localaddr=127.0.0.1:1606,id=dev1 -device virtio-net-pci,mac=00:02:00:00:00:04,addr=6.1,multifunction=off,netdev=dev1,id=swp2 -netdev socket,udp=127.0.0.1:1609,localaddr=127.0.0.1:1610,id=dev2 -device virtio-net-pci,mac=00:02:00:00:00:10,addr=6.2,multifunction=off,netdev=dev2,id=swp3 /var/lib/libvirt/images/leaf02.qcow2
local@host:~$ sudo /usr/bin/kvm -curses -vga virtio -name spine01 -pidfile spine01.pid -smp 2 -m 768 -net nic,macaddr=00:01:00:00:03:00,model=virtio -net user,net=192.168.0.0/24,hostfwd=tcp::1403-:22 -netdev socket,udp=127.0.0.1:1601,localaddr=127.0.0.1:1602,id=dev0 -device virtio-net-pci,mac=00:02:00:00:00:05,addr=6.0,multifunction=on,netdev=dev0,id=swp1 -netdev socket,udp=127.0.0.1:1603,localaddr=127.0.0.1:1604,id=dev1 -device virtio-net-pci,mac=00:02:00:00:00:06,addr=6.1,multifunction=off,netdev=dev1,id=swp2 -netdev socket,udp=127.0.0.1:1609,localaddr=127.0.0.1:1610,id=dev2 -device virtio-net-pci,mac=00:02:00:00:00:11,addr=6.2,multifunction=off,netdev=dev2,id=swp3 /var/lib/libvirt/images/spine01.qcow2

登录到交换机

使用 cumulus 帐户和默认密码 cumulus 登录到每个交换机。首次登录时,系统会提示您更改默认密码。

如果您使用的是 Cumulus VX 4.1.1 或更早版本,则默认密码为 CumulusLinux!。系统不会提示您更改默认密码。

有关所需密码更改的更多信息,请参阅 Cumulus Linux 文档

基本交换机配置

在每个交换机上运行这些命令以更改主机名并启动接口。退出交换机,然后重新登录以在提示符下查看新主机名。

cumulus@cumulus:mgmt:~$ net add hostname leaf01
cumulus@cumulus:mgmt:~$ net add interface swp1,swp2,swp3
cumulus@cumulus:mgmt:~$ net commit
cumulus@cumulus:mgmt:~$ exit
cumulus@cumulus:mgmt:~$ net add hostname leaf02
cumulus@cumulus:mgmt:~$ net add interface swp1,swp2,swp3
cumulus@cumulus:mgmt:~$ net commit
cumulus@cumulus:mgmt:~$ exit
cumulus@cumulus:mgmt:~$ net add hostname spine01
cumulus@cumulus:mgmt:~$ net add interface swp1,swp2
cumulus@cumulus:mgmt:~$ net commit
cumulus@cumulus:mgmt:~$ exit

验证配置

在每个交换机上运行以下命令以验证配置

LLDP 信息可能需要几分钟才能更新。如果您的命令输出与下面显示的输出不同,请等待几分钟,然后再次运行该命令。

cumulus@leaf01:mgmt:~$ net show lldp
LocalPort    Speed    Mode          RemoteHost     RemotePort
-----------  -------  ------------  ------------   ------------
swp1         1G       Default       spine01        swp1
swp2         1G       Default       leaf02         swp2
swp3         1G       Default       leaf02         swp3
cumulus@leaf02:mgmt:~$ net show lldp
LocalPort    Speed    Mode          RemoteHost     RemotePort
-----------  -------  ------------  ------------   ------------
swp1         1G       Default       spine01        swp2
swp2         1G       Default       leaf01         swp2
swp3         1G       Default       leaf01         swp3
cumulus@spine01:mgmt:~$ net show lldp
LocalPort    Speed    Mode          RemoteHost     RemotePort
-----------  -------  ------------  ------------   ------------
swp1         1G       Default       leaf01         swp1
swp2         1G       Default       leaf02         swp1

在每个交换机上运行以下命令以显示系统信息

cumulus@leaf01:mgmt:~$ net show system
Hostname..............leaf01
Build.................Cumulus Linux 4.2.0
Uptime................0.00.23.740000
Model.................Cumulus VX
Memory................768MB
Disk..................6GB
Vendor Name...........Cumulus Networks
Part Number...........4.2.0
Base MAC Address......4:00:27:39:B1:12
Serial Number.........4:00:27:39:B1:12
Product Name..........VX

后续步骤

  • 尝试 高级配置。您可以更新您的虚拟环境,以便能够使用 Cumulus Linux 按需 自定进度实验室(一种快速简便的学习基础知识的方法)。您还可以运行 拓扑转换器,以使用 VirtualBox 和 Vagrant 或 KVM-QEMU 和 Vagrant 模拟自定义网络拓扑。
  • 尝试 NVIDIA Air,这是一个免费的个人虚拟数据中心网络,提供了一种低成本的方式来了解 Cumulus Networks 技术的实际应用。如果您有平台或磁盘限制,这是尝试 Cumulus Linux 的好方法。