XEN: instalacja usług i dodawanie gości

Celem laboratorium jest zapoznanie się z instalacją i konfiguracją hypervisora Xen. Po zakończeniu laboratorium student powinien rozumieć architekturę, na której oparty jest Xen; potrafić go zainstalować i skonfigurować podstawowe domeny gości.

Preliminaria

Jak wszystko na Debianie (jeśli ktoś nie zauważył, pracujemy na Debianie), wymagane programy instalujemy menadżerem paczek apt-get. Krótka instrukcja obsługi dla niewtajemniczonych:

apt-get install paczka

instaluje paczkę. Kiedy w treści laboratorium pojawi się sformułowanie: instalujemy paczkę 'nazwa paczki', należy użyć apt-get'a.

Lekcja 1: Nazewnictwo

Aczkolwiek nazwa ma mało wspólnego ze znaną bohaterką lat 90-tych, warto zapamiętać, że w obu przypadkach powinno wymawiać się 'X' jako 'z'. Zatem 'zen'.

Lekcja 2: Z wielką mocą przychodzi wielka odpowiedzialność

W związku z tym, że konfiguracja Xena wymaga licznych uprawnień, będą Państwo pracować na koncie root'a. Mogą Państwo zatem wszystko zepsuć. W razie odczuwania nieodpartej potrzeby psucia (tudzież wątpliwości, czy jakaś komenda czegoś nie zepsuje/nie zepsuła) proszę wołać prowadzącego, za egoistyczne psucie „samemu” zostały obmyślone wyrafinowane kary:

  1. brak obecności;
  2. brak zaliczenia;
  3. rozmowa z Dziekanem na temat przyszłości studiowania na tym wydziale.

Aby zalogować się na konto root'a, należy wykonać w terminalu polecenie:

sudo su

Lekcja 3: Czy nasz sprzęt da radę

Xen wspiera (w drobnym uproszczeniu) trzy rodzaje gości:

  1. PV (Paravirtualization) — goście są świadomi tego, że są tylko gośćmi na maszynie gospodarzy. Nie muszą udawać, że mają prawdziwy sprzęt — ten typ gości nie wymaga wsparcia sprzętowego dla wirtualizacji. W szczególności mogłoby nawet dojść do tego, że XEN jest zainstalowany na gościu KVM, i posiada gości PV.
  2. HVM (Hardware-Assisted Virtualization) — tak zwana pełna wirtualizacja. Goście nie są świadomi istnienia gospodarza, trzeba im zatem zapewnić całą infrastrukturę. Wymaga to wsparcia sprzętowego.
  3. PV+HVM — obie techniki można mieszać, uzyskująć efekt hybrydowy, np. goście HVM mają zainstalowane specjalne sterowniki pozwalające im lepiej pracować w środowisku Xen.

Zatem, jeżeli chcemy obsługiwać pełną wirtualizację, musimy sprawdzić czy posiadamy wsparcie sprzętowe.

  1. I metoda (niezalecana): sprawdzić w dokumentacji procesora
  2. II metoda: sprawdzić wyjście komendy:
    lscpu

    w poszukiwaniu sekcji „Wirtualizacja” (ew. angielski odpowiednik). Powinno znajdować się tam informacja, jakie technologie są wspierane, w przypadku procesora marki AMD, szukamy nazwy 'AMD-V'.

  3. III metoda (zalecana): sprawdzić zawartość pliku /proc/cpuinfo pod kątem występowania napisów 'vmx' (technologia Intela) lub 'svm' (technologia AMD). Polecamy zastosowanie narzędzi typu grep, egrep, etc.

Pytanie 1: czy nasz sprzęt wspiera writualizację sprzętową? Jeśli tak, to w jakiej technologii?

Jeśli chodzi o inne wymagania sprzętowe, wiele zależy od typu gości. Dobrze byłoby mieć więcej niż jeden rdzeń, np. po jednym na gościa + gospodarz. Poza tym rozsądnie jest założyć, że gość może zużyć około 512MB RAM'u i jakieś 5GB miejsca na dysku twardym.

Pytanie 2: Czy nasze PC'y wystarczą na spokojne uruchomienie trzech gości?

  • Podpowiedź 1: proszę posiłkować się narzędziami: lscpu, fdisk, free.
  • Podpowiedź 2: zanim zaczną Państwo wołać prowadzącego, proszę sprawdzić dokumentację polecenia, np.
    fdisk --help

    lub

    man fdisk

Lekcja 4: Konfiguracja sieci

Żeby być dobrym gospodarzem, trzeba mieć skonfigurowaną sieć. Xen nie zrobi tego za nas. Potrzebujemy mostka („bridge interface”), który pozwoli nam maszyny gości podpiąć pod fizyczny interfejs sieciowy. Istnieje co najmniej pięć narzędzi potrafiących stworzyć bridge interface:

  1. NetworkManager (nawet z poziomu GUI),
  2. systemd,
  3. ip,
  4. bridgeutils,
  5. zwykły edytor tekstu.

Mamy to nieszczęście, że Debian wspiera wszystkie z nich. Ze względu na prostotę użyjemy ostatniej metody (nie znaczy najlepszej). Zacznijmy od instalacji pakiety bridge-utils (patrz: preliminaria). Dzięki temu pakietowi możemy używać nowej komendy brctl, służącej do kontrolowania istniejących mostków.

Pytanie 3: Ile jest aktualnie mostków w systemie, jak je wyświetlić? Proszę skorzystać z dokumentacji komendy.

Zanim dodamy mostek, musimy sprawdzić jakie fizyczne interfejsy sieciowe istnieją w naszym systemie. Ponownie istnieje na to setka sposobów, ale najprościej jest użyć polecenia:

ip addr show

i znaleźć połączenie posiadające przypisany adres ip.

Pytanie 4: Ile jest fizycznych interfejsów sieciowych w systemie i jak się nazywają?

UWAGA: gdyby ktoś te laboratoria wykonywał przez sesję ssh, niech ma się na baczności. Bardzo łatwo można doprowadzić do zerwania połączenia, więc zawsze trzeba mięć pod ręką inny sposób komunikacji.

Aby dodać mostek, edytujemy plik /etc/network/interfaces. Aktualnie powinien tam być tylko jeden wpis na temat interfejsu loopback. Poniżej dopisujemy wpis dotyczący fizycznego interfejsu.

iface <nazwa fizycznego interfejsu sieciowego> inet manual

manual mówi tyle, że interfejs ten ma mięć ręczny ustawiany adres ip. Robimy tak dlatego, że od teraz to mostek będzie odpowiadał za komunikację i to on będzie korzystał z tego adresu. W tym celu dopisujemy nowy wpis dotyczący interfejsu mostka o wiele mówiącej nazwie xenbr0:

auto xenbr0
iface xenbr0 inet dhcp
    bridge_ports <nazwa fizycznego interfejsu sieciowego>

, gdzie nazwa występująca po bridge_ports mówi, z jakiego interfejsu fizycznego będzie korzystał mostek.

Teraz proszę zrestartować system, np. komendą reboot.

Pytanie 5: Ile teraz mostków jest w systemie?

Pytanie 6: Proszę ponownie użyć komendy: ip addr show. Jakie zmiany wystąpiły w połączeniu domyślnym?

Lekcja 5: Instalacja

Zaczynamy łatwo, proszę zainstalować paczkę xen-linux-system.

Teraz zacznie się dziać magia: otóż, Xen to taki trochę system operacyjny pasożyt korzystający z zasobów, sterowników, etc. systemu gospodarza. Żeby mógł się dossać do naszego systemu musimy go uruchomić jak każdy inny system operacyjny — z poziomu menadżera bootowania GRUB. Możemy to zrobić ręcznie wybierając odpowiednią pozycję przy włączaniu komputera, ale w przypadku serwerów to głupi pomysł. W przypadku awarii chcemy, żeby Xen włączył się domyślnie.

Kolejność opcji bootowania określona jest przez nazwy plików w katalogu /etc/grub.d. Plik o mniejszym numerku na początku ma większy priorytet. Pliki 00_header i 05_debian_theme mają największy priorytet, bo to one definiują wygląd menu bootowania. Plik 10_linux natomiast to nasz poczciwy debian, który ma aktualnie większy priorytet od Xena: 20_linux_xen. Najprostszym sposobem, żeby to zmienić, to zmienić nazwę na, np. 08_linux_xen. Problemem byłoby jednak, gdyby ktoś zaktualizował paczkę xen-linux-system, mogłyby wtedy powstać konflikty. Żeby zmienić nazwę pliku z paczki tak, żeby nie doszło do konfliktów, trzeba użyć narzędzia dpkg-divert, np.

dpkg-divert --add --rename --divert <nowa ścieżka pliku> <stara ścieżka pliku>

Proszę użyć tego narzędzia, aby zmienić nazwę 20_linux_xen na 08_linux_xen. O wyniki operacji proszę się upewnić korzystając z komendy ls.

Następnie proszę uruchomić komendę:

update-grub

Jest to komenda aktualizująca konfigurację gruba i należy ją wywołać przy każdej zmianie jego konfiguracji.

Teraz ponownie włączamy komputer ponownie. Xen powinien być pierwszą opcją na liście.

Lekcja 6: konfiguracja domeny gospodarza

Teraz znowu jesteśmy w grze, nie powinniśmy odczuwać żadnej różnicy, ale… nasz poczciwy debian jest teraz jedną z maszyn (domen) Xena! Wyjątkową, bo wyjątkową, ale zawsze. Żeby upewnić się, że Xen działa, możemy zalogować się na konto roota i wykonać kilka komend konsoli xena, np.

xl info
xl list
xl help 
xl top

Pytanie 7: Jak się nazywa domena naszego poczciwego Debiana?

Pytanie 8: Do czego służy komenda xl top?

Zanim przejdziemy do instalacji gości, musimy zadbać o naszego gospodarza. Problemem jest to, że aktualnie gospodarz to zwykła domena, która będzie musiała współdzielić zasoby z innymi gośćmi. W szczególnym przypadku może zabraknąć zasobów dla gospodarza. Dlatego też musimy zarezerwować dla niego trochę pamięci i czasu procesora.

Pamięć

Plik konfiguracji Xena: /etc/xen/xend-config.sxp ma lisp'ową składnię, tzn. żeby ustawić opcję o nazwie opcja na wartość wartość, należy w nim wpisać linijkę:

(opcja wartość)

Interesują nas dwie opcje:

  • dom0-min-mem, której wartość to ram (w megabajtach) zarezerwowany dla domeny gospodarza.
  • enable-dom0-ballooning, której wartość to boolean (yes/no), oznaczający, czy Xen może pożyczać pamięć od domeny gospodarza dla innych gości.

Zadanie 1: Proszę, używając pliku konfiguracyjnego, zarezerwować dla gospodarza jeden gigabajt ramu i zabronić Xenowi pożyczania pamięci.

Plik konfiguracji gruba: /etc/default/grub zawiera domyślne opcje bootowania. W szczególności można w nim przekazać dodatkowe argumenty w zmiennej GRUB_CMDLINE_XEN, np.

GRUB_CMDLINE_XEN="opcja1=wartosc opcja2=wartosc flaga"

Aby zarezerwować pamięć dla domeny gospodarza, trzeba ustawić opcję bootowania Xena o nazwie „dom0_mem” na wartość odpowiadającą rezerwowanej pamięci, np. „512M”.

Zadanie 2: Proszę wpisać odpowiednie wartości w pliku konfiguracyjnym gruba. Następnie zrestartować system i sprawdzić, czy zmiany rzeczywiście zostały wprowadzone.

Pytanie 9: Czy pamiętaliście o wywołaniu komendy, która zawsze trzeba wywołać przy zmianie konfiguracji gruba?

Procesor

Chcemy zarezerwować chociaż jeden rdzeń dla naszego dzielnego debiana. Żeby to zrobić, należy wykonać dwa zadanka:

  • w konfiguracji xena, ustawić wartość opcji dom0-cpus na wartość 1
  • w konfiguracji gruba, dodać do opcji bootowania xena:
    • opcję dom0_max_vcpus o wartości 1
    • flagę (czyli opcję bez wartości dom0_vcpus_pin)

I znowu magiczna komenda, i znowu restart, i znowu trzeba sprawdzić, czy wszystko działa według naszych gustów.

Lekcja 7: Instalowanie gości

Dobra, zbliżamy się do meritum. Żeby stworzyć domenę „gościa”, wystarczy użyć komendy:

xl create <ścieżka do pliku konfiguracji gościa>

Rzecz się wydaje prosta, ale brakuje nam pliku konfiguracji maszyny. Moglibyśmy stworzyć własny na podstawie dokumentacji i plików przykładowych: /etc/xen/xlexample.hvm oraz /etc/xen/xlexample,pvlinux, ale spróbujmy zrobić to prościej.

Zacznijmy od zainstowania pakietu xen-tools. Zawiera on kilka narzędzi, nas zainteresuje w szczególności jedno: xen-create-image.

Zadanie 3: Korzystające z dokumentacji tego polecenia, proszę stworzyć obraz spełniający dane warunki:

  • nazwa hosta: „lab1”
  • pamięć 512MB
  • dwa wirtualne procesory
  • sieć skonfigurowana przez dhcp
  • dystrybucja debian jessie
  • zapis obrazu używając lvm, grupy o nazwie sitw (ostatnia opcja w manualu komendy).

Narzędzie pobiera i konfiguruje dla Państwa świeżą instalacje debiana, proszę spędzić 5 minut na lekturze internetu, co to jest lvm. Lub innych konstruktywnych zajęciach.

Pytanie 11: Jakie jest hasło root'a utworzonej maszyny?

Po udanym utworzeniu obrazu gościa, trzeba uruchomić maszynę. Jej plik konfiguracyjny znajduje się w /etc/xen. Proszę użyć komendy xl create do uruchomienia maszyny.

Pytanie 12: Jaki jest teraz wynik komendy xl list.

Pytanie 13: Ile istnieje teraz interfejsów sieciowych na gospodarzu?

Lekcja 8: Sterowanie gośćmi

Aby zalogować się na gościa wystarczy użyć komendy:

xl console <nazwa gościa>

Mam nadzieję, że pamiętają Państwo hasło roota… Jeżeli uda się Państwu zalogować na maszynę, konsolę można opuścić używając skrótu CTRL+].

Istnieją oczywiście inne metody logowania do maszyny gościa. Spróbujmy zalogować się na niego przez ssh i stworzyć na nim jakąś usługę, żeby nie czuł się bezużyteczny.

Konfiguracja SSH na gościu

  1. Tworzymy na gościu nowego użytkownika nie-roota (xl console + adduser).
  2. Jako root uruchamiamy ssh (systemctl start ssh && systemctl enable ssh).
  3. Jako root sprawdzamy adres ip interfejsu sieciowego (to chyba już umiemy)
  4. Opuszczamy maszynę

Teraz wystarczy zalogować się poprzez ssh używając nowo stworzonego użytkownika na podanym adresie.

ssh user@adres

Pytanie 13: Czy kolega/żanka z innej grupy też może zalogować się przez ssh na Państwa gościa?

Wirtualny serwer WWW

  1. Logujemy się na konto root'a na gościu
  2. Instalujemy pakiet apache2
  3. Uruchamiamy usługę apache2 (znowy systemctl, chyba już Państwo załapali jak to działa?)
  4. Modyfikujemy plik /var/www/html/index.html
  5. Z poziomu gospodarza uruchamiamy przeglądarkę i oglądamy stronę pod adresem IP gościa.

Pytanie 14: Czy kolega/żanka z innej grupy też widzi Państwa stronę?

Lekcja 9: Sprzątanie

Zadanie 4: Zatrzymać gościa jednym z poleceń 'xl'.

Zadanie 5: Usunąć obraz gościa poleceniem xen-delete-image

Teraz trzeba tylko przygotować komputer na przybycie kolejnej grupy laboratoryjnej. W tym celu, proszę uruchomić, jako root, komendę:

cd /home/student/sitw && ./clean_xen_lab1.sh

Następnie proszę uruchomić komputer ponownie, tym razem bez Xena i zaktualizować konfigurację gruba:

update-grub
pl/dydaktyka/sitw/2016/xen/lab1.txt · ostatnio zmienione: 2017/07/30 20:36 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0