NSX Advanced Load Balancer 版本 22.1.1 开始,支持安装 Linux KVM 以对 virtio-net 数据网卡和从主机上的物理接口创建的 macvtap 接口(桥接模式)提供 DPDK 支持。此 macvtap 接口将用作客户机虚拟机中的接口。

有关 macvtap 接口的更多信息,请参阅 MacVTap

必备条件

  1. 硬件

    要运行 KVM,请检查您的 CPU 是否支持硬件虚拟化。您需要支持硬件虚拟化的处理器。Intel 和 AMD 都为其处理器开发了扩展,分别为 Intel VT-x 和 AMD-V。要确认处理器是否支持其中任一扩展,可以使用以下命令查看输出:egrep -c '(vmx|svm)' /proc/cpuinfo

    1. 如果值为零,则表示 CPU 不支持硬件虚拟化。

    2. 如果值为 1 或更高,则表示 CPU 支持硬件虚拟化。但是,您需要确保在 BIOS 中启用虚拟化。

  2. 软件安装

    1. Ubuntu 发行版

      有关 KVM 安装和必备软件包安装的更多信息,请参阅 KVM/安装

    2. RHEL/CentOS 发行版

      有关在现有 Red Hat Enterprise Linux 系统上安装 KVM 软件包以及必备软件包安装的更多信息,请参阅 KVM 与 Red Hat Enterprise Linux 新安装

  3. 软件 [已经过测试和认证]

    1. Ubuntu 发行版

      Ubuntu ID

      版本

      DISTRIB_ID

      Ubuntu

      DISTRIB_RELEASE

      18.04

      DISTRIB_CODENAME

      Bionic

      DISTRIB_DESCRIPTION

      Ubuntu 18.04 LTS

      DISTRIB_ID

      Ubuntu

      操作系统内核版本

      4.15.0-20-generic

      libvirt-bin

      libvirtd (libvirt) 4.0.0

      qemu-kvm

      QEMU 仿真器版本 2.11.1

      genisomage

      genisoimage 1.1.11 (Linux)

    2. RHEL/CentOS 发行版

      RHEL/CentOS ID

      版本

      CentOS Linux 版本

      7.9 (Maipo)

      操作系统内核版本

      5.4.17-2136.305.5.4.el7uek.x86_64

      libvirt-bin

      libvirtd (libvirt) 4.5.0

      qemu-kvm

      QEMU 仿真器版本 2.0.0

      genisomage

      genisoimage 1.1.11 (Linux)

安装服务引擎和控制器虚拟机

  1. 必备条件:确保将 NSX Advanced Load Balancer se.qcow2controller.qcow2 映像复制到主机的 /var/lib/libvirt/images/ 目录。如下面的“部署服务引擎”一节中所述,se.qcow2 映像在启动后可以从控制器 UI 中获取。

  2. 脚本运行:在主机上运行 kvm-dpdk-virt-install.sh 中的安装脚本,以安装控制器和 SE 虚拟机。

    注:

    您需要先创建控制器虚拟机,然后再创建 SE 虚拟机。

部署控制器

在主机上运行上述安装脚本并选择 Create AVI Controller VM 选项,以部署控制器虚拟机。

以下是建议在创建控制器虚拟机时用于安装脚本的一些变量:

  1. NSX Advanced Load Balancer Controller 管理 IP

  2. NSX Advanced Load Balancer Controller 管理 IP 掩码

  3. NSX Advanced Load Balancer Controller 默认网关

这些变量的值来自于主机管理接口配置。

控制器初始设置

以下是导航到控制器 IP 地址以执行初始设置的步骤:

  • 配置管理员密码

  • 设置 DNS 信息

  • 选择“无 Orchestrator”

部署服务引擎

在控制器虚拟机启动后,可通过以下步骤上载 SE 映像以安装服务引擎:

  1. 在控制器上,导航到基础架构 >

  2. 单击 Default-Cloud 行中的下载图标,然后选择 Qcow2

  3. se.qcow2 上载到主机的 /var/lib/libvirt/images/ 目录。

在主机上运行上述安装脚本并选择 Create AVI SE VM 选项,以部署 SE 虚拟机。

以下是建议在创建服务引擎虚拟机时用于安装脚本的一些变量:

  • NSX Advanced Load Balancer SE 管理 IP

  • NSX Advanced Load Balancer Controller 管理 IP 掩码

  • NSX Advanced Load Balancer SE 默认网关

这些变量的值来自于主机管理接口配置。

注:

对于 SE 虚拟机创建,建议每个 macvtap 接口配置 4 个队列,以及配置 4 个或更多虚拟 CPU,以获得最佳吞吐量性能。

可按以下方式指定绑定接口序列:

Bond-ifs 序列

1,2 3,4。这表示接口 1 和 2 处于绑定状态,接口 3 和 4 处于绑定状态(请注意 1,2 和 3,4 之间的空格)。

Bond-ifs 序列

1,2,3,4。这表示接口 1、2、3 和 4 处于绑定状态。

可在控制器 UI 上导航到基础架构 > 仪表板,以验证 SE 是否能够连接到控制器(这可能需要几分钟的时间)。

SE 虚拟机安装输出示例

  1. 在主机上

    1. 主机管理接口(从中创建管理 macvtap 接口)。

        eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 0c:c4:7a:b4:15:b4 brd ff:ff:ff:ff:ff:ff
        inet 10.217.144.19/22 brd 10.217.147.255 scope global eno1 
    2. 主机物理接口(从中创建数据 macvtap 接口)。

      ens1f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
      link/ether 0c:c4:7a:bb:96:ea brd ff:ff:ff:ff:ff:ff
      inet 100.64.50.56/24 brd 100.64.50.255 scope global dynamic ens1f0
      ens1f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
      link/ether 0c:c4:7a:bb:96:eb brd ff:ff:ff:ff:ff:ff
      inet 100.64.67.55/24 brd 100.64.67.255 scope global dynamic ens1f1 
    3. 主机上显示的 macvtap 接口(运行安装脚本后)。

        macvtap0@eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 500
        link/ether 52:54:00:f4:ed:9f brd ff:ff:ff:ff:ff:ff
        macvtap1@ens1f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 500
        link/ether 52:54:00:4f:3a:2d brd ff:ff:ff:ff:ff:ff
        macvtap2@ens1f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 500
        link/ether 52:54:00:68:38:ef brd ff:ff:ff:ff:ff:ff
  2. 在 SE 虚拟机上(运行安装脚本后)

    1. SE 管理接口

        eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 52:54:00:f4:ed:9f brd ff:ff:ff:ff:ff:ff
        inet 10.217.144.251/22 brd 10.217.147.255 scope global eth0 
    2. SE 数据网卡接口(如分配 IP 地址后命名空间中所示)

      root@Avi-Service-Engine:/home/admin# ip netns exec avi_ns1 bash
      avi_eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
      link/ether 52:54:00:68:38:ef brd ff:ff:ff:ff:ff:ff
      inet 100.64.67.22/24 brd 100.64.67.255 scope global dynamic avi_eth2
      avi_eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
      link/ether 52:54:00:4f:3a:2d brd ff:ff:ff:ff:ff:ff
      inet 100.64.50.41/24 brd 100.64.50.255 scope global dynamic avi_eth0
  3. 在主机重新引导后

    下面列出了每次重新引导后执行的步骤。

    1. 在重新引导后,所有虚拟机将自动处于 STOP 状态。

    2. 可以使用 virsh list 输出检查所有虚拟机名称。

    3. 使用 virsh start <VM-name> 命令启动所有虚拟机。

  4. 销毁控制器和服务引擎

    可以使用上述脚本清除虚拟机及其对应的映像。

    注:
    1. 如果主机的磁盘空间将要用完,这可能是由于创建虚拟机期间在 /var/lib/libvirt/images/ 中使用了 N 个 qcow2。可按照上述部分中所述删除相应虚拟机,以清除所有未使用的映像。

    2. 在销毁 SE 虚拟机后,请确保手动清理(强制删除)控制器 GUI 中存在的失效服务引擎条目。