multipass

Multipass – Maszyny wirtualne na żądanie na dowolnej stacji roboczej

Multipass to narzędzie stworzone przez firmę Canonical Ltd, które od dłuższego czasu towarzyszy mi w mojej przygodzie z testowych maszyn wirtualnych lub kontenerów. Jest to proste, a zarazem potężne narzędzie, które znacząco ułatwia proces tworzenia, zarządzania i testowania wirtualnych środowisk. Multipass ma wiele zalet i jest dostępny na wszystkie systemy: Windows, Mac OS oraz Linux co sprawia, że jest idealnym narzędzie do szybkiego testowania i prototypowania różnych rozwiązań.

Multipass wykorzystuje Hyper-V lub VirtualBox w systemie Windows, QEMU i HyperKit w systemie macOS oraz LXD,QEMU lub KVM w systemie Linux, co zapewnia minimalne obciążenie i najszybszy możliwy czas rozpoczęcia.

W dzisiejszym artykule chciałbym podzielić się z Wami moimi doświadczeniami z Multipass oraz przedstawić trzy jego największe zalety. Dowiedzcie się także, w jaki sposób można wykorzystać to narzędzie do rozmaitych zadań. Wszystkie testy będziemy przeprowadzać na systemie Ubuntu Desktop.

1. Instalacja

Aby zainstalować Multipass na różnych systemach operacyjnych, można użyć odpowiednich poleceń lub instalatorów. Oto jak to zrobić na systemach Linux, macOS i Windows:

Linux (Ubuntu/Debian):

sudo apt update
sudo snap install multipass --classic

Linux (Fedora):

sudo dnf install snapd
sudo ln -s /var/lib/snapd/snap /snap
sudo snap install multipass --classic

macOS:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Windows:

  1. Pobierz najnowszą wersję Multipass ze strony oficjalnej: https://multipass.run/
  2. Uruchom pobrany instalator i postępuj zgodnie z instrukcjami na ekranie, aby zainstalować Multipass na systemie Windows.

Po zakończeniu instalacji Multipass będziesz mógł używać go za pomocą poleceń w terminalu lub interfejsu graficznego (jeśli jest dostępny na twoim systemie).

Uwaga:
ważne jest, aby upewnić się, że wirtualizacja jest włączona w BIOS/UEFI twojego komputera, a także sprawdzić, czy moduł KVM jest załadowany w jądrze Linux.

2. Tworzenie wirtualnych maszyn

Multipass jest niezwykle łatwy do nauki i używania, nawet dla osób niezaznajomionych z wirtualizacją. Dzięki prostym komendom można szybko tworzyć, zarządzać i kontrolować wirtualne maszyny. Dla przykładu, aby stworzyć pierwszą instancję VM wystarczy polecenie:

multipass launch --name my-vm-name

aby zobaczyć listę uruchomionych VM wystarczy wpisać:

multipass list

natomiast aby się połączyć do właśnie utworzonej VM i zacząć na niej pracować:

multipass shell my-vm-name

prawda że proste ?

Jeśli nie podamy żadnych dodatkowych parametrów domyślnie zostanie stworzona VM z aktualną wersją system Ubuntu Server. Możemy sprawdzić jakie obrazy są dostępne i wskazać za pomocą dodatkowego parametru w oparciu o jaki obraz ma zostać stworzona nasza VM:

# lista dostępnych obrazów
multipass find
#uruchamiamy VM w oparciu o wybrany obraz
multipass launch <opcjonalnie_nazwa_obazu> --name=my-vm-name

Nic nie stoi na przeszkodzie aby zdefiniować także inne parametry takie jak RAM,CPU,DYSK

multipass launch --cpus 4 --disk 20G --memory 8G --name=my-vm-name

Wyświetlanie informacji o VM

multipass info my-vm-name

Kopiowanie plików do VM

multipass transfer test.txt my-vm-name:/home/ubuntu

Stop/Start

multipass stop my-vm-name
multipass start my-vm-name

Modyfikacja parametrów VMki

# zatrzymyjemy
multipass stop my-vm-name
# zmieniamy
multipass set local.my-vm-name.cpus=4
multipass set local.my-vm-name.disk=60G
multipass set local.my-vm-name.memory=7G
# startujemy
multipass start my-vm-name

3. Sterownik (backend)

Sterownik to technologia, która umożliwia Multipass’owi emulację działającej maszyny. Inaczej jest test to hypervisor lub technologia pośrednicząca do uruchamiania maszyn wirtualnych. Multipass obsługuje wiele sterowników, ale działa tylko z jednym sterownikiem na raz. Istnieje ustawienie umożliwiające wybranie sterownika: local.driver. By default, Multipass na Linux używa qemu.

3.1 LXD

Jednym z moich ulubionych Driverów jest LXD który zamiast VM tworzy lekkie kontenery, a dzięki temu oferują izolację i zarządzanie na poziomie systemu operacyjnego. Pozwala to na uruchamianie aplikacji w środowisku o wysokiej wydajności, jednocześnie zapewniając izolację i bezpieczeństwo aplikacji. Ponadto, LXD umożliwia szybkie tworzenie, kopiowanie i migrację kontenerów, co ułatwia skalowanie i zarządzanie aplikacjami w dynamiczny sposób.

Instalacja i podmiana sterownika na LXD:

sudo snap install lxd
sudo multipass stop --all
sudo multipass set local.driver=lxd
sudo snap connect multipass:lxd lxd
#sprawdzamy
sudo multipass get local.driver

3.2 libvirt

Z kolei jeśli jako sterownik ustawimy libvirt Multipass będzie tworzył VM tak jak byśmy to robili za pomocą KVM’a.

Instalacja i podmiana sterownika na LibVirt:

sudo apt install libvirt-daemon-system
sudo snap connect multipass:libvirt
sudo multipass stop --all
sudo multipass set local.driver=libvirt
sudo multipass get local.driver

Tak stworzone VM będą także widoczne w libvirt czyli np:

virsh list

3.3 qemu

Powrót do qemu

sudo multipass stop --all
sudo multipass set local.driver=qemu
sudo multipass get local.driver

Dysproporcje cech:
Chociaż Multipass stara się oferować jednolity interfejs we wszystkich obszarach, nie wszystkie funkcje są dostępne we wszystkich backendach i istnieją pewne różnice w zachowaniu np:
– Natywne mocowania są obsługiwane tylko w Hyper-V, QEMU i LXD (ten ostatni od wersji 1.13).
– Dodatkowe sieci są obsługiwane tylko na LXD, Hyper-V, VirtualBox i QEMU na macOS.
– Zawieszanie maszyn wirtualnych jest obsługiwane w QEMU, libvirt i VirtualBox.

4. Sieci

Multipass to narzędzie nastawione na prostotę dlatego też domyślnie tworzy jedną wirtualną sieć i dołącza do niej wszystkie tworzone VM. Jednakże po zmianie sterownika na LXD możesz zarządzać sieciami wirtualnymi za pomocą poleceń, które pozwalają na ich tworzenie, listowanie i konfigurowanie. Oto kilka przykładowych poleceń do sprawdzania i tworzenia sieci:

Sprawdzanie dostępnych sieci:
Aby wyświetlić listę dostępnych sieci w Multipass, możesz użyć polecenia:

multipass networks

Tworzenie sieci:

# tworzenie nowego mostu/przełącznika ze statycznym adresem IP na hoście
nmcli connection add type bridge con-name localbr ifname localbr \
    ipv4.method manual ipv4.addresses 10.31.31.1/24
# sprawdzamy
ip -c -br addr show dev localbr

Spowoduje to utworzenie mostu o nazwie localbr z adresem IP 10.31.31.1/24

Uruchamiamy nową instancję z ręcznie utworzoną siecią:

multipass launch --name test1 --network name=localbr,mode=manual,mac="52:54:00:4b:ab:cd"

Musimy teraz skonfigurować interfejs sieciowy wewnątrz instancji. Możemy to osiągnąć dzięki Netplan.
Następujące polecenia tworzą wymagany plik konfiguracyjny Netplan w instancji oraz ustawiają zdefiniowany adres IP:

multipass exec -n test1 -- sudo bash -c 'cat << EOF > /etc/netplan/10-custom.yaml
network:
    version: 2
    ethernets:
        extra0:
            dhcp4: no
            match:
                macaddress: "52:54:00:4b:ab:cd"
            addresses: [10.31.31.13/24]
EOF'

multipass exec -n test1 -- sudo netplan apply

Przykład:

kamil@legion:~$ nmcli connection add type bridge con-name localbr ifname localbr \
    ipv4.method manual ipv4.addresses 10.31.31.1/24
Connection 'localbr' (31c0ea8e-adc9-4690-b681-896353f27eab) successfully added.

kamil@legion:~$ ip -c -br addr show dev localbr
localbr          DOWN           10.31.31.1/24 

kamil@legion:~$ multipass launch --name test1 --network name=localbr,mode=manual,mac="52:54:00:4b:ab:cd"
Launched: test1

kamil@legion:~$ multipass exec -n test1 -- sudo bash -c 'cat << EOF > /etc/netplan/10-custom.yaml
network:
    version: 2
    ethernets:
        extra0:
            dhcp4: no
            match:
                macaddress: "52:54:00:4b:ab:cd"
            addresses: [10.31.31.13/24]
EOF'

kamil@legion:~$ multipass exec -n test1 -- sudo netplan apply

kamil@legion:~$ ping 10.31.31.13
PING 10.31.31.13 (10.31.31.13) 56(84) bytes of data.
64 bytes from 10.31.31.13: icmp_seq=1 ttl=64 time=0.199 ms
64 bytes from 10.31.31.13: icmp_seq=2 ttl=64 time=0.600 ms

Pamiętaj, że dokładna składnia i dostępne opcje mogą się różnić w zależności od wersji Multipass oraz systemu operacyjnego, więc zawsze warto sprawdzić oficjalną dokumentację Multipass lub uruchomić multipass --help, aby uzyskać najnowsze informacje dotyczące komend i opcji.

5. Montowanie zasobów lokalnych

Jeśli mamy taką potrzebę możemy zamontować dowolny katalog z hosta do instancji multipass np:

# montowanie katalogu domowego
 multipass mount $HOME my-vm-name
# lub
 multipass mount $HOME my-vm-name:/some/path
# sprawdzamy
multipass info my-vm-name

domontowanie wszystkich zasobów:

 multipass umount my-vm-name

6. Kasowanie

Zaznaczanie instancji jako usuniętej

 multipass delete my-vm-name

Instancja nie będzie usunięta a jedynie zaznaczona jako usunięta. W tym momencie może być jeszcze odzyskana za pomocą polecenia:

 multipass recover my-vm-name

W celu trwałego usunięcia wszystkich instancji zaznaczonych jako usunięte należy użyć parametru purge:

multipass purge

Można też połączyć obydwie komendy i usunąć wybraną instancję od razu:

multipass delete --purge my-vm-name

7. Logi

journalctl --unit 'snap.multipass*'

Jak widzisz Multipass to narzędzie, które może znacząco ułatwić zarządzanie wirtualnymi maszynami na platformie Ubuntu. Dzięki swojej prostocie obsługi, szybkości tworzenia maszyn oraz możliwości izolacji środowisk, Multipass staje się nieodłącznym narzędziem dla wszystkich, którzy pracują z wirtualizacją. Bez względu na to, czy jesteś programistą, administratorem systemu czy badaczem, Multipass może przyspieszyć i ułatwić tworzenie, testowanie i zarządzanie środowiskami wirtualnymi. Wypróbuj Multipass i odkryj, jak może ono usprawnić Twoją pracę i projekty. To narzędzie, które może zaoszczędzić wiele czasu i nerwów, pozwalając Ci skupić się na tym, co naprawdę ważne – tworzeniu i rozwijaniu oprogramowania.