Wirtualizacja środowiska z wykorzystaniem KVM

Wirtualizacja środowiska pozwala na szybką i bezpieczną pracę z systemami informatycznymi. Nie każda aplikacja może jednak być skonteneryzowana i zapakowana w kontener Dockera - tutaj z pomocą przychodzi KVM. KVM, czyli Kernel-based Virtual Machine, jest to środowisko, na którym możliwe jest uruchomienie maszyny wirtualnej. Skojarzenie z VirtualBox jest jak najbardziej trafne - zamysł jest dokładnie ten sam. Technologii pozwalających na tworzenie środowisk wirtualnych jest oczywiście więcej - choćby VMware czy Hyper-V.

18 marca 2021

Instalacja KVM na systemie Linux Ubuntu 20.04

W pierwszej kolejności należy sprawdzić, czy procesor wspiera technologię wirtualizacji. Do tego służy poniższe polecenie:

grep -Eoc '(vmx|svm)' /proc/cpuinfo

W moim przypadku polecenie zwróciło 16, czyli liczbę rdzeni CPU. Jeżeli zwrócona zostanie wartość 0, należy w ustawieniach BIOS sprawdzić, czy włączona jest wirtualizacja. Na to nie ma jednego sposobu – warto sprawdzić w instrukcji lub na stronie producenta. Następnym krokiem jest sprawdzenie, czy procesor wspiera wirtualizację sprzętową. Do tego służy polecenie kvm-ok, które staje się dostępne po zainstalowaniu pakietu cpu-checker:

sudo apt install cpu-checker

Jeżeli wszystko skonfigurowane jest prawidłowo, po uruchomieniu polecenie kvm-ok, powinna pojawić się mniej więcej taka informacja:

INFO: /dev/kvm exists
    KVM acceleration can be used

Kolejną czynnością do wykonania jest zainstalowanie następujących paczek:

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager
  1. quemu-kvm służy do obsługi wirtualizacji sprzętowej KVM
  2. libvirt-daemon-system dodaje pliki konfiguracyjne do uruchomienia serwisu w systemie
  3. libvirt-clients pozwala na zarządzanie platformami wirtualizacji
  4. bridge-utils służy do konfigurowania mostków pozwalających na komunikację sieciową
  5. virtinst zawiera pakiet poleceń umożliwiających zarządzanie maszynami wirtualnymi
  6. virt-manager to okienkowy manager maszyn wirtualnych

Na koniec zostało dodanie użytkownika do grup kvm i libvirt:

sudo usermod -aG libvirt $(whoami)
    sudo usermod -aG kvm $(whoami)

Aby powyższe polecenia przyniosły efekt, należy się wylogować i zalogować ponownie.

Źródło – https://linuxize.com/post/how-to-install-kvm-on-ubuntu-20-04/

Tworzenie obrazu maszyny wirtualnej

Udało się przygotować środowisko, można więc przejść do postawienia maszyny wirtualnej. Drogi są dwie – można to zrobić ręcznie za pomocą virt-manager albo użyć rozwiązania automatycznego. Postawimy maszynę wirtualną z systemem Ubuntu Server 20.04, zatem można w tym przypadku użyć narzędzia autoinstall.

Zaczniemy od przygotowania “miejsca”, gdzie zainstalowany zostanie system. Posłuży do tego polecenie truncate.

truncate -s 10G image.img

Utworzony zostanie plik mający rozmiar 10GB, który to będzie naszym wirtualnym dyskiem dla maszyny. Teraz czas na przygotowanie konfiguracji automatycznej instalacji. Istnieje oczywiście możliwość zastosowania debianowego preseed (Ubuntu to zmutowany Debian), natomiast bardziej przyjazny będzie wspomniany wcześniej autoinstall. Minimalna
konfiguracja niezbędna do podstawowej instalacji systemu wygląda w ten sposób:

#cloud-config
	autoinstall:
		version: 1
		identity:
			hostname: ubuntu-server
			password: SOME_HASHED_PASS
			username: clurgo

Wartość SOME_HASHED_PASS, jak nazwa wskazuje, zawiera zahashowane hasło, jakie otrzyma tworzony użytkownik. Można je wygenerować na kilka sposobów, natomiast najprostszą metodą jest zastosowanie polecenia mkpasswd. Jeżeli nie jest ono domyślnie zainstalowane, znaleźć je można w pakiecie whois:

sudo apt install whois

A następnie można wygenerować hash hasła, na przykład tak:

echo -ne "clurgo" | mkpasswd --method=SHA-512 --stdin

Nie przejmuj się, jeżeli to polecenie za każdym razem zwróci inny wynik – jest to jak najbardziej oczekiwane zachowanie (link).

Powyższą konfigurację należy zapisać w jakimś katalogu pod nazwą user-data. Ostatnim etapem przygotowań jest stworzenie pliku meta-data, który w naszym przypadku będzie pusty:

touch meta-data

W tym momencie powinniśmy mieć w jakimś katalogu roboczym dwa pliki – user-data oraz meta-data.

Należy je wystawić po HTTP. Nie będzie potrzebny do tego jakiś specjalny serwer, w tym pomoże nam Python 3:

python3 -m http.server 3003

Już prawie jesteśmy w domu – pozostało jedynie pobranie ISO z obrazem naszego serwera. Plik ten można pobrać ze strony Ubuntu. Po zakończeniu pobierania należy stworzyć katalog, gdzie zamontujemy nasze ISO, można to zrobić na przykład tak:

sudo mkdir -p /mnt/ubuntu-server && sudo mount /home/mlas/Pobrane/ubuntu-20.04.2-live-server-amd64.iso /mnt/ubuntu-server

Ostatnim krokiem jest uruchomienie instalacji:

kvm -no-reboot -m 4096 \
	-drive file=image.img,format=raw,cache=none,if=virtio \
	-cdrom /home/mlas/Pobrane/ubuntu-20.04.2-live-server-amd64.iso \
	-kernel /mnt/ubuntu-server/casper/vmlinuz \
	-initrd /mnt/ubuntu-server/casper/initrd \
	-append 'autoinstall ds=nocloud-net;s=http://_gateway:3003/'

Jeżeli wszystko zostało wykonane poprawnie, po kilku minutach instalacja się zakończy – parametr -no-reboot sprawia, że maszyna wirtualna wyłącza się po procesie instalacji.

Ostatnie szlify

Użyjemy teraz managera maszyn wirtualnych w formie okienkowej. Maszyna jest już gotowa do użycia – skonfigurowaliśmy wirtualizację w systemie, zainstalowaliśmy niezbędne oprogramowanie, skonfigurowaliśmy automatyczną instalację, a następnie uruchomiliśmy cały proces. Teraz mamy plik image.img, który wypadałoby uruchomić.
Uruchamiamy zatem naszego managera – można to zrobić z poziomu listy aplikacji lub linii poleceń:

virt-manager

Następnie tworzymy nową maszynę, wybierając ikonkę monitora po lewej. Naszym oczom ukazuje się takie oto okienko:

Należy zaznaczyć ostatnią opcję – obraz dysku stworzyliśmy już wcześniej, a następnie przechodzimy dalej:

Po wybraniu opcji Przeglądaj zobaczymy okno wyboru woluminu. Można taki wolumin utworzyć w razie potrzeby, nas jednak interesuje znalezienie pliki image.img – tam znajduje się nasza maszyna wirtualna.

Po wybraniu obrazu wracamy do poprzedniego okna, w którym należy wybrać system operacyjny – tutaj będzie to Ubuntu 20.04. Po wpisaniu kilku pierwszych liter pojawiają się podpowiedzi:

W następnym okienku można zdefiniować ilość pamięci oraz liczbę procesorów, ja zostawiłem domyślne:

Na ostatnim ekranie można ustawić nazwę maszyny i zakończyć cały proces:

Po wybraniu opcji Ukończ, maszyna zostaje wystartowana, a my możemy się zalogować:

bannerbanner

Your software development experts

We’re a team of experienced and skilled software developers – and people you’ll enjoy working with.

Start Your Projectadd