Multipass to działający w trybie tekstowym orkiestrator lekkich maszyn wirtualnych opartych o Ubuntu LTS. Jak obiecuje producent, ma on umożliwić tworzenie czegoś na kształt mikrochmury na własnej stacji roboczej z systemem Windows, Mac lub Linux. Sprawdźmy, jak to działa. 

Canonical Multipass

Wirtualizacja nie zawsze oznacza wykorzystanie potężnych klastrów serwerów. Często przydaje się ona także w domowych zaciszu oraz na pojedynczych stacjach roboczych w pracy. Można ją wykorzystać do przetestowania innego systemu, sprawdzenia podejrzanego pliku w odizolowanym środowisku, czy tworzenia i testowania kodu budowanych aplikacji.

Rynek oferuje wiele rozwiązań spełniających takie wymagania: VirtualBox oraz VMWare Workstation Player uruchomią niemalże dowolny system, także w wersji z GUI, zapewnią również dosyć spore możliwości konfiguracji. Użytkownikom komputerów Mac znane jest rozwiązanie Parallels Desktop umożliwiające uruchomienie Windowsa na wypadek, gdyby macOS nie mógł akurat zapewnić oczekiwanych funkcji bądź aplikacji. Microsoft zaś w swój najnowszy system wbudował nie tylko Hyper-V, ale także opcję Windows Sandbox uruchamiającą w oknie dodatkową instancję systemu operacyjnego oraz WSL, czyli Windows Subsystem for Linux.

Pod koniec zeszłego roku na rynku pojawiła się jednak jeszcze jedna możliwość: Multipass od Canonical, twórców Ubuntu. To multiplatformowe narzędzie obiecuje możliwość uruchamiania błyskawicznego wielu instancji maszyn wirtualnych z systemem (a jakże) Ubuntu w wirtualnej sieci, także z prekonfiguracją z wykorzystaniem cloud-init. Ma być szybko i prosto. Czy Multipass wywiązuje się ze złożonych obietnic? Sprawdźmy!

Użytkowanie

Narzędzie Multipass zdobyć można na oficjalnej strony multipass.run. Stamtąd pobierzemy plik instalacyjny dla swojego systemu operacyjnego i zainstalujemy go tak samo, jak każdy inny program.

Dostęp do funkcjonalności narzędzia uzyskujemy poprzez terminal uruchomiony z uprawnieniami administratora. Ja, korzystając z Windowsa, wykorzystam w tym celu PowerShella. Na sam początek sprawdźmy poprawność instalacji Multipass wpisując:

multipass version

Komenda zwróci zainstalowaną wersję programu oraz usługi Multipass.

W chwili przygotowania niniejszego artykułu, najnowszą dostępną wersją stabilną jest 1.1. Nic dziwnego – Multipass wciąż stanowi nowinkę, która dopiero zacznie być wzbogacana o kolejne funkcje i poprawki.

Kolejnym krokiem będzie uruchomienie pierwszej instancji. Użytkownicy bardziej rozbudowanych wersji systemu Windows (Pro, Enterprise, Educational) powinni w tym miejscu upewnić się, że mają w systemie włączoną wirtualizację Hyper-V, z niej bowiem Multipass korzysta do uruchamiania swoich maszyn wirtualnych.

Zmiana wirtualizatora (tylko dla użytkowników Windows w wersji Home)

Gorzej mają natomiast użytkownicy podstawowej (Home) wersji Windowsa. Ci, chcąc skorzystać z Multipassa, zmuszeni będą do zainstalowania dodatkowego narzędzia wirtualizacyjnego – VirtualBoxa. Po wykonaniu instalacji konieczna będzie dodatkowa zmiana ustawień Multipass w ten sposób, aby „nauczyć” go korzystania z wirtualizatora innego od domyślnego Hyper-V:

multipass set local.driver=virtualbox

Pomyślne wykonanie komendy sprawi, że Multipass będzie uruchamiał swoje maszyny wirtualne z wykorzystaniem warstwy wirtualizacji zapewnianej przez VirtualBox. Powrót do poprzednich ustawień zakładających wykorzystanie Hyper-V jest możliwy w analogiczny sposób:

multipass set local.driver=hyperv

Uruchomienie pierwszej instancji 

Wykonanie poniższego polecenia:

multipass launch

Po pytaniu wysyłanie danych o użytkowaniu narzędzia celem poprawy jego jakości, rozpocznie się uruchamianie instancji w standardowej konfiguracji.

Uruchamianym w ten sposób instancjom przydzielane są losowe nazwy (na powyższym przykładzie: „nationwide-taipan”) oraz instalowana jest najnowsza wersja Ubuntu LTS.

Spersonalizowane uruchamianie instancji 

Nazwę uruchamianej instancji możemy zmienić. Przykładowo, by ustalić nazwę pierwsza-instancja, należy wykonać komendę:

multipass launch --name pierwsza-instancja

Dostępne obrazy systemu Ubuntu możemy przejrzeć wpisując komendę:

multipass find

Po kilku chwilach otrzymamy listę dostępnych wersji Ubuntu. Jak widać, obsługiwane są jedynie wersje z aktualnym, przedłużonym (LTS) wsparciem.

Jeśli z jakiegokolwiek powodu chcemy skorzystać ze starszej od aktualnej wersji Ubuntu, musimy skorzystać z komendy:

multipass launch <IMAGE>

Gdzie w miejsce <IMAGE> wstawiamy wersję systemu (np. „16.04”), ewentualnie Alias (np. „xenial”) lub wersję (np. „20200318”) – wszystkie te informacje można pozyskać po wykonaniu opisanej wcześniej komendy multipass find.

Oczywiście Canonical Multipass umożliwia również określenie zasobów sprzętowych dla instancji. Służą do tego następujące argumenty:

  • -c, –cpus – określenie ilości rdzeni procesora dla instancji.
  • -d, –disk – określenie pojemności dysku twardego. Ilość przydzielanego miejsca należy określić z wykorzystaniem przyrostków K, M lub G odpowiednio dla kilo-, mega- i gigabajtów.  Minimalna pojemność to 512 MB.
  • -m, –mem – określenie ilości pamięci RAM dla instancji. Ilość przydzielanego miejsca należy określić identycznie, jak w przypadku dysku twardego, nie może to natomiast mniej niż 128 MB.

Standardowo, każda instancja uruchamiana jest z wykorzystaniem jednego rdzenia CPU, 5 GB dysku oraz 1 GB pamięci RAM. Takie zasoby będą wystarczające dla najbardziej podstawowych zadań, ale mogą pojawić się sytuacje, w których będziemy potrzebowali więcej mocy obliczeniowej, pamięci RAM lub miejsca na dysku.

Chcąc uruchomić instancję o nazwie wiecej-zasobow w konfiguracji wykorzystującej 4 rdzenie procesora, 4 GB pamięci RAM oraz 20 GB miejsca na dysku, należy wykonać następujące polecenie:

multipass launch --name wiecej-zasobow --cpus 4 --mem 4G --disk 20G

Oprócz określenia nazwy, wybrania odpowiedniej wersji systemu Ubuntu i określenia zasobów sprzętowych, Canonical Multipass umożliwia również załadowanie konfiguracji cloud-init, czyli multiplatformowych szablonów dla instancji w chmurze publicznej, hybrydowej i prywatnej, które pozwalają uruchomić wszystkie te instancje w formie identycznych klonów. Możliwe jest ustawienie m.in.: kont użytkowników i ich uprawnień, kluczy SSH, lokalizacji, hostname, podmontowanych dysków… Multipass w połączeniu z cloud-init pozwala stworzyć na własnym komputerze coś na wzór popularnych chmur publicznych w skali mikro.

Załadowanie pliku konfiguracyjnego cloud-init do uruchamianej instancji jest możliwe przy pomocy polecenia:

multipass launch --cloud-init <NAZWA_PLIKU>

Omówiliśmy uruchamianie maszyn wirtualnych przy pomocy Canonical Multipass. Czas więc przejść do ich użytkowania.

Użytkowanie maszyn wirtualnych Multipass

Na sam początek warto sprawdzić listę utworzonych instancji. Służy do tego komenda:

multipass ls

Chcąc dowiedzieć się więcej o konfiguracji (m.in. zainstalowanym systemie operacyjnym, stanie, adresie IP, obciążeniu, zużyciu dysku i pamięci) danej instancji, możemy użyć polecenia:

multipass info <NAZWA_INSTANCJI>

Następnie możemy przejść do wykonywania poleceń na instancjach. Można to wykonać na dwa sposoby.

Pierwszy, służący do wykonywania pojedynczych poleceń, to funkcja exec o następującej składni:

multipass exec <NAZWA_INSTANCJI> -- <POLECENIE>

Przykładowo, chcąc wywołać polecenie uname -r na maszynie Ubuntu, wykorzystam komendę:

multipass exec ubuntu -- uname -r

Która, zgodnie z oczekiwaniem, wyświetli wersję jądra Linux.

Chcąc dłużej popracować na naszej instancji, możemy skorzystać z drugiego sposobu wprowadzania poleceń. Do powłoki systemu dostaniemy się z wykorzystaniem funkcji shell. 

multipass shell <NAZWA_INSTANCJI>

Możliwe jest wywołanie funkcji shell bez podania nazwy instancji – wówczas uruchomiona zostanie nowa instancja o nazwie primary, a jeśli taka już istnieje, nastąpi zalogowanie się do niej.

Chcąc dostać się do wspomnianej już instancji o nazwie ubuntu, wykonam więc polecenie:

multipass shell ubuntu

Po czym nastąpi zalogowanie się do tej instancji.

W ten sposób możliwa jest praca na powłoce instancji bez ciągłego wpisywania multipass exec. By wyjść, wystarczy wpisać polecenie:

exit

Zarządzanie stanem instancji

Wyłączanie instancji jest bardzo proste. Wystarczy wpisać polecenie:

multipass stop <NAZWA_INSTANCJI>

Zamiast wyłączać instancję, możliwe jest jej zawieszenie w aktualnym stanie:

multipass suspend <NAZWA_INSTANCJI>

Ponowne uruchomienie wyłączonej lub zawieszonej instancji jest możliwe przy użyciu polecenia:

multipass start <NAZWA_INSTANCJI>

A co, jeśli chcemy wykonać restart? Wystarczy wpisać:

multipass restart <NAZWA_INSTANCJI>

Powyższe funkcje znane są zapewne każdemu, kto korzystał wcześniej z dowolnego narzędzia wirtualizacyjnego. Wyłączanie, wstrzymywanie i uruchamianie instancji odbywa się bardzo szybko, co samo w sobie stanowi niewątpliwą zaletę narzędzia Multipass.

Udostępnianie danych instancji 

Niekiedy pojawiają się sytuacje, gdy chcemy coś przenieść z hosta (komputera, na którym pracują maszyny wirtualne) na instancję lub na odwrót. Z wykorzystaniem narzędzia Multipass jest to całkiem proste. Służy do tego funkcja mount, a jej składnia jest następująca:

multipass mount <ŚCIEŻKA> <NAZWA_INSTANCJI>

Przykładowo więc, chcąc udostępnić instancji ubuntu swój pulpit, wykorzystam komendę:

multipass mount C:\Users\Admin\Desktop ubuntu

W ten sposób w katalogu /home/ubuntu na instancji pojawią się pliki, które mam na swoim pulpicie. Możliwe stanie się również kopiowanie plików z instancji na pulpit komputera.

Gdy udostępnianie danych przestanie już być potrzebne, wystarczy wykonać polecenie:

multipass unmount <NAZWA_INSTANCJI>

Spowoduje zaprzestanie udostępniania danych z i do instancji.

Usuwanie instancji 

Wiemy już, jak utworzyć, spersonalizować i zalogować się do maszyn wirtualnych, a także w jaki sposób je wstrzymywać i ponownie uruchamiać. Wiemy również, jak montować katalogi z naszego komputera do instancji. W jaki jednak sposób usunąć instancje, które nie będą już nam potrzebne?

Pierwszym krokiem jest wykorzystanie funkcji delete:

multipass delete <NAZWA_INSTANCJI>

Aby upewnić się, że instancja została poprawnie usunięta, możemy dodatkowo wyświetlić ponownie listę instancji poleceniem:

multipass ls

Stan (State) usuniętej instancji powinien zmienić się na „deleted”. 

Usuniętej? Czy aby na pewno? Cóż, może być to nieco mylące, ale funkcja delete wcale nie usuwa instancji w całości, ale przenosi je do formy znanego z systemu Windows kosza. W przypadku, gdyby usunięcie danej instancji okazało się błędem, możliwe jest jej odzyskanie. Wystarczy wykonać polecenie:

multipass restore <NAZWA_INSTANCJI>

Jeśli jednak zdecydowanie chcemy pozbyć się usuniętych instancji z dysku, musimy użyć funkcji przypominającej nieco – ponownie używając windowsowej terminologii – oczyszczanie kosza. Służy do tego polecenie:

multipass purge

Uwaga! Nie jest możliwe usunięcie z kosza pojedynczych instancji. Funkcja purge nie przyjmuje żadnych dodatkowych argumentów i usuwa wszystko, co uda jej się znaleźć. Należy więc używać jej z rozwagą.

Multipass jako konkurencja dla WSL? 

Windows Subsystem for Linux, w skrócie WSL, to narzędzie wbudowane w system Windows. Umożliwia ono wykorzystanie linuksowej powłoki i użytkowanie znanych z tego systemu narzędzi. W obecnej wersji stanowi ono formę translatora poleceń linuksowych na polecenia zrozumiałe dla wykorzystywanego w Windowsie jądra NT. Tu Multipass wygrywa bezsprzecznie – umożliwia on uruchamianie wielu pełnych maszyn wirtualnych, a nie jedynie translację zapytań.

Sytuacja zmieni się wraz z nadchodzącą w pierwszej połowie tego roku aktualizacją systemu Windows 10 do wersji 20H1. Jeśli wszystko pójdzie zgodnie z planem (a z tym w Microsofcie bywa różnie), to wspomniana aktualizacja wprowadzi WSL2 – nową wersję Windows Subsystem for Linux z wbudowanym pełnym jądrem Linuksa.

Czy w takiej sytuacji jest jeszcze miejsce dla Multipass? Cóż, rozwiązanie Canonical wciąż ma pewne przewagi. Przede wszystkim, Multipass jest multiplatformowy – potrafi działać zarówno na Linuksie, jak i macOS oraz Windowsie. W tym ostatnim przypadku nie jest konieczne posiadanie wyższych wersji systemu, gdyż uruchamianie maszyn wirtualnych może odbywać się za pośrednictwem ogólnodostępnego i darmowego VirtualBoksa. Różni się także podejście twórców: o ile WSL próbuje w maksymalnym stopniu integrować się z systemem operacyjnym hosta, tak Multipass stawia na większą izolację naśladując chmury obliczeniowe. Mówiąc już o chmurach, nie można zapomnieć o integracji z plikami konfiguracyjnymi cloud-init zapewnianą przez Multipass. Canonical obiecuje, że zamierza dynamicznie rozbudowywać swoje narzędzie, wyposażając je m.in. w integrację z popularnymi IDE i innymi narzędziami programistycznymi. Możliwe stanie się więc np. pisanie kodu na uruchomionym w środowisku windowsowym Virtual Studio Code, by następnie za pośrednictwem jednego przycisku uruchomić ów kod na maszynie wirtualnej działającej pod kontrolą Ubuntu.

Wydaje się więc, że Multipass zdecydowanie warto polecać, jak również uczyć i wykorzystywać, a jeśli potrafimy – pomagać rozwijać. Multipass to narzędzie ciekawe, a wielu aspektach także wyjątkowe.