Instruktaż/Tutorial Nested Virtualization – czyli hypervisor jako VM, a po Polsku: wirtualizacja w wirtualizacji...

Silas Mariusz

rm -rf /
Help us, GOD!
5 Kwiecień 2008
10 213
31
2 317
153
39
Nowy Sącz
forum.qnap.net.pl
QNAP
TS-x77
Ethernet
1 GbE
avmcom.com_mydata_myuploads_2020_06_ssh1_1024x724.png


Powód:
Virtualization Station (QVS) w QNAP QTS jest naprawdę przydatnym środowiskiem do uruchamiania maszyn wirtualnych. Jednak kiedy potrzebujesz uruchomić LabConfig - ustanowić środowisko testowe; które pozwoliłoby Ci uruchomić inne hypervisory i narzędzia automatyzacji VM pozostaje rozwiązanie Nested Virtualization. Nested Virtualization, to nic innego jak zagnieżdżona lub rekursywna wirtualizacja – czyli wirtualizacja w wirtualizacji. Nested Virtualization jest wyłączona domyślnie we wszystkich hypervisorach czy to ESXi czy Hyper-V. QNAP Virtuzaliation Station bazuje na KVM i tutaj z pomocć przychodzi Nested KVM, który umożliwi uruchomienie „zabawek” takich jak ESX, XenServer, Hyper-V czy Proxmox.
  • Połącz się z serwerem po SSH

  • Wykonaj polecenie: lscpu, aby wyświetlić parametry i technologie procesora CPU
    Przykład:
    Kod:
    Architecture:          x86_64
    CPU op-mode(s):        32-bit, 64-bit
    Byte Order:            Little Endian
    CPU(s):                8
    On-line CPU(s) list:   0-7
    Thread(s) per core:    1
    Core(s) per socket:    8
    Socket(s):             1
    NUMA node(s):          1
    Vendor ID:             GenuineIntel
    CPU family:            6
    Model:                 60
    Model name:            Intel(R) Xeon(R) CPU E3-1246 v3 @ 3.50GHz
    Stepping:              3
    CPU MHz:               3491.932
    BogoMIPS:              6983.86
    Hypervisor vendor:     KVM
    Virtualization type:   full
    L1d cache:             32K
    L1i cache:             32K
    L2 cache:              256K
    L3 cache:              8192K
    NUMA node0 CPU(s):     0-7
    Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single tpr_shadow vnmi flexpriority ept fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm xsaveopt

    Zobaczysz, że brakuje technologii VT-x dla wirtualizacji
    Virtualization: VT-x

  • Możesz też to sprawdzić poleceniem:
    Bash:
    cat /sys/module/kvm_intel/parameters/nested


Rozwiązanie:
  1. Dla instancji VM, w której będziesz chciał uruchomić hypervisora, ustaw procesor jako passthrough
    cpu-passthrogh.png


  2. W pliku ../.qpkg/QKVM/usr/etc/qvsd.d/44-preload/01-module możemy zobaczyć jak stacja wirtualizacji wczytuje moduły kernelowe.
    Bash:
    vim /share/CACHEDEV1_DATA/.qpkg/QKVM/usr/etc/qvsd.d/44-preload/01-module
    Bash:
    load_kvm()
    {
       ___load_module kvm.ko ignore_msrs=1
       check_ret
    
       # load kvm module
       if [ $VMX_FEATURE -ne 0 ]; then
           ___load_module kvm-intel.ko
           check_ret
       elif [ $SVM_FEATURE -ne 0 ]; then
           ___load_module kvm-amd.ko nested=0
           check_ret
       elif [ $SVM_FEATURE -ne 0 ]; then
           elog "Platform not support KVM"
           exit 1
       fi
    }

  3. Należy edytować ten plik (permanentne rozwiązanie do czasu kolejnej aktualizacji VM) i dodać do modułu kvm parametr nested=1, np:
    • Dla Intela:
      Bash:
      ___load_module kvm-intel.ko nested=1

    • Dla AMD:
      Bash:
      ___load_module kvm-amd.ko nested=1
  4. W tym momencie należy wykonać restart QNAP'a

  5. (Rozwiązanie natychmiastowe, ale nie pemanentne)
    1. Znajdź nazwę modułu KVM:
      Bash:
      lsmod | grep kvm
      Kod:
      kvm_intel             148558 10
      kvm                   420352  1 kvm_intel

    2. Wyszukaj plik modułu:
      Bash:
      find /lib/ -name kvm-amd*
      # lub...
      find /lib/ -name kvm-intel*
      Zostaną wyświetlone dwa pliki - jeden i drugi to to samo...
      Kod:
      /lib/modules/KVM/kvm-amd.ko
      /lib/modules/5.10.60-qnap/kvm-amd.ko

    3. Teraz zatrzymaj wszystkie maszyny wirtualne oraz wyłącz Virtualization Station

    4. Przeładuj moduł z parametrem nested=1 np.:
      Bash:
      rmmod kvm-intel.ko
      rmmod kvm-amd.ko
      
      # Dla Intela:
      insmod /lib/modules/KVM/kvm-intel.ko nested=1
      # Dla AMD:
      insmod /lib/modules/KVM/kvm-amd.ko nested=1

    5. Ponownie poleceniem z punktu pierwszego sprawdź czy moduł KVM jest załadowany:
      Bash:
      lsmod | grep kvm
      Kod:
      kvm_intel             148558 10
      kvm                   420352  1 kvm_intel
      Jeśli tak, tzn. że możesz uruchomić Virtualization Station
  6. Teraz możesz sprawdzić czy Nested KVM działa prawidłowo:
    Bash:
    cat /sys/module/kvm_intel/parameters/nested
    Y
    Bash:
    cat /sys/module/kvm_intel/parameters/ept
    Y

  7. Bash:
    lscpu
    Kod:
    [root@localhost ~]# lscpu
    Architecture:          x86_64
    CPU op-mode(s):        32-bit, 64-bit
    Byte Order:            Little Endian
    CPU(s):                8
    On-line CPU(s) list:   0-7
    Thread(s) per core:    1
    Core(s) per socket:    8
    Socket(s):             1
    NUMA node(s):          1
    Vendor ID:             GenuineIntel
    CPU family:            6
    Model:                 60
    Model name:            Intel(R) Xeon(R) CPU E3-1246 v3 @ 3.50GHz
    Stepping:              3
    CPU MHz:               3491.932
    BogoMIPS:              6983.86
    Virtualization:        VT-x
    Hypervisor vendor:     KVM
    Virtualization type:   full
    L1d cache:             32K
    L1i cache:             32K
    L2 cache:              256K
    L3 cache:              8192K
    NUMA node0 CPU(s):     0-7
    Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single tpr_shadow vnmi flexpriority ept fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm xsaveopt

    Voila!
    Virtualization: VT-x
 

Użytkownicy znaleźli tą stronę używając tych słów:

  1. proxmox
  2. virtualization
  3. virtualization cli
  4. proxmox qnap