KVM-QEMU 和 Vagrant

使用 KVM-QEMU 和 Vagrant 运行 Cumulus VX 需要四个组件

  • KVM 专门与 QEMU 配合使用,并为配备 Intel 和 AMD CPU 的 x86 VM 执行硬件加速。KVM 和 QEMU 是模拟 VM 的虚拟机监控程序;这对组合通常称为 KVM-QEMU 或简称为 KVM。
  • QEMU 是一种机器模拟器,允许主机模拟访客机器的 CPU 架构。由于 QEMU 不提供硬件加速,因此它与 KVM 配合良好。
  • libvirt 提供了一种抽象语言来定义和启动 VM,但通常仅用于启动单个 VM。它使用 XML 来表示和定义 VM。
  • Vagrant 是一种编排工具,通过以编程方式互连 VM 组,从而更轻松地管理 VM 组。Vagrant 有助于将所有组件连接在一起,并提供用户友好的语言来启动 VM 套件。Vagrant 允许多个 Cumulus VX VM 互连以模拟网络。Vagrant 还允许 Cumulus VX VM 与其他 VM(例如 Ubuntu 或 CentOS)互连,以模拟真实世界的网络。

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

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

按照以下步骤操作

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

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

创建和配置 VM

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

下载并安装软件

在安装 libvirt 之后安装 Vagrant,以便 Vagrant 可以检测到所有必要的文件。

  1. 运行以下命令以安装 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 ruby-dev
    
  2. 将用户添加到 libvirt 组,以便他们可以执行 virsh 命令。

    local@host:~$ sudo usermod -a -G libvirt <username>
    
  3. 运行以下命令以安装 Vagrant 和必要的插件

    local@host:~$ sudo wget https://releases.hashicorp.com/vagrant/2.2.9/vagrant_2.2.9_x86_64.deb
    local@host:~$ sudo dpkg -i vagrant_2.2.9_x86_64.deb
    local@host:~$ sudo vagrant plugin install vagrant-libvirt
    
  4. 确认您的 Linux 内核和 BIOS 设置允许使用 KVM 硬件加速

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

创建 VM 和网络连接

  1. 创建一个文件夹来包含 Vagrant 环境,然后将目录更改到该文件夹中。

    local@host:~$ mkdir vagrant
    local@host:~$ cd vagrant
    
  2. 初始化 Vagrant 环境以在您刚刚创建的文件夹中创建一个名为 Vagrantfile 的文件。

    local@host:~/vagrant$ vagrant init
    A `Vagrantfile` has been placed in this directory. You are now
    ready to `vagrant up` your first virtual environment! Please read
    the comments in the Vagrantfile as well as documentation on
    `vagrantup.com` for more information on using Vagrant.
    
  3. 编辑 Vagrantfile 并将文件的内容替换为以下内容

  • 以下是两个叶子和一个脊柱示例拓扑的完整 Vagrantfile。有关编写 Vagrantfile 的更多信息,请参考 Hashicorp Vagrant 文档。
  • 此 Vagrantfile 定义了 Cumulus VX 的 CPU、内存和磁盘要求,Cumulus VX 至少需要 768MB RAM 和 6GB 磁盘空间。
  • 对于 CumulusVX 版本 4.3 及更高版本,需要 2 个 vCPU。

Vagrantfile
  1. 运行 vagrant up 以启动 VM

KVM 并行启动所有 Vagrant 定义的 VM。在大型拓扑中,这可能会导致主机资源争用问题。考虑使用 vagrant up <hostname> <hostname> 命令一次启动 VM 的子集。

local@host:~/vagrant$ vagrant up
Bringing machine 'spine01' up with 'libvirt' provider...
Bringing machine 'leaf01' up with 'libvirt' provider...
Bringing machine 'leaf02' up with 'libvirt' provider...
...

登录到交换机

使用 vagrant ssh 命令登录到每个交换机。例如

local@host:~/vagrant$ vagrant ssh leaf01

基本交换机配置

在每个交换机上运行这些命令以启动接口。

cumulus@cumulus:mgmt:~$ net add interface swp1,swp2,swp3
cumulus@cumulus:mgmt:~$ net commit
cumulus@cumulus:mgmt:~$ exit
cumulus@cumulus:mgmt:~$ net add interface swp1,swp2,swp3
cumulus@cumulus:mgmt:~$ net commit
cumulus@cumulus:mgmt:~$ exit
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 的好方法。