W dzisiejszym wpisie odbiegniemy trochę od narzędzi chmurowych i zajmiemy się kwestią wirtualizacji. Potraktujcie ten artykuł jako wstęp do Hyper-V – narzędzia, które pozwala nam na tworzenie i zarządzanie maszynami wirtualnymi. Korzystając z niego będziemy mogli przygotowywać różnego typu tzw. laby, czyli środowiska testowe, również na potrzeby testowania usług chmurowych Microsoft. Ale dzisiaj nie o Hyper-V, a wirtualizacji, dlatego też nie przedłużając już przejdźmy do konkretów. Zapraszam!
Koncepcja wirtualizacji
Zacznijmy od wyjaśnienia koncepcji wirtualizacji. Zgodnie z definicją wirtualizacja jest procesem symulowania zasobów logicznych, które wykorzystują jakąś część dostępnych zasobów fizycznych na danym urządzeniu. Gdybyście szukali jednak tylko definicji trafilibyście pewnie na wikipedię lub inne tego typu źródła. Dlatego też nie zamierzam zostawić Was tutaj bez obszernego wyjaśnienia i przykładu.
Wirtualizacja pozwala nam podzielić nasze fizyczne urządzenie (np. komputer czy serwer) na mniejsze, logicznie odizolowane od siebie części. Takie części to np. maszyny wirtualne, czyli mówiąc bardzo obrazowo „komputery w komputerze”. Dzięki temu, mając np. jeden fizyczny komputer/serwer możemy posiadać na nim kilka mniejszych, wirtualnych maszyn. Każda z nich może mieć zupełnie inny system operacyjny, inną „wielkość” itd. Możemy powiedzieć, iż poza wykorzystywaniem tych samych zasobów fizycznych, takich jak dysk czy RAM, maszyny te są od siebie niezależne.
Przykład zastosowania wirtualizacji
Aby dobrze to zrozumieć posłużmy się rysunkiem pomocniczym:
Jako przykład bierzemy fizyczny serwer (biała ramka na schemacie), który np. stoi w serwerowni w naszej firmie. Abstrahując od tego, czy podane liczby są realne, przyjmijmy, iż ma on dyski o pojemności 8TB oraz 128GB RAM. Jakie jest prawdopodobieństwo, iż korzystając z serwera będziemy przez cały czas wykorzystywali 100% jego zasobów? Bardzo niskie, a o ile tak będzie, to z pewnością pojawi się na jego miejsce większy lub dodatkowy serwer. Korzystając z takiego serwera przy jego obciążeniu na poziomie np. 70% nie wykorzystujemy aż 30% jego zasobów. Ponieśliśmy i ponosimy więc koszty, a nie wykorzystujemy tego co mamy w całości. Stąd właśnie pomysł na wirtualizację, która pozwoli nam zminimalizować ilość zasobów, które nie są w danym czasie wykorzystywane.
Fizyczny serwer na schemacie podzieliliśmy na 7 różnych maszyn wirtualnych (czerwone ramki). Maszyny mogą być różnej wielkości, czy wykorzystywać różne systemy operacyjne. Są zupełnie niezależnymi od siebie elementami, są od siebie odizolowane logicznie, ale nie odizolowane fizycznie (fizycznie to przez cały czas ten sam komputer/serwer). Fakt, iż maszyny są od siebie logicznie odizolowane powoduje, iż mogą one zupełnie nie mieć kontaktu z innymi maszynami czy Hostem. Hostem w kontekście wirtualizacji nazywamy fizyczne urządzenie, na którym znajduje się maszyna wirtualna. Aby maszyna wirtualna wiedziała o istnieniu innych maszyn czy fizycznego urządzenia musimy skonfigurować odpowiednią komunikację sieciową pomiędzy nimi.
Benefity wirtualizacji
Wiemy już z grubsza jak działa wirtualizacja i co możemy osiągnąć za jej pomocą. Naturalnym pytaniem, które prawdopodobnie urodziło się w Waszych głowach jest – dlaczego warto z niej korzystać?
- Wspomniana już zwiększona efektywność wykorzystania posiadanych zasobów. Korzystając z maszyn wirtualnych możemy ograniczyć ilość niewykorzystywanych w danym momencie zasobów do minimum. Oprócz demonstrowanego wyżej podziału na mniejsze części, możemy jeszcze przypisywać zasoby w sposób dynamiczny. Hypervisory, czyli oprogramowanie służące do zarządzania procesami wirtualizacji (np. Hyper-V, Virtualbox, VMWare) pozwala nam konfigurować takie zachowanie. Dynamiczne przypisywanie zasobów polega na tym, iż dana maszyna otrzymuje np. dokładnie tyle RAM-u, ile potrzebuje do płynnego działania. o ile jest obciążona – otrzyma więcej RAM-u. o ile w danym momencie wykonuje się na niej mniejsza ilość operacji – liczba przyznanego RAM-u zostaje zmniejszona. Wszystko dzieje się w sposób automatyczny. Podobnie jest np. z dyskiem – może on zajmować tyle miejsca na fizycznym dysku, ile jest faktycznie potrzebne maszynie wirtualnej w danym momencie.
- Zmniejszone koszty, które wynikają poniekąd z punktu pierwszego. Mniej zasobów jest niewykorzystywanych, więc tym samym mniej zasobów czy serwerów musimy kupować. Im większa skala – tym większa oszczędność. Dodatkowo możemy kupić np. jeden duży serwer, zamiast wielu dużo mniejszych, co oszczędza zarówno koszty, jak i np. miejsce w serwerowni.
- Możemy tworzyć maszyny wirtualne z zupełnie różnymi systemami operacyjnymi. W ramach jednego serwera możemy posiadać np. 10 maszyn wirtualnych z 10 różnymi systemami operacyjnymi. W przypadku, gdybyśmy nie korzystali z wirtualizacji – niezbędny byłby zakup 10 oddzielnych serwerów.
- Odizolowanie maszyn wirtualnych pozwala na przeprowadzanie np. analizy złośliwego systemu czy testowanie. Chcesz przetestować zmiany, które chcesz wprowadzić na swoim komputerze? Zamiast robić to na oddzielnym urządzeniu, możesz gwałtownie utworzyć maszynę wirtualną i przetestować zmiany na niej. Zastanawiasz się, czy kliknięcie w dany link będzie bezpieczne? Uruchom go w maszynie wirtualnej! choćby o ile będzie stanowił zagrożenie – wywoła niepożądane akcje tylko na maszynie, nie fizycznym urządzeniu. A maszynę można przecież zawsze usunąć czy przywrócić do stanu z przed kliknięcia w link, podczas gdy nasz komputer pozostaje bezpieczny. Mała gwiazdka – choć zdarza się to niezwykle rzadko, zdarzało się już, iż złośliwe oprogramowanie potrafiło „wyskoczyć” poza maszynę wirtualną.
a można by ich pewnie wymienić wiele więcej.
Wykorzystanie wirtualizacji
Faktem jest, iż wirtualizacja od wielu lat wykorzystywana jest na porządku dziennym. Za jej pomocą dzielona jest zdecydowana większość wykorzystywanych serwerów fizycznych, z którymi możemy się spotkać. Nie inaczej jest w chmurze – tam też, świadomie lub nie, korzystamy z procesów wirtualizacji. Artykuł, który właśnie czytasz znajduje się na Blogu, który utrzymywany jest na maszynie wirtualnej u jednego z dostawców hostingu. Proces wirtualizacji jest na tyle powszechny, iż jego znajomość, szczególnie dla administratorów, jest w tej chwili umiejętnością must-have.
Wirtualizacja jest również powszechnie wykorzystywana w bezpieczeństwie. Pomimo wspomnianych przypadków, gdy złośliwe oprogramowanie potrafiło „wyskoczyć” poza wirtualną przestrzeń i przedostać się na urządzenie fizyczne. Tego typu przypadki są stosunkowo rzadkie, a maszyny wirtualne są z powodzeniem wykorzystywane np. jako sandbox przy analizie złośliwego oprogramowania.
Choć wirtualizacja jest procesem, który dotyczy przede wszystkim administratorów czy bezpieczników, zachęcam aby absolutnie każda osoba korzystała z jej możliwości. Aby maksymalnie uprościć taki proces Microsoft przygotował przyjazny dla użytkownika Sandbox, który jest dostępny w niektórych wersjach Windows.
Niezbędne jest wcześniejsze włączenie tej opcji w panelu sterowania, ale po wykonaniu tej czynności zobaczymy powyższą aplikację. Po jej uruchomieniu, jak każdej innej aplikacji, w ciągu kilku sekund otrzymamy gotową maszynę wirtualną z „czystym” systemem, jakby przed chwilą został zainstalowany:
Absolutnie każdy użytkownik powinien potrafić ją uruchomić, a w przypadku niepewności co do bezpieczeństwa linku czy strony – może z niego skorzystać. Po zamknięciu okna aplikacji Windows Sandbox – wszystkie dane są czyszczone, a naszemu fizycznemu urządzeniu nic nie grozi. Z Sandboxa z powodzeniem korzystają chociażby moi zupełnie nietechniczni domownicy, więc z pełną świadomością zachęcam do tego wszystkich!
Mówiąc o wykorzystaniu wirtualizacji trzeba jeszcze na koniec wspomnieć o jej wymaganiach. Nie każde urządzenie będzie w stanie utrzymywać maszyny wirtualne. To na co trzeba przede wszystkim zwrócić uwagę to:
Czy mamy wystarczającą ilość zasobów?
Bazując na moich obserwacjach z Hyper-V (wbudowanego w Windows i Windows Server systemu do zarządzania maszynami wirtualnymi):
Maszyna wirtualna z „czystym” systemem potrzebuje przynajmniej 10-20 GB przestrzeni dyskowej, która zwiększa się wraz z przybywaniem danych. Dodatkowo aktywnie wykorzystywana maszyna (nie tylko włączona) zużywa nie mniej niż 1.5 GB RAM, którego ilość również rośnie wraz z wykorzystaniem.
Czy mój procesor obsługuje wirtualizacje?
W tym momencie w zasadzie wszystkie nowoczesne procesory obsługują wirtualizację, ale w przypadku wiekowych urządzeń trzeba to zweryfikować. Dodatkowo procesory Intel-a obsługują również wirtualizację zagnieżdżoną (nested virtualization), co pozwala nam tworzyć maszyny wirtualne wewnątrz maszyny wirtualnej.
Oprócz tego zostają nam już wyłącznie standardowe wymagania licencyjne danego hypervisora. W przypadku Hyper-V, wbudowanego w system Windows, możemy korzystać z wirtualizacji o ile posiadamy system Windows przynajmniej w wersji Pro. Wirtualizacja i Hyper-V jest oczywiście również dostępne w wersjach serwerowych Windows.