Tutoriel Linux

Libvirt : uruchamianie VM za pomocą virsh i sprawdzanie jej sieci

Débutant4 min de lecture

Wyłączona maszyna wirtualna niekoniecznie jest uszkodzona. Na hoście KVM pierwszym ryzykiem jest wydanie poleceń w niewłaściwej domenie, a następnie zmodyfikowanie mostku lub sieci produkcyjnej, podczas gdy wystarczy sprawdzić stan libvirt.

Za pomocą virsh można zidentyfikować maszynę wirtualną, uruchomić ją, a następnie sprawdzić interfejs i uzyskaną adres IP. Poniższa procedura celowo ogranicza się do maszyny wirtualnej w laboratorium oraz do wirtualnej sieci libvirt.

Pingwin Tux między dwiema maszynami wirtualnymi połączonymi przez sieć libvirt
Virsh uruchamia domenę, a następnie libvirt umożliwia odczytanie jej interfejsu i sieci.

Zidentyfikuj maszynę wirtualną i jej sieć przed uruchomieniem

Zaloguj się na hoście KVM, a nie w gościu. Zachowaj również dostęp do konsoli maszyny wirtualnej. Jeśli sieć nie odpowiada po uruchomieniu, ta konsola zapobiega bezmyślnemu dotykaniu konfiguracji sieci hosta.

sudo virsh list --all
sudo virsh net-list --all
sudo virsh domiflist vm-lab

Zamień vm-lab na nazwę wyświetloną przez virsh list --all. Pierwsze polecenie informuje, czy domena jest wyłączona. Drugie pokazuje dostępne sieci libvirt. Trzecie przypisuje interfejs maszyny wirtualnej do sieci wirtualnej, mostku lub interfejsu fizycznego.

  • Interfejs połączony z default często korzysta z sieci NAT dostarczonej przez libvirt.
  • Mostek taki jak br0 umieszcza maszynę wirtualną w sieci hosta i wymaga kontroli po stronie DHCP lub VLAN.
  • Pusta źródło lub brak interfejsu wymaga diagnostyki definicji XML maszyny wirtualnej, a nie ponownego uruchamiania libvirt.

Zachowałbym sieć default dla maszyny wirtualnej testowej. Zapewnia prosty zakres do odczytu z umów DHCP libvirt. Mostek produkcyjny zmienia diagnozę i nie powinien być modyfikowany w celu przetestowania pojedynczej maszyny.

Uruchom domenę i sprawdź jej stan

Gdy nazwa domeny i interfejs są zgodne, uruchom tylko tę maszynę wirtualną.

sudo virsh start vm-lab
sudo virsh list --all
sudo virsh dominfo vm-lab

virsh start powinno zwrócić Domena 'vm-lab' uruchomiona, a następnie virsh list --all powinno wyświetlać stan running. virsh dominfo potwierdza domenę, jej stan i ilość pamięci wymaganej bez otwierania konsoli graficznej.

Jeśli uruchomienie się nie powiedzie, przeczytaj dziennik obecnego uruchomienia zanim cokolwiek zmienisz. Ostatnie instalacje mogą używać virtqemud, starsze libvirtd.

sudo journalctl -u virtqemud -u libvirtd -b --no-pager | tail -n 50

Wiele błędów dotyczących ścieżek ISO, obrazów dysków, uprawnień lub zasobów pojawia się tutaj. Dziennik dostarcza dokładny punkt wyjścia. Ponowne uruchomienie wszystkich usług wirtualizacji może przerywać działanie innych aktywnych maszyn wirtualnych.

Znajdź adres IP maszyny wirtualnej

Uruchomiona maszyna wirtualna może nie mieć widocznego adresu z poziomu hosta. Przy sieci NAT default zacznij od umów DHCP libvirt.

sudo virsh domifaddr vm-lab --source lease
sudo virsh net-dhcp-leases default

Pierwsze polecenie łączy adres z interfejsem domeny, gdy libvirt zna umowę. Drugie wyświetla umowy sieci default. Jeśli maszyna wirtualna jest połączona z mostkiem, te polecenia mogą pozostać puste, podczas gdy gość działa poprawnie.

W takim przypadku użyj agenta QEMU, jeśli gość go uruchamia, a następnie konsolę, jeśli to konieczne.

sudo virsh domifaddr vm-lab --source agent
sudo virsh console vm-lab

Z konsoli maszyny wirtualnej uruchom ip -br addr, a następnie ip route. Przewodniki Ip addr w systemie Linux i Route IP w systemie Linux pomagają w interpretacji interfejsu i bramy. Aby wyjść z virsh console, użyj Ctrl + ].

Sprawdź sieć bez dotykania mostka

Jeśli maszyna wirtualna uruchamia się, ale pozostaje bez adresu w sieci default, najpierw sprawdź jej stan.

sudo virsh net-info default
sudo virsh net-list --all

W środowisku testowym sieć default zadeklarowana jako nieaktywna może być uruchomiona przy pomocy sudo virsh net-start default. Następnie wróć do virsh domifaddr vm-lab --source lease. Ta czynność nie jest odpowiednia dla mostków roboczych, VLAN-ów lub sieci zarządzanej przez inny zespół.

Gdy interfejs znajduje się na mostku, sprawdź w gościu, czy interfejs otrzymał adres i trasę. Problem leży więc często po stronie DHCP, VLAN lub filtracji sieciowej, a nie w poleceniu virsh start.

Zatrzymaj poprawnie maszynę wirtualną testową

Po sprawdzeniu poproś o poprawne wyłączenie gościa i sprawdź jego stan. virsh destroy natychmiast odcina zasilanie wirtualne. Trzymaj to dla zablokowanej maszyny wirtualnej, po ocenie ryzyka uszkodzenia.

sudo virsh shutdown vm-lab
sudo virsh list --all

Dokumentacja virsh libvirt szczegółowo opisuje warianty każdego polecenia. Na hoście, który gospodaruje aktywnymi maszynami wirtualnymi, dobra granica pozostaje prosta: przeczytaj domenę i jej interfejs przed jakąkolwiek globalną akcją na usługach lub sieci.