Desired State Configuration

Desired State Configuration

  • Comments 1
  • Likes

Konfigurujesz świeżo zainstalowany serwer... Jest ciekawie? Za pierwszym razem raczej tak. Za drugim pewnie też, za to trochę sprawniej. Od trzeciego do dziesiątego dochodzisz do wniosku, że da się to dobrze zrobić z zamkniętymi oczami przy pomocy samych skrótów klawiaturowych. Oczywiście serwer jest potem w 100% zgodny z firmowymi regułami konfiguracji, ustawiony w jedyny słuszny sposób i w ogóle idealny. Brzmi fantastycznie, ale przy większej skali muszą pojawić się problemy. Na przykład dwudziesty siódmy serwer okazuje się skonfigurowany nieco inaczej, bo miałeś słabszy dzień, albo akurat rozlała się kawa i w zamieszaniu zdarzyło się przeskoczyć któryś ze standardowo wykonywanych etapów. Albo kolega administrator wykonał dokładnie te same działania, tylko na końcu serwer ma inną konfigurację.

Od kiedy mam do czynienia z produkcyjnymi serwerami Windows (czyli od połowy lat dziewięćdziesiątych), ciągle słyszę, jak Microsoft jasno mówi, że w takich sytuacjach powinniśmy skorzystać z dostępnych bezpłatnie, jedynych w swoim rodzaju, słusznych, skutecznych i w ogóle wspaniałych narzędzi do centralnego zarządzania konfiguracją. Mało tego! Sam o takich pięknych ideach wielokrotnie opowiadałem, na przykład na poświęconej dokładnie temu tematowi sesji na konferencji MTS 2009.

A jak to wygląda naprawdę? Mamy teoretycznie do dyspozycji dwa potężne narzędzia: skrypty i GPO. Teoretycznie wiemy jak ich używać. Teoretycznie da się wszystko nimi zrobić tak, że sam fakt dodania serwera do konkretnego OU sprawi, że wszystko, co powinno być na nim skonfigurowane, zadzieje się samo. Ale z ręką na sercu – kto tak ma w swoim środowisku? Nie, że jakieś kawałki, przymiarki albo proof of concept, tylko działające, w pełni automatyczne rozwiązanie konfigurujące serwery zgodnie z firmowymi politykami od początku do końca? A przecież mamy świetne narzędzia, możemy oszczędzić sporo żmudnej pracy i uniknąć błędów! Tylko jakoś w codziennej praktyce te narzędzia nie są aż tak fantastyczne, skoro nikt nie wyrywa się do ich stosowania...

Prawdopodobnie do takiego samego wniosku doszedł ktoś w Microsoft i zamiast jeszcze mocniej przekonywać "używajcie GPO", zaproponował zupełnie nowe rozwiązanie. Oparte oczywiście (takie czasy) o PowerShella, przyjaźniejsze dla administratora, strawne dla menedżera, zaprojektowane dla serwerów i dające się użyć w starszych wersjach systemu. Mowa o tytułowym Desired State Configuration.

DSC wprowadza nowe podejście bazujące na prostych tekstowych plikach konfiguracyjnych. Prostych, znaczy łatwych do stworzenia, łatwych do przerobienia w razie potrzeby i łatwych do zrozumienia dla menedżerów. Każdy z tych aspektów jest w praktyce równie istotny. Plik taki zaczyna się od słowa "Configuration" i zawiera sekcje odpowiedzialne za poszczególne aspekty konfiguracji. Na przykład:

Configuration test1
{
WindowsFeature IIS
{
  Ensure="Present"
  Name="Web-Server"
}
}

Po uruchomieniu takiego skryptu i wpisaniu "test1" otrzymamy plik folder z plikami z rozszerzeniem *.mof. Brzmi znajomo? W skrócie powiedzieć można, że jest to tekstowy plik zawierający opisaną wcześniej konfigurację w postaci strawnej dla automatycznego przetworzenia.

Samo przetworzenie uruchamia się cmdletem Start-DscConfiguration, którego parametrem powinna być lokalizacja folderu z plikami *.mof. Dodanie parametrów -Wait i -Verbose sprawi, że wszystko ładnie będzie widać.

dsc1

Na razie, widać, że skomplikowaliśmy sobie skryptową instalację ról serwera. Trochę więcej entuzjazmu wzbudzić może świadomość, że oprócz ról serwera, do dyspozycji mamy całkiem przydatny zestaw parametrów, formalnie zwanych DSC Resources:

  • Archive – służący do rozpakowania archiwum w zadanej lokalizacji
  • Environment – zarządzający zmiennymi środowiskowymi
  • File – zarządzający plikami i folderami
  • Group – zarządzający lokalnymi grupami użytkowników
  • Log – rejestrujący działania DSC w Event Log
  • Package – zarządzający instalacją paczek (na przykład MSI)
  • WindowsProcess – zarządzający procesami na serwerze
  • Registry – odpowiadający za wpisy w rejestrze systemu
  • WindowsFeature – pozwalający instalować i usuwać role i funkcjonalności serwera
  • Script – umożliwiający uruchomienie na docelowym serwerze zadanego skryptu
  • Service – służący do zarządzania serwisami systemowymi
  • User – zarządzający lokalnymi kontami użytkowników

Podczas testów, warto przyjrzeć się tym parametrom dokładniej, ponieważ ich możliwości są zwykle dość rozbudowane. Serwisy systemowe można uruchamiać, zatrzymywać, tworzyć czy usuwać, użytkownikom można ustawiać hasła itp. Można również zdefiniować własne klasy zasobów DSC, jednak na pewno wymaga to na początek opanowania standardowych zasobów i na razie temat ten pominę.

Skrypty konfiguracyjne można oczywiście parametryzować, dostosowując je do funkcji serwera (na przykład dodając parametr, którym decydujemy czy w danym przypadku na serwerze ma być IIS czy nie) czy zmuszając do specyficznego działania na maszynie o zadanej nazwie.

Jak dotąd widać, dzięki DSC można nieco uprościć zarządzanie przez skrypty. Zamiast pisać skrypty służące do zarządzania każdym z wymienionych wyżej aspektów konfiguracji, można użyć pliku tekstowego z opisem pożądanego stanu i zaaplikować go na serwerze jednym prostym poleceniem. Jest to jakiś krok w dobrą stronę, głównie dlatego, że utrzymanie nadążającej za wymaganiami treści takiego pliku tekstowego jest prostsze niż utrzymywanie rozwiązań skryptowych. Ponadto, sens działania pliku konfiguracyjnego jest zrozumiały dla kogoś więcej niż tylko dla autora. Można polemizować czy lepsze są takie pliki czy prawdziwe skrypty, jednak jeżeli w prawdziwym środowisku skrypty konfigurujące serwery nie są szeroko stosowane, to cała dyskusja traci sens. Lepsze będzie działające DSC niż niedziałające skrypty.

Piękno DSC nie tkwi jednak wyłącznie w uproszczeniu opisu pożądanego stanu. Dzięki PowerShellowi możemy robić naprawdę ciekawe rzeczy:

  • Sprawdzić (Test-DscConfiguration), czy bieżąca konfiguracja jest zgodna ze zdefiniowanymi regułami (cmdlet zwraca True lub False, ale to wystarczy, żeby administrator wiedział czy powinien zareagować czy może spać spokojnie)
  • Zweryfikować (Get-DscConfiguration), jaki jest bieżący stan parametrów, którymi chcielibyśmy zarządzać. Operacja ta pozwala dowiedzieć się, dlaczego opisany wcześniej Test-DscConfiguration zwrócił False.
  • Sięgać do komputerów zdalnych i zarządzać konfiguracją albo poprzez pociągnięcie (pull) konfiguracji z centralnego repozytorium, albo poprzez wypchnięcie (push) ustawień z lokalnego komputera na nowy serwer.

Konfiguracja typu pull oznacza, że konfigurowany serwer okresowo (domyślnie co 30 minut) sprawdza czy plik z ustawieniami odpowiada temu, co dzieje się na serwerze. Może nadpisywać automatycznie już istniejący plik konfiguracyjny, jednak zależy to od ustawienia przez administratora. Konfiguracja serwera udostępniającego pliki nie jest trywialna, ponieważ wykorzystuje on specjalną rolę Windows PowerShell Desired State Configuration.

Mechanizmy DSC (DscLocalConfigurationManager) mogą reagować na różne sposoby. Domyślnie, (czyli w trybie ApplyAndMonitor), w przypadku wykrycia niezgodności, w Event Logu zapisywana jest odpowiednia informacja. Tryb działania przełączyć można jednak na ApplyAndAutoCorrect i wtedy niezgodności są automatycznie usuwane.

W efekcie, dostajemy do ręki nowy, interesujący mechanizm, który:

  • pozwala prosto zautomatyzować ustawianie ważnych dla nas parametrów serwera
  • sam sprawdza czy serwer jest zgodny z pożądanym stanem i mądrze reaguje na niezgodności
  • może działać w sposób scentralizowany, zarządzając zdalnymi serwerami

W skrócie: prawie jak GPO ale dla prawdziwych twardzieli.

Jeżeli w środowisku nie ma skutecznego scentralizowanego zarządzania konfiguracją i jeżeli ktokolwiek uważa, że jednak nie byłoby to zupełnie zbędne – zdecydowanie warto przyjrzeć się bliżej Desired State Configuration.

Autor: Grzegorz Tworek [MVP]

Comments
  • Jak zawsze rzeczowo i z jajem. Ciekawa możliwość z wielkim potencjałem.

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment