Poradnik lalek dla początkujących: co to jest lalka i jak z niej korzystać?
Zanim nauczymy się Marionetki, zrozummy:
Co to jest zarządzanie konfiguracją?
Zarządzanie konfiguracją to proces utrzymywania oprogramowania i systemów komputerowych (na przykład serwerów, pamięci masowej, sieci) w znanym, pożądanym i spójnym stanie. Umożliwia także dostęp do dokładnego historycznego zapisu stanu systemu na potrzeby zarządzania projektami i audytu.
Administratorzy systemów wykonują głównie powtarzalne zadania, takie jak instalowanie serwerów, konfigurowanie tych serwerów itp. Specjaliści ci mogą zautomatyzować to zadanie, pisząc skrypty.
Jest to jednak trudne zadanie, gdy pracują na ogromnej infrastrukturze. Aby rozwiązać takie problemy, wprowadzono narzędzie do zarządzania konfiguracją, takie jak Puppet.
Co to jest Marionetka?
Marionetka to narzędzie do zarządzania systemem, służące do centralizacji i automatyzacji procesu zarządzania konfiguracją. Puppet jest również używany jako narzędzie do wdrażania oprogramowania. Jest to oprogramowanie do zarządzania konfiguracją typu open source, szeroko stosowane do konfiguracji serwerów, zarządzania, wdrażania i orkiestracji różnych aplikacji i usług w całej infrastrukturze organizacji.
Puppet jest specjalnie zaprojektowany do zarządzania konfiguracją Linuksa i Windows systemy. Jest napisany w języku Ruby i wykorzystuje jego unikalność Domain Sspecyficzne Ljęzyk (DSL) do opisu konfiguracji systemu.
Jakie są wersje Puppet?
Marionetka występuje w dwóch wersjach:
- Marionetka Open Source: Jest to podstawowa wersja narzędzia do zarządzania konfiguracją Puppet, znanego również jako Open Source Puppet. Jest dostępny bezpośrednio na stronie internetowej Puppet i jest licencjonowany w ramach systemu Apache 2.0.
- Przedsiębiorstwo lalek: Wersja komercyjna oferująca funkcje takie jak raportowanie zgodności, orkiestracja, kontrola dostępu oparta na rolach, graficzny interfejs użytkownika, interfejs API i narzędzia wiersza poleceń do efektywnego zarządzania węzłami.
Co potrafi Marionetka?
Na przykład masz infrastrukturę obejmującą około 100 serwerów. Jako administrator systemu masz obowiązek dopilnować, aby wszystkie te serwery były zawsze aktualne i działały z pełną funkcjonalnością.
Aby to zrobić, możesz użyć Puppet, który pozwala napisać prosty kod, który może być automatycznie wdrażany na tych serwerach. Zmniejsza to wysiłek ludzki i sprawia, że proces rozwoju jest szybki i efektywny.
Lalka wykonuje następujące funkcje:
- Puppet umożliwia zdefiniowanie odrębnych konfiguracji dla każdego hosta.
- Narzędzie pozwala na ciągłe monitorowanie serwerów w celu sprawdzenia, czy wymagana konfiguracja istnieje, czy nie i czy nie jest ona zmieniana. Jeśli konfiguracja zostanie zmieniona, narzędzie Puppet powróci do wstępnie zdefiniowanej konfiguracji na hoście.
- Zapewnia także kontrolę nad całym skonfigurowanym systemem, dzięki czemu scentralizowana zmiana zostaje dokonana automatycznie.
- Jest również używany jako narzędzie do wdrażania, ponieważ automatycznie wdraża oprogramowanie w systemie. Implementuje infrastrukturę jako kod, ponieważ zasady i konfiguracje są zapisywane jako kod.
Marionetkowy DSL i paradygmaty programowania
Zanim nauczymy się Puppet DSL, zrozummy paradygmaty programowania:
Paradygmat programowania to styl, którego używasz w programowaniu komputerowym.
Cztery typy paradygmatów to:
- Tryb rozkazujący.
- Deklaracyjny.
- Funkcjonalny (który jest uważany za podzbiór tego deklaratywnego paradygmatu)
- Zorientowany obiektowo.
Skupimy się na trybie imperatywnym i deklaratywnym.
Paradygmaty imperatywne
Ten paradygmat programowania wyraża logikę obliczeń (co robić) i opisuje przepływ sterowania (jak to zrobić)
Przykład:
Załóżmy, że jedziesz do swojego biura, rezerwujesz taksówkę i zaczynasz udzielać kierowcy wskazówek krok po kroku, aż dotrzesz do biura. Określanie, co i jak robić, jest stylem imperatywnym.
Paradygmaty deklaratywne
Ten paradygmat programowania wyraża logikę obliczeń (co zrobić) bez opisywania przepływu sterowania (jak to zrobić)
Przykład:
Załóżmy, że jedziesz do swojego biura, rezerwujesz taksówkę Uber i określasz miejsce docelowe (Biuro). Określanie, co należy zrobić, a nie jak to zrobić, jest stylem deklaratywnym.
Paradygmat | Co robić: | Jak zrobić |
---|---|---|
imperatyw | Tak | Tak |
Deklaracyjny | Tak | Nie |
Marionetka używa deklaratywnego paradygmatu programowania
Puppet wykorzystuje deklaratywne podejście do programowania.
Przykład: Utwórz użytkownika w systemie:
Można to zrobić za pomocą wzorca programowania Imperatywnego za pomocą skryptu powłoki: Tutaj określamy, jak utworzyć użytkownika i jakich poleceń użyć na system operacyjny.
Można to jednak zrobić przy użyciu deklaratywnego wzorca programowania z zaledwie kilkoma linijkami kodu marionetkowego i językiem specyficznym dla domeny Puppet (DSL) i nadal osiągnąć ten sam wynik.
Modele wdrażania narzędzi do zarządzania konfiguracją
Istnieją dwa modele wdrażania dla narzędzia do zarządzania konfiguracją :
- Model wdrażania oparty na push: inicjowany przez węzeł główny.
- Model wdrażania oparty na ściąganiu: inicjowany przez agentów.
Model wdrażania oparty na technologii push
W tym modelu wdrażania serwer główny przekazuje konfiguracje i oprogramowanie poszczególnym agentom. Po sprawdzeniu bezpiecznego połączenia master zdalnie uruchamia polecenia na agentach. Na przykład, Wiarygodne i Stos Solny.
Model wdrażania oparty na ściąganiu.
W tym modelu wdrożenia poszczególne serwery kontaktują się z serwerem głównym, weryfikują i nawiązują bezpieczne połączenie, pobierają konfiguracje i oprogramowanie, a następnie odpowiednio się konfigurują — na przykład Puppet i Chef.
Jak działa Marionetka?
Puppet opiera się na modelu wdrażania Pull, w którym węzły agentów regularnie meldują się po każdym uruchomieniu 1800 sekund z węzłem głównym, aby sprawdzić, czy coś wymaga aktualizacji w agencie. Jeśli coś wymaga aktualizacji, agent pobiera niezbędne kody marionetkowe od mistrza i wykonuje wymagane działania.
Wyjaśnijmy to na przykładzie:
Przykład: Mistrz – Konfiguracja agenta:
Mistrz
Komputer oparty na systemie Linux z zainstalowanym oprogramowaniem Puppet Master. Odpowiada za utrzymywanie konfiguracji w postaci kodów marionetkowych. Węzłem głównym może być tylko Linux.
Agenci
Maszyny docelowe zarządzane przez marionetkę z zainstalowanym oprogramowaniem agenta marionetkowego.
Agenta można skonfigurować w dowolnym obsługiwanym systemie operacyjnym, takim jak Linux lub Windows or Solaris lub MacOS.
Komunikacja pomiędzy masterem a agentem odbywa się za pomocą bezpiecznych certyfikatów.
Komunikacja pomiędzy Masterem a Agentem
Krok 1) Po ustanowieniu połączenia między agentem a serwerem głównym agent Puppet wysyła dane o swoim stanie do serwera głównego Puppet. Są one nazywane Faktami: Informacje te obejmują nazwę hosta, szczegóły jądra, adres IP, szczegóły nazwy pliku itp.…
Krok 2) Puppet Master wykorzystuje te dane i tworzy listę z konfiguracją, która ma zostać zastosowana do agenta. Ta lista konfiguracji, które należy wykonać na agencie, jest nazywana a katalog. Można to zmienić, na przykład poprzez instalację pakietów, uaktualnienie lub usunięcie, utworzenie systemu plików, utworzenie lub usunięcie użytkownika, ponowne uruchomienie serwera, zmianę konfiguracji IP itp.
Krok 3) Agent korzysta z tej listy konfiguracji, aby zastosować wszelkie wymagane zmiany konfiguracji w węźle.
W przypadku braku dryfów w konfiguracji Agent nie dokonuje żadnych zmian w konfiguracji i pozostawia węzeł, aby działał z tą samą konfiguracją.
Krok 4) Po zakończeniu węzeł raportuje do mistrza marionetek, wskazując, że konfiguracja została zastosowana i zakończona.
Bloki lalek
Puppet zapewnia elastyczność integracji raportów z narzędziami innych firm za pomocą interfejsów API Puppet.
Są cztery rodzaje klocków do budowy lalek
- Zasoby
- Zajęcia
- Oczywisty
- Moduły
Zasoby marionetek
Zasoby Puppet to elementy składowe Puppet.
Zasoby to wbudowane funkcje które działają w zapleczu i wykonują wymagane operacje w programie Puppet.
Zajęcia marionetkowe
Kombinację różnych zasobów można zgrupować w jedną jednostkę zwaną klasą.
Manifest Lalek
Manifest to katalog zawierający marionetkowe pliki DSL. Pliki te mają rozszerzenie .pp. Rozszerzenie .pp oznacza program marionetkowy. Kod marionetkowy składa się z definicji lub deklaracji klas lalek.
Moduły marionetkowe
Moduły to zbiór plików i katalogów, takich jak Manifesty i definicje klas. Są to jednostki wielokrotnego użytku i współdzielenia w Puppet.
Na przykład, MySQL moduł do zainstalowania i skonfigurowania MySQL lub moduł Jenkins do zarządzania Jenkinsem itp.
Rodzaje zasobów marionetek
Ogólnie rzecz biorąc, system składa się z plików, użytkowników, usług, procesów, pakietów itp. W Puppet nazywa się je zasobami. Zasoby są podstawowymi elementami budulcowymi
Puppet. Wszystkie operacje na agentach puppet są wykonywane za pomocą zasobów puppet.
Zasoby Puppet to gotowe narzędzia, które służą do wykonywania różnych zadań i operacji na dowolnej obsługiwanej platformie. Możemy użyć pojedynczego zasobu Puppet do wykonania określonego zadania lub możemy użyć wielu zasobów Puppet razem, aby wykonać złożone konfiguracje wdrożeń aplikacji.
Zasoby mogą mieć różne typy. Używa marionetek zasoby oraz typy zasobów w celu opisania konfiguracji systemu.
Istnieją trzy rodzaje typów zasobów:
- Rdzeń marionetkowy lub wbudowane typy zasobów.
- Typy zasobów zdefiniowane przez marionetkę.
- Niestandardowe typy zasobów marionetek.
Rdzeń marionetkowy lub wbudowane typy zasobów
Podstawowe lub wbudowane typy zasobów to gotowe typy zasobów lalek dostarczane z oprogramowaniem lalek. Wszystkie podstawowe lub wbudowane typy zasobów Puppet są pisane i utrzymywane przez zespół Puppet.
Typy zasobów zdefiniowane przez marionetkę
Zdefiniowane typy zasobów to lekkie typy zasobów napisane w deklaratywnym języku Puppet przy użyciu kombinacji istniejących typów zasobów.
Niestandardowe typy zasobów marionetek
Niestandardowe typy zasobów to całkowicie dostosowane typy zasobów napisane w języku Ruby.
Przyjrzyjmy się typom zasobów lalek…
W terminalu wpisz następujące polecenie, aby wyświetlić listę podpoleceń Puppet:
Puppet --help
W naszym przypadku interesuje nas podkomenda „Zasób”, którego użyjemy do znalezienia informacji o wbudowanych typach zasobów lalek.
W terminalu wpisz dowolne z następujących poleceń, aby wyświetlić listę działania powiązany z podkomendą marionetki „Zasób"
Puppet help resource Puppet resource --help
W tym przypadku mamy Zasób jako podpolecenie i –typy jako działanie.
Puppet ma 49 wbudowanych typów zasobów podstawowych.
W terminalu wpisz następujące polecenie, aby wyświetlić listę dostępnych wbudowanych typów zasobów puppet:
puppet resource –types
Każdy typ obsługuje listę atrybuty. Te atrybuty zapewniają szczegółowy opis używany przez Puppet do zarządzania zasobem.
Aby dowiedzieć się wszystkich atrybutów powiązanych z typem zasobu puppet, użyj następującego polecenia:
puppet describe <resource type name>
Parametry wyświetlą listę wszystkich dostępnych atrybutów dla tego typu zasobu.
marionetka opisuje pakiet
Dla nowej osoby trudno jest zrozumieć i powiązać wiele niezarządzanych plików kodu puppet. Tutaj potrzebujemy grupowania, aby połączyć operacje. Celem jest rozwiązanie pojedynczego problemu, takiego jak wszystkie operacje wymagane do skonfigurowania ssh na serwerze lub usłudze ntp lub kompletnego serwera WWW lub serwera bazy danych od podstaw.
Czym są zajęcia lalkowe?
Klasy marionetek to zbiór zasobów lalek połączonych w jedną całość.
Puppet wprowadził klasy, aby struktura mogła być ponownie wykorzystana i zorganizowana.
Najpierw musimy zdefiniować klasę, używając składni definicji klasy; klasy muszą być unikalne i można je zadeklarować tylko raz o tej samej nazwie:
class <class-name> { <Resource declarations> }
Przykład:
class ntpconfig { file { "/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } }
Do tej pory zdefiniowaliśmy tylko klasę, ale nigdzie jej nie używaliśmy. Oznacza to, że napisany przez nas kod nigdy nie zostanie wykonany, chyba że zadeklarujemy tę klasę gdzie indziej.
Deklaracja klasy
Aby użyć zdefiniowanej klasy w kodzie, użyj metody zawierać słowo kluczowe.
class ntpconfig { file { "/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } } include ntpconfig
Rozumiemy to na podstawie prawdziwego scenariusza.
Wersja demonstracyjna instalacji NTP
Najpierw upewnij się, że pakiet NTP nie znajduje się już na serwerze. Poniższe polecenie nie zwróci żadnych wyników, jeśli telnet nie znajduje się na serwerze:
rpm -qa | grep -i ntp
Jak widzimy, pakiet NTP jest już obecny na serwerze. Usuńmy istniejący pakiet NTP:
yum remove ntp
Po usunięciu pakietu upewnij się, że plik ntp.conf nie istnieje:
ls -lrt /etc/ntp.conf
Sprawdź, czy usługa NTP nie istnieje, uruchamiając następujące polecenie:
systemctl status ntp
Utwórz nowy plik .pp, aby zapisać kod. Z wiersza poleceń:
vi demontp.pp
Przejdź do trybu wstawiania, naciskając i na klawiaturze.
Wpisz poniższy kod, aby utworzyć nowy plik:
# Class Definition class ntpconfig { # Installing NTP Package package {"ntp": ensure=> "present", } # Configuring NTP configuration file file {"/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } # Starting NTP services service {"ntpd": ensure=> "running", } }
Po zakończeniu edycji: naciśnij klawisz esc
Aby zapisać plik, naciśnij :wq!
Następnym krokiem jest ZOBACZ czy kod ma jakieś błędy składniowe. Wykonaj następujące polecenie:
puppet parser validate demontp.pp
Upewnij się, że przełączyłeś się na korzeń aby móc ukończyć test bez żadnego błędu, wykonując polecenie:
su root
Testowanie jest kolejnym krokiem w procesie tworzenia kodu. Wykonaj następujące polecenie, aby wykonać test dymowy:
Puppet applies demontp.pp --noop
Ostatnim krokiem jest biegać marionetkę w trybie rzeczywistym i sprawdź wynik.
puppet apply demontp.pp
Puppet nic nie dał, bo zajęcia pokazowe były po prostu zdefiniowane ale nie Deklarowana.
Zatem dopóki nie zadeklarujesz klasy marionetki, kod nie zostanie zastosowany.
Przejdźmy ogłosić klasa demonstracyjna w tym samym kodzie przy użyciu zawierać nazwę klasy na końcu kodu:
# Class Definition class ntpconfig { # Installing NTP Package package {"ntp": ensure=> "present", } # Configuring NTP configuration file file {"/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } # Starting NTP services service {"ntpd": ensure=> "running", } } # Class Declaration include ntpconfig
Ponownie ZOBACZ czy kod ma jakieś błędy składniowe. Wykonaj następujące polecenie:
puppet parser validate demontp.pp
Upewnij się, że przełączyłeś się na korzeń aby móc ukończyć test bez żadnego błędu, wykonując polecenie:
su root
Testowanie jest kolejnym krokiem w procesie tworzenia kodu. Wykonaj następujące polecenie, aby wykonać test dymowy:
Puppet apply demontp.pp --noop
Ostatnim krokiem jest biegać marionetkę w trybie rzeczywistym i sprawdź wynik.
puppet apply demontp.pp
Tym razem kod zostanie zastosowany, ponieważ klasa została zdefiniowana, a następnie zadeklarowana.
Upewnij się, że plik ntp.conf już istnieje:
ls -lrt /etc/ntp.conf
Sprawdź, czy usługa NTP została uruchomiona, uruchamiając następujące polecenie:
systemctl status ntpd