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,以创建如下所示的两个叶子和一个主干拓扑。
在此拓扑中,leaf01 和 leaf02 是网络上的接入层交换机。leaf01 和 leaf02 连接到 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 经验。
下载并安装软件
下载适用于 KVM 的 Cumulus VX Qcow2 映像。
运行以下命令以安装 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
确认您的 Linux 内核和 BIOS 设置允许使用 KVM 硬件加速
local@host:~$ kvm-ok INFO: /dev/kvm exists KVM acceleration can be used
创建 VM 和网络连接
将
qcow2
映像复制到 Linux 服务器三次以创建三个 VM。将它们命名如下- leaf01.qcow2
- leaf02.qcow2
- spine01.qcow2
运行以下命令以配置每个 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 的好方法。