V tomto oddílu je popsán způsob instalace qcow brány Brána SD-WAN Gateway v prostředí KVM.

Poznámka: Toto nasazení je testováno v KVM Ubuntu 16.04 a 18.04.

Posouzení před instalací

KVM nabízí několik způsobů, jak virtuálním počítačům zajistit síťové připojení. Před konfigurací virtuálního počítače je třeba zřídit síť v libvirt. V KVM existuje několik způsobů konfigurace sítě. Chcete-li zobrazit úplnou konfiguraci možností konfigurace sítí na libvirt, navštivte tento odkaz:

https://libvirt.org/formatnetwork.html

V úplném seznamu možností doporučujeme pro VMware použít následující režimy:

  • SR-IOV (tento režim je vyžadován, aby bráně Brána SD-WAN Gateway zajistil maximální propustnost, jakou určuje VMware)
  • Přemostění OpenVSwitch

Pokud se rozhodnete použít režim SR-IOV, povolte SR-IOV v prostředí KVM. Informace o povolení funkce SR-IOV na KVM najdete v části Aktivace SR-IOV na KVM.

Postup instalace brány Brána SD-WAN Gateway v prostředí KVM

  1. Zkopírujte QCOW a soubory cloud-init vytvořené podle postupu v oddílu Vytvoření cloud-init do nového prázdného adresáře.
  2. Vytvořte síťová rozhraní, která budete se zařízením používat.

    Použití SR-IOV (Using SR-IOV): Následuje vzorová šablona síťového rozhraní specifická pro síťové karty Intel X710/XL710 využívající funkci SR-IOV.

        <interface type='hostdev' managed='yes'>
            <mac address='52:54:00:79:19:3d'/>
            <driver name='vfio'/>
            <source>
                <address type='pci' domain='0x0000' bus='0x83' slot='0x0a' function='0x0'/>
            </source>
            <model type='virtio'/>
        </interface>
    
    Použití OpenVSwitch (Using OpenVSwitch): Následují vzorové šablony síťového rozhraní s použitím funkce OpenVSwitch.
    git ./vcg/templates/KVM_NETWORKING_SAMPLES/template_outside_openvswitch.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <network>
       <name>public_interface</name>
       <!--This is the network name-->
       <model type="virtio" />
       <forward mode="bridge" />
       <bridge name="publicinterface" />
       <virtualport type="openvswitch" />
       <vlan trunk="yes">
          <tag id="50" />
          <!--Define all the VLANS for this Bridge -->
          <tag id="51" />
          <!--Define all the VLANS for this Bridge -->
       </vlan>
    </network> 

    Vytvořit síť pro inside_interface:

    git ./vcg/templates/KVM_NETWORKING_SAMPLES/template_inside_openvswitch.xml
    <network>
      <name>inside_interface</name> <!--This is the network name-->
      <model type='virtio'/>
      <forward mode="bridge"/>
      <bridge name="insideinterface"/>
      <virtualport type='openvswitch'></virtualport>
      <vlan trunk='yes'></vlan>
      <tag id='200'/> <!—Define all the VLANS for this Bridge -->
      <tag id='201'/> <!—Define all the VLANS for this Bridge -->
      <tag id='202'/> <!—Define all the VLANS for this Bridge -->
    </network>  
    Pokud se rozhodnete použít režim OpenVSwitch, musíte ještě před spuštěním virtuálního počítače ověřit, zda jsou základní sítě vytvořeny a aktivní.
    Poznámka: Tento krok ověřování se netýká režimu SR-IOV, protože při něm nevytváříte žádné sítě předtím, než je virtuální počítač spuštěn.

    vcg-code-verify-the-basic

  3. Upravte virtuální počítač v souboru XML. Existuje několik způsobů, jak v KVM vytvořit virtuální počítač. Virtuální počítač můžete definovat v souboru XML a vytvořit ho pomocí sady libvirt, ze vzorové šablony XML s virtuálním počítačem specifické pro režim OpenVSwitch a SR-IOV.
    vi my_vm.xml
    Následuje vzorová šablona virtuálního počítače, která používá rozhraní OpenVSwitch. Tuto šablonu můžete použít k provádění úprav, kdykoli je to zapotřebí.
    <?xml version="1.0" encoding="UTF-8"?>
    <domain type="kvm">
       <name>#domain_name#</name>
       <memory unit="KiB">8388608</memory>
       <currentMemory unit="KiB">8388608</currentMemory>
       <vcpu>8</vcpu>
       <cputune>
          <vcpupin vcpu="0" cpuset="0" />
          <vcpupin vcpu="1" cpuset="1" />
          <vcpupin vcpu="2" cpuset="2" />
          <vcpupin vcpu="3" cpuset="3" />
          <vcpupin vcpu="4" cpuset="4" />
          <vcpupin vcpu="5" cpuset="5" />
          <vcpupin vcpu="6" cpuset="6" />
          <vcpupin vcpu="7" cpuset="7" />
       </cputune>
       <resource>
          <partition>/machine</partition>
       </resource>
       <os>
          <type>hvm</type>
       </os>
       <features>
          <acpi />
          <apic />
          <pae />
       </features>
       <cpu mode="host-passthrough" />
       <clock offset="utc" />
       <on_poweroff>destroy</on_poweroff>
       <on_reboot>restart</on_reboot>
       <on_crash>restart</on_crash>
       <devices>
          <emulator>/usr/bin/kvm-spice</emulator>
          <disk type="file" device="disk">
             <driver name="qemu" type="qcow2" />
             <source file="#folder#/#qcow_root#" />
             <target dev="hda" bus="ide" />
             <alias name="ide0-0-0" />
             <address type="drive" controller="0" bus="0" target="0" unit="0" />
          </disk>
          <disk type="file" device="cdrom">
             <driver name="qemu" type="raw" />
             <source file="#folder#/#Cloud_ INIT_ ISO#" />
             <target dev="sdb" bus="sata" />
             <readonly />
             <alias name="sata1-0-0" />
             <address type="drive" controller="1" bus="0" target="0" unit="0" />
          </disk>
          <controller type="usb" index="0">
             <alias name="usb0" />
             <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x2" />
          </controller>
          <controller type="pci" index="0" model="pci-root">
             <alias name="pci.0" />
          </controller>
          <controller type="ide" index="0">
             <alias name="ide0" />
             <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1" />
          </controller>
          <interface type="network">
             <source network="public_interface" />
             <vlan>
                <tag id="#public_vlan#" />
             </vlan>
             <alias name="hostdev1" />
             <address type="pci" domain="0x0000" bus="0x00" slot="0x11" function="0x0" />
          </interface>
          <interface type="network">
             <source network="inside_interface" />
             <alias name="hostdev2" />
             <address type="pci" domain="0x0000" bus="0x00" slot="0x12" function="0x0" />
          </interface>
          <serial type="pty">
             <source path="/dev/pts/3" />
             <target port="0" />
             <alias name="serial0" />
          </serial>
          <console type="pty" tty="/dev/pts/3">
             <source path="/dev/pts/3" />
             <target type="serial" port="0" />
             <alias name="serial0" />
          </console>
          <memballoon model="none" />
       </devices>
       <seclabel type="none" />
    </domain>
    Následuje vzorová šablona virtuálního počítače, která používá rozhraní SR-IOV. Tuto šablonu můžete použít k provádění úprav, kdykoli je to zapotřebí.
    <?xml version="1.0" encoding="UTF-8"?>
    <domain type="kvm">
       <name>#domain_name#</name>
       <memory unit="KiB">8388608</memory>
       <currentMemory unit="KiB">8388608</currentMemory>
       <vcpu>8</vcpu>
       <cputune>
          <vcpupin vcpu="0" cpuset="0" />
          <vcpupin vcpu="1" cpuset="1" />
          <vcpupin vcpu="2" cpuset="2" />
          <vcpupin vcpu="3" cpuset="3" />
          <vcpupin vcpu="4" cpuset="4" />
          <vcpupin vcpu="5" cpuset="5" />
          <vcpupin vcpu="6" cpuset="6" />
          <vcpupin vcpu="7" cpuset="7" />
       </cputune>
       <resource>
          <partition>/machine</partition>
       </resource>
       <os>
          <type>hvm</type>
       </os>
       <features>
          <acpi />
          <apic />
          <pae />
       </features>
       <cpu mode="host-passthrough" />
       <clock offset="utc" />
       <on_poweroff>destroy</on_poweroff>
       <on_reboot>restart</on_reboot>
       <on_crash>restart</on_crash>
       <devices>
          <emulator>/usr/bin/kvm-spice</emulator>
          <disk type="file" device="disk">
             <driver name="qemu" type="qcow2" />
             <source file="#folder#/#qcow_root#" />
             <target dev="hda" bus="ide" />
             <alias name="ide0-0-0" />
             <address type="drive" controller="0" bus="0" target="0" unit="0" />
          </disk>
          <disk type="file" device="cdrom">
             <driver name="qemu" type="raw" />
             <source file="#folder#/#Cloud_ INIT_ ISO#" />
             <target dev="sdb" bus="sata" />
             <readonly />
             <alias name="sata1-0-0" />
             <address type="drive" controller="1" bus="0" target="0" unit="0" />
          </disk>
          <controller type="usb" index="0">
             <alias name="usb0" />
             <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x2" />
          </controller>
          <controller type="pci" index="0" model="pci-root">
             <alias name="pci.0" />
          </controller>
          <controller type="ide" index="0">
             <alias name="ide0" />
             <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1" />
          </controller>
          <interface type='hostdev' managed='yes'>
     	  <mac address='52:54:00:79:19:3d'/>
      	 <driver name='vfio'/>
      	 <source>
                  <address type='pci' domain='0x0000' bus='0x83' slot='0x0a' function='0x0'/>
     	  </source>
      	 <model type='virtio'/>
          </interface>
          <interface type='hostdev' managed='yes'>
     	  <mac address='52:54:00:74:69:4d'/>
      	 <driver name='vfio'/>
      	 <source>
                  <address type='pci' domain='0x0000' bus='0x83' slot='0x0a' function='0x1'/>
     	  </source>
      	 <model type='virtio'/>
          </interface>
          <serial type="pty">
             <source path="/dev/pts/3" />
             <target port="0" />
             <alias name="serial0" />
          </serial>
          <console type="pty" tty="/dev/pts/3">
             <source path="/dev/pts/3" />
             <target type="serial" port="0" />
             <alias name="serial0" />
          </console>
          <memballoon model="none" />
       </devices>
       <seclabel type="none" />
    </domain>
  4. Virtuální počítač spusťte provedením následujících kroků:
    1. Ujistěte se, že se ve vašem adresáři nachází následující tři soubory uvedené na tomto vzorovém snímku obrazovky:
      • qcow – vcg-root
      • cloud-init – vcg-test.iso
      • Soubor XML domény test_vcg.xml (kde test_vcg představuje název domény), který definuje virtuální počítač

      vcg-code-networks-created-active

    2. Definujte virtuální počítač.
      velocloud@KVMperf2:/tmp/VeloCloudGateway$ virsh define test_vcg.xml
      Domain test_vcg defined from test_vcg.xml
    3. Nastavte virtuální počítač na autostart.
      velocloud@KVMperf2:/tmp/VeloCloudGateway$ virsh autostart test_vcg
    4. Spusťte virtuální počítač.
      velocloud@KVMperf2:/tmp/VeloCloudGateway$ virsh start test_vcg
  5. Pokud používáte režim SR-IOV, po spuštění virtuálního počítače upravte následující parametry použitých virtuálních funkcí:
    1. Vypněte kontrolu spoofingu.
      ip link set eth1 vf 0 spoofchk off
    2. Aktivujte důvěryhodný režim.
      ip link set dev eth1 vf 0 trust on
    3. Podle potřeby nastavte síť VLAN.
      ip link set eth1 vf 0 vlan 3500
    Poznámka: Krok konfigurace virtuálních funkcí se v případě režimu OpenVSwitch (OVS) nepoužívá
  6. Virtuální počítač otevřete z konzoly.
    virsh list
    Id Name State
    ----------------------------------------------------
    25 test_vcg running
    velocloud@KVMperf2$ virsh console 25
    Connected to domain test_vcg
    Escape character is ^]          

Zvláštnosti pro hostitele KVM (Special Consideration for KVM Host)

  • Deaktivujte GRO (Generic Receive Offload) na fyzických rozhraních (aby nedošlo ke zbytečné refragmentaci v Brána SD-WAN Gateway).
    ethtool –K <interface> gro off tx off
  • Deaktivujte C-stavy procesoru (stavy napájení ovlivňují výkon v reálném čase). Obvykle to lze provést v rámci možností spouštění jádra přidáním processor.max_cstate=1 nebo pouhou deaktivací v systému BIOS.
  • K nasazení produkce musí být CPU připnuta k instanci. Oversubskripce jader by měla být zakázána.