Szczegóły ebooka

Ansible w praktyce. Automatyzacja konfiguracji i proste instalowanie systemów. Wydanie III

Ansible w praktyce. Automatyzacja konfiguracji i proste instalowanie systemów. Wydanie III

Bas Meijer, Lorin Hochstein, René Moser

Ebook

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!

Wstęp do trzeciego wydania

1. Wprowadzenie

  • Uwaga do wersji
  • Do czego nadaje się Ansible?
  • Jak działa Ansible?
  • Na czym polega wielkość Ansible?
    • Prostota
    • Użyteczność
    • Bezpieczeństwo
  • Czy Ansible nie jest zbyt proste?
  • Co musisz wiedzieć?
  • Czego tu nie znajdziesz?
  • Co dalej?

2. Instalacja i konfiguracja

  • Instalacja Ansible
    • Luźne zależności
    • Uruchomienie Ansible w kontenerze
    • Rozwijanie Ansible
  • Konfiguracja serwera testowego
    • Konfiguracja serwera testowego za pomocą narzędzia Vagrant
    • Wprowadzanie do Ansible informacji o serwerze
    • Ułatwienia dzięki plikowi ansible.cfg
    • Nie miej litości
  • Przydatne opcje konfiguracyjne środowiska Vagrant
    • Przekazywanie portów i prywatne adresy IP
    • Włączanie przekazywania agentów
  • Prowizjoner Docker
  • Lokalny prowizjoner Ansible
  • Kiedy uruchamiany jest prowizjoner?
  • Wtyczki Vagrant
    • Hostmanager
    • VBGuest
  • Dostosowywanie maszyny wirtualnej VirtualBox
  • Plik Vagrantfile to kod Ruby
  • Konfiguracja produkcyjna
  • Podsumowanie

3. Scenariusze - pierwsze kroki

  • Wstępne wymagania
  • Bardzo prosty scenariusz
    • Tworzenie pliku konfiguracyjnego Nginx
    • Tworzenie strony WWW
    • Definiowanie grupy serwerów WWW
  • Uruchomienie scenariusza
  • Scenariusz to plik YAML
    • Początek pliku
    • Koniec pliku
    • Komentarze
    • Wcięcia i białe znaki
    • Ciągi znaków
    • Wartości logiczne
    • Listy
    • Słowniki
    • Dzielenie wierszy
    • Czysty YAML zamiast argumentów tekstowych
  • Anatomia scenariusza
    • Akcje
    • Zadania
    • Moduły
    • Korzystanie z dokumentacji Ansible
    • Wszystko razem
  • Czy coś się zmieniło? Śledzenie stanu serwera
  • Coś ciekawszego: szyfrowanie TLS
    • Tworzenie certyfikatu TLS
    • Zmienne
    • Cudzysłowy w ciągach znaków
    • Tworzenie szablonu konfiguracyjnego Nginx
    • Pętle
    • Procedury
    • Kilka cech procedur, o których należy pamiętać
    • Testy
    • Weryfikacja
    • Scenariusz
    • Uruchomienie scenariusza
  • Podsumowanie

4. Ewidencja: opisywanie serwerów

  • Plik ewidencyjny
    • Wstępne wymagania: kilka maszyn Vagrant
  • Funkcjonalne parametry ewidencji
    • Zmienianie domyślnych wartości parametrów funkcjonalnych
  • Grupy, grupy i jeszcze raz grupy
    • Przykład: instalacja aplikacji Django
    • Aliasy i porty
    • Grupy grup
    • Serwery numerowane (zwierzaki kontra stado)
  • Zmienne serwerowe i grupowe w pliku ewidencyjnym
  • Zmienne serwerowe i grupowe w osobnych plikach
  • Dynamiczna ewidencja
    • Wtyczki ewidencyjne
    • Amazon EC2
    • Azure Resource Manager
    • Interfejs skryptu dynamicznej ewidencji
    • Tworzenie skryptu dynamicznej ewidencji
  • Podział ewidencji na kilka plików
  • Dodawanie wpisów w trakcie działania scenariusza za pomocą modułów add_host i group_by
    • Moduł add_host
    • Moduł group_by
  • Podsumowanie

5. Zmienne i fakty

  • Definiowanie zmiennych w scenariuszu
    • Definiowanie zmiennych w oddzielnych plikach
    • Układ katalogów
  • Wyświetlanie wartości zmiennych
    • Interpolacja zmiennych
  • Rejestrowanie zmiennych
  • Fakty
    • Wyświetlanie wszystkich faktów skojarzonych z serwerem
    • Wyświetlanie podzbioru faktów
    • Fakty i informacje może zwracać każdy moduł
    • Fakty lokalne
    • Definiowanie nowej zmiennej za pomocą modułu set_fact
  • Wbudowane zmienne
    • hostvars
    • inventory_hostname
    • groups
  • Definiowanie zmiennych w wierszu poleceń
  • Priorytety
  • Podsumowanie

6. Mezzanine: nasza testowa aplikacja

  • Dlaczego wdrażanie aplikacji produkcyjnych jest skomplikowane?
  • Baza danych: PostgreSQL
  • Serwer aplikacyjny: Gunicorn
  • Serwer WWW: Nginx
  • Menedżer procesów: Supervisor
  • Podsumowanie

7. Instalacja Mezzanine za pomocą Ansible

  • Wyświetlanie zadań scenariusza
  • Układ zainstalowanych plików
  • Zmienne jawne i poufne
  • Instalowanie wielu pakietów
  • Instrukcja become w zadaniu
  • Aktualizacja rejestru apt
  • Sprawdzenie projektu za pomocą modułu git
  • Instalacja Mezzanine i innych pakietów w środowisku wirtualnym
  • Krótka dygresja: skomplikowane argumenty w zadaniach
  • Konfiguracja bazy danych
  • Tworzenie pliku local_settings.py na podstawie szablonu
  • Polecenia django-manage
  • Uruchamianie własnych skryptów Pythona w kontekście aplikacji
    • Utworzenie plików konfiguracyjnych usług
  • Aktywacja konfiguracji serwera Nginx
  • Instalacja certyfikatów TLS
  • Instalacja zadania Twitter w harmonogramie cron
  • Cały scenariusz
  • Uruchomienie scenariusza na maszynie wirtualnej Vagrant
  • Diagnostyka
    • Brak dostępu do repozytorium GitHub
    • Brak dostępu do adresu 192.168.33.10.nip.io
    • Komunikat Bad Request (400)
  • Podsumowanie

8. Diagnozowanie scenariuszy

  • Czytelne komunikaty o błędach
  • Diagnozowanie połączenia SSH
  • Typowe wyzwania związane z usługą SSH
    • PasswordAuthentication no
    • Połączenie z użyciem innego konta
    • Błąd weryfikacji klucza
    • Sieci prywatne
  • Moduł debug
  • Debuger scenariuszy
  • Moduł assert
  • Sprawdzenie scenariusza przed uruchomieniem
    • Sprawdzenie składni
    • Wyświetlenie listy serwerów
    • Wyświetlenie listy zadań
    • Tryb weryfikacji
    • Różnice (wyświetlenie zmian w plikach)
    • Tagi
    • Limity
  • Podsumowanie

9. Skalowanie scenariuszy: role

  • Podstawowa struktura roli
  • Przykład: role database i mezzanine
    • Stosowanie ról w scenariuszach
    • Zadania wstępne i końcowe
    • Rola database instalująca bazę danych
    • Rola mezzanine instalująca aplikację Mezzanine
  • Tworzenie plików i katalogów ról za pomocą narzędzia ansible-galaxy
  • Role zależne
  • Repozytorium Ansible Galaxy
    • Interfejs WWW
    • Interfejs wiersza poleceń
    • Wymagania ról w praktyce
    • Udostępnianie własnej roli
  • Podsumowanie

10. Zaawansowane scenariusze

  • Obsługa błędnie działających poleceń
  • Filtry
    • Filtr default
    • Filtry zarejestrowanych zmiennych
    • Filtry ścieżek plików
    • Tworzenie własnych filtrów
  • Wyszukiwarki
    • file
    • pipe
    • env
    • password
    • template
    • csvfile
    • dig
    • redis
    • Utworzenie własnej wyszukiwarki
  • Zaawansowane pętle
    • Wyszukiwarki with
    • with_lines
    • with_fileglob
    • with_dict
    • Wyszukiwarki jako pętle
  • Sterowanie pętlami
    • Określanie nazwy zmiennej iteracyjnej
    • Umieszczanie etykiet w wynikach
  • Importowanie i dołączanie plików
    • Dynamiczne dołączanie plików
    • Dołączanie ról
    • Sterowanie realizacją roli
  • Bloki
  • Obsługa błędów za pomocą bloków
  • Szyfrowanie poufnych danych
    • Kilka sejfów z różnymi hasłami
  • Podsumowanie

11. Dostosowywanie serwerów, przebiegów i procedur

  • Wzorce specyfikowania serwerów
  • Określanie grupy serwerów
  • Wykonywanie zadania na komputerze sterującym
  • Jawne gromadzenie faktów
  • Odczytywanie adresu IP serwera
  • Wykonywanie zadania na innym komputerze niż serwer
  • Wykonywanie zadania na kolejnych serwerach
  • Wykonywanie zadania w grupie serwerów
  • Jednokrotne wykonanie zadania
  • Selektywne wykonywanie zadań
    • step
    • start-at-task
    • Tagi wykonywane
    • Tagi pomijane
  • Strategie przebiegów
    • Strategia linear
    • Strategia free
  • Zaawansowane procedury
    • Procedury w zadaniach wstępnych i końcowych
    • Procedury natychmiastowe
    • Metapolecenia
    • Procedury powiadamiające inne procedury
    • Procedury nasłuchujące
    • Procedury nasłuchujące: konfiguracja certyfikatów SSL
  • Podsumowanie

12. Zarządzanie serwerami Windows

  • Połączenie z systemem Windows
  • PowerShell
  • Moduły Windows
  • Nasza maszyna programistyczna Java
  • Tworzenie lokalnych kont użytkowników
  • Funkcje Windows
  • Instalacja oprogramowania za pomocą menedżera Chocolatey
  • Konfiguracja środowiska Java
  • Aktualizacja systemu Windows
  • Podsumowanie

13. Ansible i kontenery

  • Kubernetes
  • Proces uruchamiania aplikacji kontenerowej
  • Rejestry
  • Ansible i Docker
  • Połączenie z demonem Docker
  • Przykładowa aplikacja: Ghost
  • Uruchomienie kontenera Docker na lokalnym komputerze
  • Utworzenie obrazu na podstawie pliku Dockerfile
  • Wysłanie obrazu do rejestru
  • Konfigurowanie kontenerów na lokalnym komputerze
  • Uzyskiwanie informacji o lokalnym obrazie
  • Wdrożenie aplikacji kontenerowej
    • Utworzenie maszyny MySQL
    • Wdrożenie bazy danych dla aplikacji Ghost
    • Fronton
    • Fronton: Ghost
    • Fronton: NGINX
    • Usunięcie kontenerów
  • Podsumowanie

14. Kontrola jakości przy użyciu platformy Molecule

  • Instalacja i konfiguracja
  • Konfigurowanie sterowników Molecule
  • Utworzenie roli Ansible
  • Scenariusze Molecule
    • Żądany stan
    • Konfigurowanie scenariusza Molecule
    • Zarządzanie maszynami wirtualnymi
    • Zarządzanie kontenerami
  • Polecenia Molecule
  • Lintowanie
    • YAMLlint
    • ansible-lint
    • ansible-later
  • Weryfikatory
    • Ansible
    • Goss
    • TestInfra
  • Podsumowanie

15. Kolekcje

  • Instalacja kolekcji
  • Wyświetlenie listy kolekcji
  • Stosowanie kolekcji w scenariuszu
  • Tworzenie kolekcji
  • Podsumowanie

16. Tworzenie obrazów

  • Tworzenie obrazów za pomocą narzędzia Packer
    • Tworzenie maszyny wirtualnej w środowisku Vagrant VirtualBox
    • Połączenie narzędzi Packer i Vagrant
    • Obrazy chmurowe
    • Google Cloud Platform
    • Azure
    • Amazon EC2
    • Scenariusz
  • Obraz Docker: GCC 11
  • Podsumowanie

17. Infrastruktura chmurowa

  • Terminologia
    • Instancja
    • Obraz AMI
    • Etykieta
  • Definiowanie poświadczeń
    • Zmienne środowiskowe
    • Pliki konfiguracyjne
  • Wymagania: biblioteka Python Boto3
  • Dynamiczne ewidencjonowanie instancji
    • Buforowanie ewidencji
    • Inne opcje konfiguracyjne
  • Definiowanie dynamicznych grup zasobów za pomocą etykiet
    • Przypisywanie etykiet do istniejących zasobów
    • Czytelne nazwy grup
  • Wirtualne chmury prywatne
  • Przygotowanie pliku ansible.cfg
  • Uruchamianie nowych instancji
  • Pary kluczy EC2
    • Utworzenie nowego klucza
  • Grupy zabezpieczeń
    • Dozwolone adresy IP
    • Porty w grupach zabezpieczeń
  • Uzyskiwanie najnowszego obrazu AMI
  • Utworzenie nowej instancji i dodanie jej do grupy
  • Oczekiwanie na gotowość instancji
  • Wszystko razem
  • Konfiguracja chmury VPC
    • Dynamiczne ewidencjonowanie i chmura VPC
  • Podsumowanie

18. Wtyczki zwrotne

  • Wtyczki standardowego wyjścia
    • ARA
    • debug
    • default
    • dense
    • json
    • minimal
    • null
    • oneline
  • Wtyczki powiadomień i agregacji
    • Moduły Pythona
    • foreman
    • jabber
    • junit
    • log_plays
    • logentries
    • logstash
    • mail
    • profile_roles
    • profile_tasks
    • say
    • slack
    • splunk
    • timer
  • Podsumowanie

19. Własne moduły

  • Przykład: sprawdzenie, czy zewnętrzny serwer jest dostępny
    • Użycie modułu script zamiast tworzenia własnego modułu
    • Skrypt can_reach jako moduł
  • Czy trzeba tworzyć własne moduły?
  • Gdzie umieszczać własne moduły?
  • Jak Ansible uruchamia moduły?
    • Utworzenie niezależnego skryptu Pythona z argumentami (tylko Python)
    • Skopiowanie modułu do serwera
    • Utworzenie pliku argumentów na serwerze (inne języki)
    • Wywołanie modułu
  • Oczekiwane wyniki
    • Zmienne wynikowe oczekiwane przez Ansible
  • Tworzenie modułów w języku Python
    • Analiza argumentów
    • Odczytywanie argumentów
    • Import klasy pomocniczej AnsibleModule
    • Opcje argumentów
    • Parametry konstruktora klasy AnsibleModule
    • Zwracanie informacji o pomyślnym lub niepomyślnym wykonaniu modułu
    • Wywoływanie zewnętrznych programów
    • Tryb weryfikacji (suchy przebieg)
  • Dokumentowanie modułu
  • Diagnozowanie modułu
  • Implementowanie modułu jako skryptu Bash
  • Określanie alternatywnego położenia powłoki Bash
  • Podsumowanie

20. Przyspieszanie Ansible

  • Zwielokrotnienie sesji SSH (opcja ControlPersist)
    • Ręczne włączenie zwielokrotnienia sesji SSH
    • Opcje zwielokrotniania sesji SSH
  • Dodatkowe strojenie sesji SSH
    • Zalecenia dotyczące algorytmów
  • Potokowanie
    • Włączenie potokowania
    • Konfigurowanie potokowania na serwerze
  • Mitogen dla Ansible
  • Zapamiętywanie faktów
    • Zapamiętywanie faktów w plikach JSON
    • Zapamiętywanie faktów w bazie Redis
    • Zapamiętywanie faktów w bazie Memcached
  • Równoległe połączenia
  • Równoległe wykonywanie zadań za pomocą instrukcji async
  • Podsumowanie

21. Sieci i bezpieczeństwo

  • Zarządzanie siecią
    • Obsługiwane urządzenia
    • Komunikacja Ansible z urządzeniami sieciowymi
    • Tryb uprzywilejowany
    • Ewidencja sieci
    • Zastosowania automatyzacji operacji sieciowych
  • Bezpieczeństwo
    • Czy trzeba przestrzegać norm?
    • Zabezpieczony, ale nie bezpieczny
    • Szare IT
    • Jasne IT
    • Zero zaufania
  • Podsumowanie

22. Procesy CI/CD i Ansible

  • Ciągła integracja oprogramowania
    • Elementy systemu ciągłej integracji oprogramowania
    • Jenkins i Ansible
    • Uruchomienie procesu CI dla ról Ansible
  • Testy
  • Wtyczka Ansible
  • Wtyczka Ansible Tower
  • Podsumowanie

23. Ansible Automation Platform

  • Modele subskrypcyjne
    • Wersja próbna platformy Ansible Automation Platform
  • Do czego służy platforma Ansible Automation?
    • Kontrola dostępu
    • Projekty
    • Zarządzanie ewidencją
    • Uruchamianie zadań według szablonów
  • Interfejs REST API
  • Kolekcja awx.awx
    • Instalacja
    • Zdefiniowanie organizacji
    • Utworzenie ewidencji
    • Uruchamianie scenariusza za pomocą szablonu zadania
  • Uruchamianie Ansible za pomocą kontenerów
    • Tworzenie środowisk wykonawczych
  • Podsumowanie

24. Dobre praktyki

  • Prostota, modułowość i kompozycyjność
  • Porządkowanie treści
  • Oddzielenie ewidencji od projektów
  • Oddzielenie ról od kolekcji
  • Scenariusze
  • Styl kodu
  • Oznaczanie i testowanie wszystkiego
  • Żądany stan
  • Ciągłe dostarczanie oprogramowania
  • Bezpieczeństwo
  • Wdrażanie
  • Wskaźniki wydajności
  • Ocenianie skuteczności dobrych praktyk
  • Słowo końcowe

Bibliografia

  • Tytuł: Ansible w praktyce. Automatyzacja konfiguracji i proste instalowanie systemów. Wydanie III
  • Autor: Bas Meijer, Lorin Hochstein, René Moser
  • Tytuł oryginału: Ansible: Up and Running: Automating Configuration Management and Deployment the Easy Way, 3rd Edition
  • Tłumaczenie: Andrzej Watrak
  • ISBN: 978-83-8322-153-3, 9788383221533
  • Data wydania: 2023-04-04
  • Format: Ebook
  • Identyfikator pozycji: ansip3
  • Wydawca: Helion