Puppet Jak zacząć? Marcin Piebiak Linux Polska sp. z o.o.
Instalacja środowiska Minimalne wymagania: OS Type: Linux Arch: x86_64 HDD: 5G RAM: 1G CPU: 1 Network: bridge na Wi-Fi Pierwszy rozruch po sieci (PXE) Dostęp do systemu: root / puppet IP: 10.10.1.x SID: OSD2014_LAB_A PASSWORD: OSD2014_LAB
Puppet co to jest? Narzędzie do automatyzacji wprowadzenia i utrzymania konfiguracji infrastruktury Dane Opis Kompilator dla infrastruktury
Puppet podłączenie nowego hosta Cała komunikacja oparta jest o certyfikaty SSL. Puppet master działa jako lokalne CA. Dane Opis SR) C (! nowy u t tem ój s w e j t, t ć s ś je Cze j! To (CRT) a t i W kat. i f y t r ce Cześ ć, jes tem tu nowy Nic o! (CS t o b R) i e Musis n z cze ie wiem. kać n a zgo dę po dłącz enia. Cała komunikacja jest szyfrowana.
Puppet przygotowanie katalogu Każdy podłączony host wysyła zbiór informacji o sobie (facts). Dane Opis ojej m o cje a m r o inf cji. To są konfigura ać ie d b ą l e i g la C inien wy d m e wał jak pow o t o g Przy catalog) to on ( opis system. O Twój Na podstawie dostarczonych informacji oraz danych i opisu, puppet master przygotowuje katalog zawierający opis wyglądu systemu.
Puppet dostosowanie konfiguracji Na podstawie dostarczonego katalogu puppet agent dostosowuje wygląd systemu. Dane Opis Widzę, że czeka mnie sporo pracy Całe szczęście mam szczegółowy opis. Zrobię to!
Puppet raportowanie Po każdej zmianie wysyłany jest raport z informacją o stanie przed i po każdej wprowadzonej modyfikacji. Dane Opis Lekko nie było ale UDAŁO SIĘ! :) Oto opis rzeczy, które musiałem zmienić. Widoczność zmian konfiguracji
Puppet utrzymanie konfiguracji Cyklicznie puppet agent zgłasza się ponownie po opis wyglądu systemu. Dane ny? a i m śz Jakie iąż c w ę, że i s j i n Upew dasz jak ą wygl Opis Pewność wyglądu systemu
Puppet raportowanie Nawet przy braku zmian puppet agent informuje o poprawnej konfiguracji systemu. Dane Opis Właśnie wróciłem z obchodu. Wszystko jest w należytym porządku. Pewność wyglądu systemu
Puppet - po co mi to? Jaki jest stan systemów? Czy oba mają taką samą konfigurację? Czym się różnią i dlaczego? Cykl życia: - awarie, - nowe wersje aplikacji, - modyfikacje, -... czas Provisioning dwóch identycznych systemów.
Puppet - po co mi to? Opis czas Provisioning dwóch identycznych systemów.
Puppet czym jest opis? typ tytuł Opis parametry Przy opisie wyglądu środowiska posługujemy się nazwą typu zasobu którym chcemy doprowadzić do pożądanego stanu, jego tytułem oraz parametrami które pozwalają szczegółowo opisać stan danego zasobu.
Puppet czym jest opis? typ tytuł Opis parametry apt-get install wget yum install wget pacman sync wget Provider odpowiedzialny jest za realizację opisanego stanu. Puppet automatycznie dopiera odpowiedni providera na bazie faktów.
Puppet trochę komend Lista dostępnych typów: puppet describe --list Pomoc: puppet help puppet help <subcommand> puppet describe <typ> Lista dostępnych parametrów dla typu
Puppet realizacja lokalna Zbiór definicji umieszczamy w manifestach manifest_01.pp Weryfikacja poprawności kodu: puppet parser velidate <plik> Wprowadzenie opisu z manifestu lokalnie: puppet apply <plik>
Puppet moduły Moduły służą do grupowania opisu elementów systemu puppet/modules/apache/manifests/init.pp Przypisanie moduły do systemu: puppet/manifests/site.pp zależność między zasobami Wymuszenie wykonania jednego przebiegu puppet agenta: [root@workstation001 ~]$ puppet agent -t
Puppet moduły i wiele systemów Facter dostarcza nam informacji o systemie puppet/modules/apache/manifests/init.pp fakt zmienna Realizacja: yum install httpd service httpd start apt-get install apache2 service apache2 start Pobranie faktów dla z systemu [root@workstation001 ~]$ facter
Puppet konstrukcje językowe Konstrukcja if : Selektor: Konstrukcja case : Konstrukcje językowe pozwalają na sterowanie realizacją opisu w zależności od charakterystyk systemów
Środowisko warsztatowe puppet.lab IP: 10.10.1.254 workstationx.lab IP: 10.10.1.X puppet agent -t /root/puppetcode git push origin master Dostęp do systemu: root / puppet
Zadanie1: Plik: zadanie1.pp 1. Zainstaluj program mc 2. Plik /usr/local/bin/hello po uruchomieniu wyświetla Hello World 3. Plik należy do grupy sysadmins 4. Właścicielem pliku jest admin 5. admin należy do grupy sysadmins 6. Członkowie grupy i właściciel mogą wykonać skrypt, ale tylko właściciel może go edytować Sprawdzenie składni: puppet parser validate zadanie1.pp Wykonanie manifestu: puppet apply zadanie1.pp Sprawdzenie ukończenia zadania: validate_zadanie1
Zadanie2: Dodaj plik: cd /root/puppetcode mkdir -p modules/apache/manifests vim modules/apache/manifests/init.pp 1. Uruchom serwis apache 2. Niech strona główna wyświetla tekst Hello from workstationx.lab X to Twój numer stacji Uzupełnij plik /root/puppetcode/site.pp o wpis: Wyślij konfigurację do puppet mastera: cd /root/puppetcode git add. git commit -a -m 'apache' git push origin master Wykonaj przebieg puppet agenta: puppet agent -t Sprawdzenie ukończenia zadania: validate_zadanie2
Zadanie3: Zmodyfikuj plik: cd /root/puppetcode vim modules/apache/manifests/init.pp Puppet kontroluje poprawność konfiguracji usługi apache. Skopiuj plik /etc/httpd/conf/httpd.conf i umieść go w module puppeta cd /root/puppetcode mkdir -p modules/apache/files cd modules/apache/files cp /etc/httpd/conf/httpd.conf. Wyślij konfigurację do puppet mastera: cd /root/puppetcode git add. git commit -a -m 'apache v2' git push origin master Zmodyfikuj plik: /etc/httpd/conf/httpd.conf Wykonaj przebieg puppet agenta: puppet agent -t Sprawdź czy puppet przywrócił konfigurację.
Zadanie4: Dodaj plik: cd /root/puppetcode mkdir -p modules/hosts/manifests vim modules/hosts/manifests/init.pp Uzupełnij wpisy w /etc/hosts tak aby twój system wiedział o wszystkich stacjach warsztatowych. Wyślij konfigurację do puppet mastera: cd /root/puppetcode git add. git commit -a -m 'hosts' git push origin master Wykonuj przebieg puppet agenta: puppet agent -t Uzupełnij plik /root/puppetcode/site.pp o wpis: Obserwuj plik /etc/hosts Sprawdź czy możesz dostać się do serwisu apache uruchomionego na innych stacjach, np.: curl workstation102 X to Twój numer stacji
Zadanie5: Tym razem bez rozwiązania :) - utworzyć nowy moduł (/root/puppetcode/module/ftp) 1. Napisz moduł puppeta, który skonfiguruje usługę ftp (vsftpd) na systemie. 2. Upewnij się, że usługa jest uruchomiona i jest dodana do autostartu. 3. Upewnij się, że puppet dba o poprawność pliku konfiguracyjnego. 4. Użytkownik root powinien mieć możliwość umieszczania i pobierania plików z serwera ftp. - przypisać moduł do zarządzanego systemu (/root/puppetcode/site.pp) - umieść przy pomocy gita zmiany na serwerze puppet mastera - wykorzystaj wzorzec projektowy z zadania3 (pakiet plik konfiguracyjny serwis) - wykorzystaj puppet agenta do wprowadzenia opisanych zmian Powodzenia!
Fakty systemowe: - lista wszystkich faktów: facter - wyświetlenie pojedynczego faktu: facter is_virtual facter fqdn Pomocy puppeta: - list wszystkich podkomend puppet help - pomoc dla wybranej podkomendy puppet help <subcommand> Uzyskanie listy wszystkich dostępnych typów: puppet describe list Szczegółowy opis wybranego typu: puppet descirbe <typ> Wykonanie manifestu lokalnie: puppet apply <manifest> Wymuszenie jednego przebiegu puppet agenta: puppet agent -t Sprawdzenie poprawności składni manifestu: puppet parser validate <manifest> Zmienne puppeta: $nazwa Dostęp do faktów: $::nazwa_faktu Odwołania do zasobów: Typ['tytuł'] Zasób puppeta: typ { 'tytuł': parametr1 => 'wartość1', parametr2 => 'wartość2', } Moduł puppeta, na przykładzie apache: plik: apache/manifests/init.pp class apache {... } Przypisanie modułu do hosta: plik: site.pp node 'puppet.lab' { include apache } Konstrukcje językowe: case $zmienna { if warunek { 'wartość1': {...}... 'wartość2': {...} } elsif warunek { default: {...}... } } else {... $zmienna1 = $zmienna2? } 'wartość1' => 'zwróć1', 'wartość2' => 'zwróć2', default => 'zwróć def', }
Puppet Jak zacząć? Marcin Piebiak Linux Polska sp. z o.o.