U podstawy chmury

Tygodnie zbierania wiedzy, dni spedzone na przygotowaniu laboratoriów, godziny tworzenia prezentacji a potem kilkadziesiat minut i juz po MTS. Jeszcze raz bardzo dziekuje wszystkim, dzieki którym mieszczaca 3000 osób sala nie wygladala wcale na pusta. Mam nadzieje, ze sie podobalo! Jezeli tak – na stronie MTS jest ankieta, w której podzielicie sie dobra ocena. Prelegentom zalezy na ocenach. Jezeli cos bylo nie tak, jakbyscie chcieli – na stronie MTS jest ankieta i mozecie ponarzekac. Prelegentom na krytycznych opiniach tez zalezy. Dla Was to male pare minut a dla prelegentów i organizatorów konferencji szansa, zeby za rok bylo jeszcze lepiej. Facebook, fora, blogi, prywatne maile i pare innych metod kontaktu jest byc moze wygodne, ale nawet w malym procencie nie tak skuteczne jak ankieta na stronie konferencji. Bardzo, bardzo prosze. Dajcie prelegentom choc tyle w zamian za nasz czas i chec podzielenia sie wiedza.

Dla tych, którzy wola bardziej techniczne aspekty konferencji, mam pokazywany w ostatniej sesji demo skrypt oraz pare slów komentarza. Tak jak wspomnialem w czasie sesji, jezeli potrzebuje duzej ilosci podobnych maszyn wirtualnych, to instaluje sobie system raz, po czym wykonuje sysprep i kazdy nowy system jest klonem tego wzorca. Sysprep jest niezbedny, zeby maszyny-klony mialy unikalne identyfikatory. Tam, gdzie jest to zasadne, mozna sobie sysprep zautomatyzowac chocby po to, zeby w kazdej nowej maszynie nie trzeba bylo wpisywac numeru czy potwierdzac zgody na warunki licencyjne. Dla prawdziwych twardzieli automatyzacja to reczna dlubanina w plikach XML, normalniejsi opra sie pewnie na pakiecie WAIK, ale to juz zupelnie inny temat. W kazdym razie, mam wzorcowy obraz, na którym bede opieral wszystkie nowe maszyny. Metody klonowania sa dwie: kazdorazowe kopiowanie dysku-wzorca albo tworzenie dysku róznicowego, dla którego wzorzec jest "rodzicem". Osobiscie wole zwykle te druga metode, bo ma pare wyraznych zalet: oszczedza miejsce, jest szybsza, pozwala na umieszczenie dysku róznicowego na innym dysku fizycznym (najchetniej SSD) oraz w lepszy sposób wykorzystuje systemowe mechanizmy cache. Maszyne wzorcowa najlepiej skasowac zaraz po przygotowaniu, poniewaz jej przypadkowe uruchomienie spowoduje zmiany na dysku wirtualnym i dyski potomne moga przestac dzialac, co zwykle jest naprawde powaznym problemem.

Po tym wstepie, skoro wiadomo jak wygladaja zalozenia, mozemy przejsc do realizacji. Moja procedura tworzenia nowej maszyny wyglada nastepujaco:

  1. Tworzymy róznicowy dysk VHDX bazujacy na wczesniej przygotowanym wzorcu. (New... Hard Disk... w GUI)
  2. Tworzymy nowa maszyne wirtualna (New... Virtual Machine) i w na zakladce wyboru dysku (Connect Virtual Hard Disk) wskazujemy wczesniej utworzony dysk. W ramach kreatora nowej maszyny, poza dyskiem mozemy od razu skonfigurowac pamiec startowa i podlaczony switch (u mnie byl to External2). Do pamieci jeszcze wrócimy, poniewaz z poziomu kreatora nie mozna ustawic minimalnej i maksymalnej wartosci pamieci dynamicznej. Dlatego otwieramy konfiguracje maszyny (prawy klik... Settings... w GUI) i ustawiamy:
  1. Ilosc wirtualnych procesorów na 12
  2. Pamiec dynamiczna na 512MB pamieci startowej, 256MB pamieci minimalnej i 4096 pamieci maksymalnej.
  3. W zaawansowanych opcjach sieci wlaczamy SR-IOV

Zamykamy ustawienia i uruchamiamy maszyne wirtualna.

Jako, ze chcialem powyzsza strukture oskryptowac, uzylem wbudowanego w Windows Server 2012 PowerShella 3.0. Najpierw stworzylem sobie zmienna $vhdtemplate wskazujaca na dysk rodzica oraz petle, która automatycznie wygeneruje mi nazwy maszyn od VM0001 do VM0050 (w zmiennej $vmname) i odpowiednie sciezki do dysków potomnych (w zmiennej $vhdpath). Wewnatrz petli umiescilem polecenia odpowiadajace kolejnym krokom opisanym powyzej:

  1. New-VHD -Path $vhdname -ParentPath $vhdtemplate -Differencing
  2. New-VM -Name $vmname -SwitchName "External2" -VHDPath $vhdname
  1. Set-VMProcessor -VMName $vmname -Count 12
  2. Set-VMMemory -VMName $vmname -DynamicMemoryEnabled $true -StartupBytes 512MB -MinimumBytes 256MB -MaximumBytes 4GB
  3. Set-VMNetworkAdapter -VMName $vmname -IovWeight 1

Start-VM -Name $vmname

I gotowe! Trudno wyobrazic sobie prostsze polecenia i z pewnoscia doceni je kazdy, kto próbowal zautomatyzowac Hyper-V we wczesniejszych wersjach systemu.

Poniewaz tworzenie dysku i uruchamianie kolejnych maszyn zajmuje troche czasu, cala operacje mozna zrównoleglic tak, zeby w czasie, w którym uruchamiana jest maszyna n, tworzony byl dysk maszyny n+1. W tym celu do pierwszego i ostatniego polecenia dodac mozna parametr -AsJob. W mojej ocenie ma to sens tylko w celach demonstracyjnych, poniewaz w normalnych zastosowaniach takiego skryptu lepiej robic wszystko solidnie i po kolei nawet, jezeli tworzenie pojedynczej maszyny trwa z tego powodu kilka sekund dluzej.

Oczywiscie caly powyzszy przyklad jest bardzo prosty. Wlasnie taki byl potrzebny w ramach demonstracji na MTS. Jezeli jednak ktos zechce sam glebiej "podlubac" – portal TechNet zapewni cala potrzebna wiedze na temat zarzadzania wirtualizacja. Warto sie pobawic nawet, jezeli w danej chwili potrzebujemy utworzyc czy zmodyfikowac tylko jedna maszyne.

Autor: Grzegorz Tworek [MVP]

PS skrypt, którym na koncu "posprzatalem" wszystkie automatycznie utworzone i uruchomione maszyny mial postac: Get–VM | Stop–VM -Force -Passthru | Remove–VM -Force -AsJob  Z oczywistych powodów prosze nie stosowac go w srodowisku produkcyjnym.