Ansible w praktyce

Book description

Ansible służy do automatyzacji wdrożeń oprogramowania i zarządzania jego konfiguracjami. Inżynierowie cenią ten framework za minimalne rozmiary, brak konieczności instalowania czegokolwiek na serwerach i prostotę użytkowania. Oferuje on proste i bardzo przydatne funkcje przeznaczone do automatyzacji wielowarstwowych środowisk, przydaje się też do obsługi ciągłej integracji i ciągłego wdrażania oprogramowania (CI/CD) bez żadnego przestoju. Może służyć do różnych celów: przygotowania infrastruktury jako kodu, wdrożeń aplikacji czy automatyzacji codziennych, czasochłonnych zadań administracyjnych.

Ta książka jest przeznaczona dla programistów i administratorów, którzy poszukują wydajnej metody zarządzania systemami. Pokazano w niej, w jaki sposób działa Ansible i jak należy przygotować go do pracy. Omówiono sposoby tworzenia scenariuszy (są to skrypty do zarządzania konfiguracją), zasady zarządzania zewnętrznymi serwerami, a także zaprezentowano najciekawsze funkcjonalności tego oprogramowania: wbudowane deklaratywne moduły . W tym wydaniu uwzględniono zmiany wynikające z dynamicznego rozwoju Ansible, dodano też kilka rozdziałów poświęconych kontenerom, platformie Molecule, kolekcjom Ansible, obrazom i infrastrukturze chmurowej. Wszystkie kody zostały zaktualizowane, a całość została wzbogacona o praktyczne wskazówki dotyczące dobrych praktyk programistycznych na platformach do weryfikowania kodu.

W książce:

zarządzanie konfiguracją i wdrożeniami systemów za pomocą Ansible
dobre praktyki pracy z Ansible
formaty kolekcji, moduły i wtyczki
generowanie obrazów kontenerów i instancji chmurowych
tworzenie infrastruktury chmurowej
automatyzacja procesów CI/CD w środowisku programistycznym
platforma Ansible Automation w metodyce DevOps

Minimalne rozmiary, prostota i wyjątkowa skuteczność — poznaj Ansible!

Table of contents

  1. Wstęp do trzeciego wydania
    1. Konwencje typograficzne
    2. Materiały w internecie
    3. Podziękowania
      1. Od Lorina
      2. Od René
      3. Od Basa
  2. Rozdział 1. Wprowadzenie
    1. Uwaga do wersji
    2. Do czego nadaje się Ansible?
    3. Jak działa Ansible?
    4. Na czym polega wielkość Ansible?
      1. Prostota
        1. Czytelna składnia
        2. Prosty audyt
        3. Skalowalność w dół
        4. Łatwość współdzielenia
        5. Systemowa abstrakcja
        6. Zadania od góry do dołu
      2. Użyteczność
        1. Wszystko w komplecie
        2. Wysyłanie informacji
        3. Wielowarstwowa orkiestracja
        4. Brak centralnego węzła
        5. Wtyczki i osadzenia
        6. Współpraca z mnóstwem systemów
        7. Szeroka skalowalność
      3. Bezpieczeństwo
        1. Skodyfikowana wiedza
        2. Powtarzalne systemy
        3. Równoważne środowiska
        4. Szyfrowane zmienne
        5. Bezpieczna transmisja danych
        6. Idempotentność
        7. Brak demonów
    5. Czy Ansible nie jest zbyt proste?
    6. Co musisz wiedzieć?
    7. Czego tu nie znajdziesz?
    8. Co dalej?
  3. Rozdział 2. Instalacja i konfiguracja
    1. Instalacja Ansible
      1. Luźne zależności
      2. Uruchomienie Ansible w kontenerze
      3. Rozwijanie Ansible
    2. Konfiguracja serwera testowego
      1. Konfiguracja serwera testowego za pomocą narzędzia Vagrant
      2. Wprowadzanie do Ansible informacji o serwerze
      3. Ułatwienia dzięki plikowi ansible.cfg
      4. Nie miej litości
    3. Przydatne opcje konfiguracyjne środowiska Vagrant
      1. Przekazywanie portów i prywatne adresy IP
      2. Włączanie przekazywania agentów
    4. Prowizjoner Docker
    5. Lokalny prowizjoner Ansible
    6. Kiedy uruchamiany jest prowizjoner?
    7. Wtyczki Vagrant
      1. Hostmanager
      2. VBGuest
    8. Dostosowywanie maszyny wirtualnej VirtualBox
    9. Plik Vagrantfile to kod Ruby
    10. Konfiguracja produkcyjna
    11. Podsumowanie
  4. Rozdział 3. Scenariusze — pierwsze kroki
    1. Wstępne wymagania
    2. Bardzo prosty scenariusz
      1. Tworzenie pliku konfiguracyjnego Nginx
      2. Tworzenie strony WWW
      3. Definiowanie grupy serwerów WWW
    3. Uruchomienie scenariusza
    4. Scenariusz to plik YAML
      1. Początek pliku
      2. Koniec pliku
      3. Komentarze
      4. Wcięcia i białe znaki
      5. Ciągi znaków
      6. Wartości logiczne
      7. Listy
      8. Słowniki
      9. Dzielenie wierszy
      10. Czysty YAML zamiast argumentów tekstowych
    5. Anatomia scenariusza
      1. Akcje
      2. Zadania
      3. Moduły
      4. Korzystanie z dokumentacji Ansible
      5. Wszystko razem
    6. Czy coś się zmieniło? Śledzenie stanu serwera
    7. Coś ciekawszego: szyfrowanie TLS
      1. Tworzenie certyfikatu TLS
      2. Zmienne
      3. Cudzysłowy w ciągach znaków
      4. Tworzenie szablonu konfiguracyjnego Nginx
      5. Pętle
      6. Procedury
      7. Kilka cech procedur, o których należy pamiętać
      8. Testy
      9. Weryfikacja
      10. Scenariusz
      11. Uruchomienie scenariusza
    8. Podsumowanie
  5. Rozdział 4. Ewidencja: opisywanie serwerów
    1. Plik ewidencyjny
      1. Wstępne wymagania: kilka maszyn Vagrant
    2. Funkcjonalne parametry ewidencji
      1. Zmienianie domyślnych wartości parametrów funkcjonalnych
    3. Grupy, grupy i jeszcze raz grupy
      1. Przykład: instalacja aplikacji Django
      2. Aliasy i porty
      3. Grupy grup
      4. Serwery numerowane (zwierzaki kontra stado)
    4. Zmienne serwerowe i grupowe w pliku ewidencyjnym
    5. Zmienne serwerowe i grupowe w osobnych plikach
    6. Dynamiczna ewidencja
      1. Wtyczki ewidencyjne
      2. Amazon EC2
      3. Azure Resource Manager
      4. Interfejs skryptu dynamicznej ewidencji
        1. Wyświetlanie szczegółowych informacji o serwerze
        2. Wyświetlanie grup
      5. Tworzenie skryptu dynamicznej ewidencji
    7. Podział ewidencji na kilka plików
    8. Dodawanie wpisów w trakcie działania scenariusza za pomocą modułów add_host i group_by
      1. Moduł add_host
      2. Moduł group_by
    9. Podsumowanie
  6. Rozdział 5. Zmienne i fakty
    1. Definiowanie zmiennych w scenariuszu
      1. Definiowanie zmiennych w oddzielnych plikach
      2. Układ katalogów
    2. Wyświetlanie wartości zmiennych
      1. Interpolacja zmiennych
    3. Rejestrowanie zmiennych
    4. Fakty
      1. Wyświetlanie wszystkich faktów skojarzonych z serwerem
      2. Wyświetlanie podzbioru faktów
      3. Fakty i informacje może zwracać każdy moduł
      4. Fakty lokalne
      5. Definiowanie nowej zmiennej za pomocą modułu set_fact
    5. Wbudowane zmienne
      1. hostvars
      2. inventory_hostname
      3. groups
    6. Definiowanie zmiennych w wierszu poleceń
    7. Priorytety
    8. Podsumowanie
  7. Rozdział 6. Mezzanine: nasza testowa aplikacja
    1. Dlaczego wdrażanie aplikacji produkcyjnych jest skomplikowane?
    2. Baza danych: PostgreSQL
    3. Serwer aplikacyjny: Gunicorn
    4. Serwer WWW: Nginx
    5. Menedżer procesów: Supervisor
    6. Podsumowanie
  8. Rozdział 7. Instalacja Mezzanine za pomocą Ansible
    1. Wyświetlanie zadań scenariusza
    2. Układ zainstalowanych plików
    3. Zmienne jawne i poufne
    4. Instalowanie wielu pakietów
    5. Instrukcja become w zadaniu
    6. Aktualizacja rejestru apt
    7. Sprawdzenie projektu za pomocą modułu git
    8. Instalacja Mezzanine i innych pakietów w środowisku wirtualnym
    9. Krótka dygresja: skomplikowane argumenty w zadaniach
    10. Konfiguracja bazy danych
    11. Tworzenie pliku local_settings.py na podstawie szablonu
    12. Polecenia django-manage
    13. Uruchamianie własnych skryptów Pythona w kontekście aplikacji
      1. Utworzenie plików konfiguracyjnych usług
    14. Aktywacja konfiguracji serwera Nginx
    15. Instalacja certyfikatów TLS
    16. Instalacja zadania Twitter w harmonogramie cron
    17. Cały scenariusz
    18. Uruchomienie scenariusza na maszynie wirtualnej Vagrant
    19. Diagnostyka
      1. Brak dostępu do repozytorium GitHub
      2. Brak dostępu do adresu 192.168.33.10.nip.io
      3. Komunikat Bad Request (400)
    20. Podsumowanie
  9. Rozdział 8. Diagnozowanie scenariuszy
    1. Czytelne komunikaty o błędach
    2. Diagnozowanie połączenia SSH
    3. Typowe wyzwania związane z usługą SSH
      1. PasswordAuthentication no
      2. Połączenie z użyciem innego konta
      3. Błąd weryfikacji klucza
      4. Sieci prywatne
    4. Moduł debug
    5. Debuger scenariuszy
    6. Moduł assert
    7. Sprawdzenie scenariusza przed uruchomieniem
      1. Sprawdzenie składni
      2. Wyświetlenie listy serwerów
      3. Wyświetlenie listy zadań
      4. Tryb weryfikacji
      5. Różnice (wyświetlenie zmian w plikach)
      6. Tagi
      7. Limity
    8. Podsumowanie
  10. Rozdział 9. Skalowanie scenariuszy: role
    1. Podstawowa struktura roli
    2. Przykład: role database i mezzanine
      1. Stosowanie ról w scenariuszach
      2. Zadania wstępne i końcowe
      3. Rola database instalująca bazę danych
      4. Rola mezzanine instalująca aplikację Mezzanine
    3. Tworzenie plików i katalogów ról za pomocą narzędzia ansible-galaxy
    4. Role zależne
    5. Repozytorium Ansible Galaxy
      1. Interfejs WWW
      2. Interfejs wiersza poleceń
        1. Instalacja roli
        2. Wyświetlanie zainstalowanych ról
        3. Dezinstalacja roli
      3. Wymagania ról w praktyce
      4. Udostępnianie własnej roli
    6. Podsumowanie
  11. Rozdział 10. Zaawansowane scenariusze
    1. Obsługa błędnie działających poleceń
    2. Filtry
      1. Filtr default
      2. Filtry zarejestrowanych zmiennych
      3. Filtry ścieżek plików
      4. Tworzenie własnych filtrów
    3. Wyszukiwarki
      1. file
      2. pipe
      3. env
      4. password
      5. template
      6. csvfile
      7. dig
      8. redis
      9. Utworzenie własnej wyszukiwarki
    4. Zaawansowane pętle
      1. Wyszukiwarki with
      2. with_lines
      3. with_fileglob
      4. with_dict
      5. Wyszukiwarki jako pętle
    5. Sterowanie pętlami
      1. Określanie nazwy zmiennej iteracyjnej
      2. Umieszczanie etykiet w wynikach
    6. Importowanie i dołączanie plików
      1. Dynamiczne dołączanie plików
      2. Dołączanie ról
      3. Sterowanie realizacją roli
    7. Bloki
    8. Obsługa błędów za pomocą bloków
    9. Szyfrowanie poufnych danych
      1. Kilka sejfów z różnymi hasłami
    10. Podsumowanie
  12. Rozdział 11. Dostosowywanie serwerów, przebiegów i procedur
    1. Wzorce specyfikowania serwerów
    2. Określanie grupy serwerów
    3. Wykonywanie zadania na komputerze sterującym
    4. Jawne gromadzenie faktów
    5. Odczytywanie adresu IP serwera
    6. Wykonywanie zadania na innym komputerze niż serwer
    7. Wykonywanie zadania na kolejnych serwerach
    8. Wykonywanie zadania w grupie serwerów
    9. Jednokrotne wykonanie zadania
    10. Selektywne wykonywanie zadań
      1. step
      2. start-at-task
      3. Tagi wykonywane
      4. Tagi pomijane
    11. Strategie przebiegów
      1. Strategia linear
      2. Strategia free
    12. Zaawansowane procedury
      1. Procedury w zadaniach wstępnych i końcowych
      2. Procedury natychmiastowe
      3. Metapolecenia
      4. Procedury powiadamiające inne procedury
      5. Procedury nasłuchujące
      6. Procedury nasłuchujące: konfiguracja certyfikatów SSL
    13. Podsumowanie
  13. Rozdział 12. Zarządzanie serwerami Windows
    1. Połączenie z systemem Windows
    2. PowerShell
    3. Moduły Windows
    4. Nasza maszyna programistyczna Java
    5. Tworzenie lokalnych kont użytkowników
    6. Funkcje Windows
    7. Instalacja oprogramowania za pomocą menedżera Chocolatey
    8. Konfiguracja środowiska Java
    9. Aktualizacja systemu Windows
    10. Podsumowanie
  14. Rozdział 13. Ansible i kontenery
    1. Kubernetes
    2. Proces uruchamiania aplikacji kontenerowej
    3. Rejestry
    4. Ansible i Docker
    5. Połączenie z demonem Docker
    6. Przykładowa aplikacja: Ghost
    7. Uruchomienie kontenera Docker na lokalnym komputerze
    8. Utworzenie obrazu na podstawie pliku Dockerfile
    9. Wysłanie obrazu do rejestru
    10. Konfigurowanie kontenerów na lokalnym komputerze
    11. Uzyskiwanie informacji o lokalnym obrazie
    12. Wdrożenie aplikacji kontenerowej
      1. Utworzenie maszyny MySQL
      2. Wdrożenie bazy danych dla aplikacji Ghost
      3. Fronton
      4. Fronton: Ghost
      5. Fronton: NGINX
      6. Usunięcie kontenerów
    13. Podsumowanie
  15. Rozdział 14. Kontrola jakości przy użyciu platformy Molecule
    1. Instalacja i konfiguracja
    2. Konfigurowanie sterowników Molecule
    3. Utworzenie roli Ansible
    4. Scenariusze Molecule
      1. Żądany stan
      2. Konfigurowanie scenariusza Molecule
      3. Zarządzanie maszynami wirtualnymi
      4. Zarządzanie kontenerami
    5. Polecenia Molecule
    6. Lintowanie
      1. YAMLlint
      2. ansible-lint
      3. ansible-later
    7. Weryfikatory
      1. Ansible
      2. Goss
      3. TestInfra
    8. Podsumowanie
  16. Rozdział 15. Kolekcje
    1. Instalacja kolekcji
    2. Wyświetlenie listy kolekcji
    3. Stosowanie kolekcji w scenariuszu
    4. Tworzenie kolekcji
    5. Podsumowanie
  17. Rozdział 16. Tworzenie obrazów
    1. Tworzenie obrazów za pomocą narzędzia Packer
      1. Tworzenie maszyny wirtualnej w środowisku Vagrant VirtualBox
      2. Połączenie narzędzi Packer i Vagrant
      3. Obrazy chmurowe
      4. Google Cloud Platform
      5. Azure
      6. Amazon EC2
      7. Scenariusz
    2. Obraz Docker: GCC 11
    3. Podsumowanie
  18. Rozdział 17. Infrastruktura chmurowa
    1. Terminologia
      1. Instancja
      2. Obraz AMI
      3. Etykieta
    2. Definiowanie poświadczeń
      1. Zmienne środowiskowe
      2. Pliki konfiguracyjne
    3. Wymagania: biblioteka Python Boto3
    4. Dynamiczne ewidencjonowanie instancji
      1. Buforowanie ewidencji
      2. Inne opcje konfiguracyjne
    5. Definiowanie dynamicznych grup zasobów za pomocą etykiet
      1. Przypisywanie etykiet do istniejących zasobów
      2. Czytelne nazwy grup
    6. Wirtualne chmury prywatne
    7. Przygotowanie pliku ansible.cfg
    8. Uruchamianie nowych instancji
    9. Pary kluczy EC2
      1. Utworzenie nowego klucza
    10. Grupy zabezpieczeń
      1. Dozwolone adresy IP
      2. Porty w grupach zabezpieczeń
    11. Uzyskiwanie najnowszego obrazu AMI
    12. Utworzenie nowej instancji i dodanie jej do grupy
    13. Oczekiwanie na gotowość instancji
    14. Wszystko razem
    15. Konfiguracja chmury VPC
      1. Dynamiczne ewidencjonowanie i chmura VPC
    16. Podsumowanie
  19. Rozdział 18. Wtyczki zwrotne
    1. Wtyczki standardowego wyjścia
      1. ARA
      2. debug
      3. default
      4. dense
      5. json
      6. minimal
      7. null
      8. oneline
    2. Wtyczki powiadomień i agregacji
      1. Moduły Pythona
      2. foreman
      3. jabber
      4. junit
      5. log_plays
      6. logentries
      7. logstash
      8. mail
      9. profile_roles
      10. profile_tasks
      11. say
      12. slack
      13. splunk
      14. timer
    3. Podsumowanie
  20. Rozdział 19. Własne moduły
    1. Przykład: sprawdzenie, czy zewnętrzny serwer jest dostępny
      1. Użycie modułu script zamiast tworzenia własnego modułu
      2. Skrypt can_reach jako moduł
    2. Czy trzeba tworzyć własne moduły?
    3. Gdzie umieszczać własne moduły?
    4. Jak Ansible uruchamia moduły?
      1. Utworzenie niezależnego skryptu Pythona z argumentami (tylko Python)
      2. Skopiowanie modułu do serwera
      3. Utworzenie pliku argumentów na serwerze (inne języki)
      4. Wywołanie modułu
    5. Oczekiwane wyniki
      1. Zmienne wynikowe oczekiwane przez Ansible
        1. changed
        2. failed
        3. msg
    6. Tworzenie modułów w języku Python
      1. Analiza argumentów
      2. Odczytywanie argumentów
      3. Import klasy pomocniczej AnsibleModule
      4. Opcje argumentów
        1. required
        2. default
        3. choices
        4. aliases
        5. type
      5. Parametry konstruktora klasy AnsibleModule
        1. argument_spec
        2. no_log
        3. check_invalid_arguments
        4. mutually_exclusive
        5. required_one_of
        6. add_file_common_args
        7. bypass_checks
      6. Zwracanie informacji o pomyślnym lub niepomyślnym wykonaniu modułu
      7. Wywoływanie zewnętrznych programów
      8. Tryb weryfikacji (suchy przebieg)
    7. Dokumentowanie modułu
    8. Diagnozowanie modułu
    9. Implementowanie modułu jako skryptu Bash
    10. Określanie alternatywnego położenia powłoki Bash
    11. Podsumowanie
  21. Rozdział 20. Przyspieszanie Ansible
    1. Zwielokrotnienie sesji SSH (opcja ControlPersist)
      1. Ręczne włączenie zwielokrotnienia sesji SSH
      2. Opcje zwielokrotniania sesji SSH
    2. Dodatkowe strojenie sesji SSH
      1. Zalecenia dotyczące algorytmów
    3. Potokowanie
      1. Włączenie potokowania
      2. Konfigurowanie potokowania na serwerze
    4. Mitogen dla Ansible
    5. Zapamiętywanie faktów
      1. Zapamiętywanie faktów w plikach JSON
      2. Zapamiętywanie faktów w bazie Redis
      3. Zapamiętywanie faktów w bazie Memcached
    6. Równoległe połączenia
    7. Równoległe wykonywanie zadań za pomocą instrukcji async
    8. Podsumowanie
  22. Rozdział 21. Sieci i bezpieczeństwo
    1. Zarządzanie siecią
      1. Obsługiwane urządzenia
      2. Komunikacja Ansible z urządzeniami sieciowymi
      3. Tryb uprzywilejowany
      4. Ewidencja sieci
      5. Zastosowania automatyzacji operacji sieciowych
    2. Bezpieczeństwo
      1. Czy trzeba przestrzegać norm?
      2. Zabezpieczony, ale nie bezpieczny
      3. Szare IT
      4. Jasne IT
      5. Zero zaufania
    3. Podsumowanie
  23. Rozdział 22. Procesy CI/CD i Ansible
    1. Ciągła integracja oprogramowania
      1. Elementy systemu ciągłej integracji oprogramowania
        1. Repozytorium artefaktów
        2. Gitea
        3. Jakość kodu
        4. Serwer CI
        5. Jenkins
      2. Jenkins i Ansible
        1. Konfigurowanie systemu Jenkins za pomocą kodu
        2. Konfiguracja jako kod w systemie Jenkins
      3. Uruchomienie procesu CI dla ról Ansible
    2. Testy
    3. Wtyczka Ansible
    4. Wtyczka Ansible Tower
    5. Podsumowanie
  24. Rozdział 23. Ansible Automation Platform
    1. Modele subskrypcyjne
      1. Wersja próbna platformy Ansible Automation Platform
    2. Do czego służy platforma Ansible Automation?
      1. Kontrola dostępu
      2. Projekty
      3. Zarządzanie ewidencją
      4. Uruchamianie zadań według szablonów
    3. Interfejs REST API
    4. Kolekcja awx.awx
      1. Instalacja
      2. Zdefiniowanie organizacji
      3. Utworzenie ewidencji
      4. Uruchamianie scenariusza za pomocą szablonu zadania
    5. Uruchamianie Ansible za pomocą kontenerów
      1. Tworzenie środowisk wykonawczych
    6. Podsumowanie
  25. Rozdział 24. Dobre praktyki
    1. Prostota, modułowość i kompozycyjność
    2. Porządkowanie treści
    3. Oddzielenie ewidencji od projektów
    4. Oddzielenie ról od kolekcji
    5. Scenariusze
    6. Styl kodu
    7. Oznaczanie i testowanie wszystkiego
    8. Żądany stan
    9. Ciągłe dostarczanie oprogramowania
    10. Bezpieczeństwo
    11. Wdrażanie
    12. Wskaźniki wydajności
    13. Ocenianie skuteczności dobrych praktyk
    14. Słowo końcowe
  26. Bibliografia
    1. O autorach
    2. Kolofon

Product information

  • Title: Ansible w praktyce
  • Author(s): Bas Meijer
  • Release date: April 2023
  • Publisher(s): Helion
  • ISBN: 9788383221533