aA

Wirtualizacja bez kompromisów, czyli kilka słów o KVM, QEMU, libvirt i virt-managerze

wirtualizacja bez kompromisów

Wirtualizacja umożliwia efektywniejsze wykorzystanie istniejących zasobów sprzętowych, generuje duże oszczędności w zastosowaniach serwerowych, pozwala na budowanie elastycznego środowiska testowego i przygotowuje na transfer danych do chmury. Dlatego dziś bliżej przyjrzymy się KVM, QEMU, libvirt oraz virt-managerowi.

Na początku wyjaśnijmy kilka podstawowych pojęć związanych z wirtualizacją opartą na tytułowym zestawie komponentów:

  1. Hipernadzorca (hiperwizor) – to połączenie oprogramowania i sprzętu, które tworzy, wykonuje i zarządza maszynami wirtualnymi. Komputer, na którym działa hipernadzorca, jest zwany gospodarzem, a każda maszyna wirtualna na hoście jest nazywana gościem. Hipernadzorca zapewnia gościom wirtualną platformę operacyjną, umożliwiając wielu systemom operacyjnym współdzielenie zwirtualizowanych zasobów na tym samym hoście.
  2. KVM (Kernel-based Virtual Machine) – to technologia wirtualizacji typu Open Source, która zmienia jądro Linuksa w hipernadzorcę typu 1 (działa bezpośrednio na poziomie sprzętu). KVM uruchamia aplikacje z prędkością szybszą niż inne, komercyjne hiperwizory. Działa tak, jakby system operacyjny maszyny wirtualnej operował bezpośrednio na maszynie hosta. Kolejną przewagą KVM jest dostęp do kodu źródłowego i elastyczność w integracji z dowolnym oprogramowaniem. Jak sama nazwa wskazuje, KVM jest oparte na jądrze Linuksa. Nie jest więc zaskoczeniem, że obsługuje tylko Linuksa jako system operacyjny hosta.
  3. QEMU – jest hipernadzorcą typu 2 (działa na systemie operacyjnym hosta) i służy do obsługi wirtualizacji sprzętowej. Chociaż QEMU może pracować samodzielnie i emulować wszystkie zasoby maszyny wirtualnej, to rozwiązanie to jest bardzo wolne, ponieważ cała emulacja jest wykonywana software'owo. QEMU jednak znacznie przyspiesza wykorzystując moduł KVM jako akcelerator.
  4. Libvirt – jest zestawem narzędzi dostarczającym jedno API dla wielu różnych technologii wirtualizacji. W przypadku naszego zestawu m.in. tłumaczy konfigurację zapisaną w plikach XML na wywołania QEMU.
  5. virt-manager (skrót od Virtual Machine Manager) – jest aplikacją z graficznym interfejsem użytkownika używaną do zarządzania maszynami wirtualnymi poprzez libvirt. Mimo że jest stworzony głównie dla gości KVM, może również zarządzać kontenerami XEN i LXC. Posiada wbudowane aplikacje VNC i SPICE służące do pełnoekranowego podglądu uruchomionej maszyny wirtualnej.
stats
Statystyki maszyny wirtualnej w Virtual Machine Manager

Instalacja pakietu wirtualizacyjnego

W pierwszej kolejności sprawdźmy, czy sprzętowa wirtualizacja jest obsługiwana przez nasz system. Wynikiem poniższego polecenia powinny być oznaczone czerwonym kolorem flagi vmx lub svm:

egrep '(vmx|svm)' /proc/cpuinfo

KVM jest modułem jądra. Musimy więc sprawdzić, czy jest on już pobrany, a jeśli nie, to go pobrać. W zależności od swojego sprzętu, w wyniku poniższego polecenia powinniśmy otrzymać minimum dwa oznaczenia:

lsmod | egrep '(kvm|kvm_intel|kvm_amd)'

Możliwe, że wirtualizacja sprzętowa nie jest włączona w BIOS-ie. Dlatego jeśli moduły KVM nie zostały wykryte, należy sprawdzić ustawienia BIOS-u. W EuroLinux 8 i w innych, najnowszych systemach Linux klasy Enterprise, niezbędne pakiety wirtualizacyjne zainstalujemy jednym poleceniem:

sudo dnf groupinstall Virtualization

Dzięki oprogramowaniu virt-manager, zestaw KVM/QEMU nie jest już tak trudny w obsłudze, jak to miało miejsce jeszcze kilka lat temu (gdy wykonywane były tylko wywołania QEMU wyłącznie za pomocą CLI). Użytkownik zaznajomiony z obsługą VirtualBoxa bez problemu poradzi sobie z obsługą KVM poprzez GUI Virtual Machine Managera. Konfiguracja sieciowa również została uproszczona. Korzystając z domyślnego ustawienia opcji Network selection gość automatycznie otrzymuje stały adres IP z puli adresów prywatnych klasy C i nie jest wymagana dodatkowa konfiguracja ustawień sieciowych w systemie hosta.

net

Oprócz virt-managera zainstalowane zostaną również następujące narzędzia wspomagające:

  • virt-install – narzędzie wiersza poleceń do tworzenia nowych maszyn wirtualnych. Tworzy gości KVM z linii poleceń za pomocą libvirt
  • virt-clone – narzędzie wiersza poleceń używane do klonowania istniejących nieaktywnych gości. Kopiuje obrazy dysków i definiuje konfigurację z nową nazwą, UUID i adresem MAC wskazującym na skopiowane dyski
  • virt-viewer – lekki interfejs UI do przeglądania i interakcji z graficznym zobrazowaniem zwirtualizowanego systemu operacyjnego
  • virt-xml – narzędzie linii poleceń służące do edycji XML-a maszyny wirtualnej
  • virt-convert – narzędzie wiersza poleceń do konwersji maszyn OVF i VMX VM na maszyny możliwe do uruchomienia z wykorzystaniem libvirt
  • virt-bootstrap – narzędzie linii poleceń umożliwiające łatwą konfigurację głównego systemu plików dla kontenerów opartych na libvirt.

Zanurzmy się głębiej – wirtualizacja zagnieżdżona

KVM obsługuje również wirtualizację zagnieżdżoną, czyli uruchamianie maszyn wirtualnych wewnątrz maszyny wirtualnej. Aby aktywować ten tryb, należy wyedytować (a jeżeli nie istnieje, to utworzyć) plik:

/etc/modprobe.d/kvm.conf

w treści wpisując:

  • dla hosta opartego na Intelu:
options kvm_intel nested=1
  • dla hosta opartego na AMD:
options kvm_amd nested=1

Następnie należy zrestartować maszynę hostującą. Poprawność aktywacji obsługi wirtualizacji zagnieżdżonej można sprawdzić, wykonując polecenie:

cat /sys/module/kvm_intel/parameters/nested

lub dla AMD:

cat /sys/module/kvm_amd/parameters/nested

Jeżeli polecenie zwraca literę „Y” lub cyfrę „1”, to znaczy, że funkcjonalność wirtualizacji zagnieżdżonej jest aktywna na hoście. Należy ją jeszcze aktywować w maszynie gościa poprzez zaznaczenie opcji CPUs->Configuration->Copy host CPU configuration w virt-managerze:

cpu

Aktywacja w maszynie gościa jest możliwa również w CLI poprzez edycję parametru cpu mode w XML-u maszyny wirtualnej:

<cpu mode=”host-model” check=”partial” />

Dostęp do XML-a uzyskamy za pomocą poleceń:

virsh list --all
virsh edit nazwa-maszyny

Więcej informacji na temat obsługi KVM z poziomu CLI można znaleźć w manualu polecenia virsh.

Wirtualizacja zagnieżdżona jest szczególnie przydatna, gdy nasze oprogramowanie wymaga tworzenia maszyn wirtualnych, a musi być uruchomione na zdalnym serwerze u dostawcy usług, który również korzysta ze zwirtualizowanych zasobów. W takim przypadku najczęściej będziemy korzystali z wiersza poleceń, ale dla lepszego zobrazowania tego typu wirtualizacji, poniżej umieszczamy przykład graficzny:

Wirtualna maszyna z systemem EuroLinux uruchomiona w maszynie wirtualnej EuroLinux, która z kolei jest uruchomiona na maszynie fizycznej EuroLinux

Podsumowanie

Ścisła integracja z systemem operacyjnym hosta jest głównym powodem, dla którego twórcy Linuksa zazwyczaj preferują KVM, które zostało włączone do jądra Linuksa już w 2007 roku. Dla porównania, Xen stał się oficjalnie częścią jądra Linuksa dopiero w 2011 roku, osiem lat po pierwszym wydaniu. KVM jest oprogramowaniem Open Source, więc użytkownik nie ponosi dodatkowych kosztów licencyjnych. Jest ono również rozpowszechniane na różne sposoby, często jako część systemu operacyjnego typu Open Source. Domyślnie zawarte jest również w systemach Linux klasy Enterprise – w tym w systemie EuroLinux 8.

Szybkość działania maszyn wirtualnych opartych na KVM, możliwości wirtualizacji zagnieżdżonej i łatwość obsługi z wykorzystaniem GUI virt-managera sprawiają, że połączenie KVM/QEMU/libvirt/virt-manager jest rozwiązaniem doskonałym dla początkującego użytkownika, a virsh, dostępny z linii poleceń, idealnie uzupełnia to połączenie w zastosowaniach serwerowych.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *