1/50
Wprowadzenie do automatyzacji
  • Automatyzacja w IT to wykorzystanie technologii do wykonywania powtarzalnych zadań i procesów bez interwencji człowieka.
  • Jej celem jest zwiększenie efektywności, redukcja kosztów, a przede wszystkim minimalizacja ryzyka błędów ludzkich, które są nieuniknione przy ręcznym zarządzaniu złożonymi systemami.
  • Automatyzacja przekształca operacje IT z reaktywnych w proaktywne, pozwalając inżynierom skupić się na zadaniach o wyższej wartości, takich jak projektowanie i optymalizacja, zamiast na gaszeniu pożarów i wykonywaniu żmudnych, powtarzalnych czynności.
Ilustracja dla slajdu 1

Automatyzacja w IT obejmuje szerokie spektrum działań, od prostych skryptów powłoki po zaawansowane systemy orkiestracji oparte na sztucznej inteligencji. Kluczowym celem jest eliminacja ręcznej pracy przy zadaniach administracyjnych, takich jak zarządzanie użytkownikami, aktualizacje oprogramowania czy monitorowanie zasobów. W praktyce automatyzacja może przybierać formę zadań cron, skryptów w języku Python, a także rozbudowanych platform takich jak Ansible czy Terraform.

Współczesne organizacje IT coraz częściej wdrażają podejście automatyzacji całościowej, co oznacza automatyzację nie tylko procesów technicznych, ale także operacyjnych i biznesowych. Automatyzacja pozwala na osiągnięcie spójności środowisk, co jest szczególnie istotne w przypadku zarządzania setkami lub tysiącami serwerów. Dzięki niej możliwe jest również szybsze reagowanie na zmieniające się potrzeby biznesowe.

Wdrożenie automatyzacji wymaga jednak przemyślanej strategii i odpowiedniego przygotowania zespołu. Należy zacząć od audytu istniejących procesów i identyfikacji tych, które są najbardziej powtarzalne i czasochłonne. Istotne jest również zapewnienie odpowiedniego poziomu dokumentacji i szkoleń dla personelu, aby automatyzacja była skuteczna i bezpieczna.

2/50
Rola automatyzacji w utrzymaniu usług
Co więcej, automatyzacja jest fundamentem nowoczesnego monitoringu i reagowania na incydenty, pozwalając na automatyczne skalowanie usług w odpowiedzi na obciążenie oraz na automatyczne naprawianie niektórych rodzajów awarii.
  • W kontekście utrzymania usług, automatyzacja odgrywa kluczową rolę na każdym etapie cyklu życia systemu.
  • Umożliwia ona zautomatyzowane provisionowanie infrastruktury, spójną i powtarzalną konfigurację usług, a także zautomatyzowane procesy wdrażania i testowania.
  • Jest to klucz do budowania niezawodnych i skalowalnych systemów w dynamicznym świecie IT.
Ilustracja dla slajdu 2

Utrzymanie usług IT w nowoczesnych organizacjach opiera się na trzech filarach: ludziach, procesach i narzędziach, a automatyzacja łączy je wszystkie w spójną całość. Automatyzacja pełni kluczową rolę w zapewnieniu ciągłości działania usług, minimalizując czas przestojów i przyspieszając procesy przywracania sprawności po awariach. W kontekście SLA automatyzacja umożliwia dotrzymywanie zobowiązań poprzez szybkie i powtarzalne wykonywanie procedur operacyjnych.

W obszarze zarządzania incydentami automatyzacja pozwala na automatyczną kategoryzację, priorytetyzację i eskalację zgłoszeń. Systemy takie jak ServiceNow czy Jira mogą być zintegrowane z narzędziami automatyzacji, co umożliwia automatyczne tworzenie ticketów i wykonywanie wstępnych działań naprawczych. Dzięki temu czas reakcji na incydent ulega znacznemu skróceniu.

Automatyzacja wspiera również zarządzanie zmianami, umożliwiając automatyczne wykonywanie standardowych zmian bez konieczności uzyskiwania zgody komitetu ds. zmian. Zmiany definiowane jako kod podlegają takim samym procesom weryfikacji jak kod aplikacji, co zwiększa ich bezpieczeństwo. Dodatkowo automatyzacja ułatwia prowadzenie audytów i raportowanie zgodności z regulacjami.

3/50
Narzędzia automatyzacji: Ansible, Puppet, Chef
  • Na rynku istnieje wiele narzędzi do zarządzania konfiguracją i automatyzacji, z których trzy historycznie zdominowały ten obszar.
  • Puppet i Chef to narzędzia oparte na modelu klient-serwer, gdzie centralny serwer zarządza konfiguracją agentów zainstalowanych na maszynach.
  • Wymagają one bardziej złożonej infrastruktury. Ansible z kolei działa w trybie bezagentowym, komunikując się z zarządzanymi maszynami za pomocą standardowego protokołu SSH.
  • Jego prostota, niski próg wejścia i czytelna składnia oparta na YAML sprawiły, że stał się on niezwykle popularny, zwłaszcza w środowiskach chmurowych i DevOps.
Ilustracja dla slajdu 3

Ansible wykorzystuje architekturę bezagentową, komunikując się z zarządzanymi węzłami przez SSH lub WinRM, co eliminuje konieczność instalowania dodatkowego oprogramowania. Playbooki w formacie YAML definiują stany pożądane jako sekwencje zadań, a moduły Ansible odpowiadają za konkretne operacje na systemie. Ansible Tower lub AWX oferują interfejs webowy i zaawansowane funkcje zarządzania dostępem.

Puppet używa własnego języka deklaratywnego opartego na Ruby i modelu klient-serwer, gdzie agent na węźle regularnie pobiera katalog zasobów z serwera master. Chef wykorzystuje receptury napisane w Ruby, które definiują kolejność konfiguracji węzłów. Chef Server przechowuje książki kucharskie i metadane środowiska, a klienci pobierają je i stosują lokalnie.

Wybór między tymi narzędziami zależy od wielu czynników, w tym wielkości środowiska, kompetencji zespołu i wymagań dotyczących skalowalności. Ansible jest często wybierany do mniejszych i średnich wdrożeń ze względu na prostotę. Puppet i Chef sprawdzają się lepiej w dużych, heterogenicznych środowiskach wymagających zaawansowanego raportowania i kontroli zgodności.

4/50
Porównanie narzędzi
  • Wybór narzędzia do automatyzacji zależy od specyfiki projektu i preferencji zespołu.
  • Puppet, z jego silnie deklaratywnym językiem i modelem opartym na grafie zależności, doskonale sprawdza się w dużych, stabilnych środowiskach.
  • Chef, oferujący większą elastyczność dzięki użyciu języka Ruby, jest ceniony przez zespoły o silnych kompetencjach deweloperskich. Ansible, dzięki swojej prostocie i bezagentowej architekturze, jest idealny do szybkiej automatyzacji, zarządzania środowiskami chmurowymi i orkiestracji złożonych wdrożeń.
Ilustracja dla slajdu 4

Porównując narzędzia automatyzacji, należy wziąć pod uwagę nie tylko ich funkcjonalność, ale także koszty wdrożenia i utrzymania. Ansible jest narzędziem darmowym i open source, podobnie jak jego odpowiedniki, jednak wersje komercyjne oferują dodatkowe funkcje, takie jak wsparcie techniczne i zaawansowane dashboardy. Puppet oferuje wersję open source oraz komercyjną z dodatkowymi modułami raportowania i zgodności.

Chef wyróżnia się silnym modelem programistycznym, który pozwala na pisanie testów przy użyciu narzędzia InSpec. Ansible z kolei może pochwalić się największą społecznością i najbogatszym zbiorem modułów, co przyspiesza tworzenie nowych automatyzacji. Puppet oferuje unikalną funkcję raportowania zgodności, która jest przydatna w środowiskach regulowanych.

Wszystkie trzy narzędzia wspierają zarządzanie konfiguracją na różnych systemach operacyjnych, w tym Linux, Windows i macOS. Integracja z chmurą jest możliwa we wszystkich przypadkach, ale Ansible ma przewagę dzięki modułom specjalnie zaprojektowanym dla głównych dostawców chmury. Ostateczny wybór powinien być poprzedzony pilotażowym wdrożeniem w kontrolowanym środowisku.

5/50
Deklaratywność vs imperatywność
  • W automatyzacji istnieją dwa fundamentalne podejścia.
  • Podejście imperatywne polega na opisywaniu krok po kroku, jak osiągnąć pożądany stan (np. zainstaluj pakiet, skopiuj plik, uruchom usługę).
  • Podejście deklaratywne, preferowane w nowoczesnych narzędziach, polega na opisywaniu co chcemy osiągnąć (np. pakiet Nginx ma być zainstalowany w najnowszej wersji, a usługa ma być uruchomiona).
  • Narzędzie samo dba o to, aby doprowadzić system do opisanego stanu, wykonując tylko niezbędne czynności.
  • Podejście deklaratywne jest bardziej odporne na błędy i promuje idempotentność, czyli możliwość wielokrotnego stosowania tej samej konfiguracji z tym samym rezultatem.
Ilustracja dla slajdu 5

Podejście imperatywne w automatyzacji skupia się na sekwencji kroków, które należy wykonać, aby osiągnąć cel. Przykładem imperatywności jest tradycyjny skrypt bash, który krok po kroku instaluje pakiety i konfiguruje usługi. Główną wadą tego podejścia jest brak idempotentności, co oznacza, że wielokrotne uruchomienie tego samego skryptu może dać różne rezultaty.

Podejście deklaratywne przyjmuje natomiast, że użytkownik opisuje stan końcowy systemu, a narzędzie samo decyduje, jakie czynności są niezbędne. W przypadku Terraforma użytkownik deklaruje, że ma istnieć maszyna wirtualna o określonych parametrach, a narzędzie oblicza różnicę między stanem obecnym a pożądanym. Automatycznie tworzy, modyfikuje lub usuwa zasoby, aby osiągnąć zgodność z deklaracją.

Idempotentność jest naturalną cechą podejścia deklaratywnego, co czyni je bezpieczniejszym w użyciu. W praktyce wiele narzędzi łączy oba podejścia, pozwalając na imperatywne kroki w ramach deklaratywnych przepływów. Ansible, choć głównie imperatywny, wspiera idempotentność modułów, a Terraform i Kubernetes są w pełni deklaratywne.

6/50
Przypadki użycia automatyzacji
  • Automatyzacja znajduje zastosowanie w niemal każdym aspekcie utrzymania usług.
  • Do najczęstszych przypadków użycia należą: provisionowanie infrastruktury w chmurze, instalacja i konfiguracja systemów operacyjnych, wdrażanie i aktualizacja aplikacji, zarządzanie konfiguracją setek serwerów, orkiestracja złożonych, wieloetapowych procesów, a także automatyzacja zadań związanych z bezpieczeństwem, takich jak skanowanie podatności czy zarządzanie poprawkami.
  • Automatyzować można i należy wszystko, co jest powtarzalne i podatne na błędy.
Ilustracja dla slajdu 6

Automatyzacja znajduje zastosowanie w wielu obszarach IT, zaczynając od codziennych zadań administracyjnych. Do najpopularniejszych przypadków użycia należą automatyczne tworzenie kopii zapasowych, zarządzanie kontami użytkowników w Active Directory oraz czyszczenie starych plików logów. W środowiskach chmurowych automatyzacja umożliwia automatyczne włączanie i wyłączanie zasobów poza godzinami pracy biurowej.

W obszarze bezpieczeństwa automatyzacja pozwala na skanowanie podatności, automatyczne stosowanie poprawek i reagowanie na wykryte zagrożenia. Automatyzacja compliance umożliwia ciągłe monitorowanie zgodności konfiguracji z politykami bezpieczeństwa. W przypadku wykrycia naruszenia system może automatycznie przywrócić zgodny stan lub wysłać alert do odpowiedniego zespołu.

Automatyzacja procesów biznesowych, takich jak tworzenie środowisk testowych na żądanie czy przygotowywanie raportów okresowych, przynosi bezpośrednie oszczędności czasu. W obszarze DevOps automatyzacja umożliwia ciągłą integrację i ciągłe dostarczanie oprogramowania. Automatyzacja testów wydajnościowych i obciążeniowych pomaga w identyfikacji wąskich gardeł przed wdrożeniem na produkcję.

7/50
Provisioning infrastruktury
Provisioning to proces przygotowywania i udostępniania zasobów infrastruktury IT.
  • W erze chmury, proces ten został zrewolucjonizowany przez narzędzia do Infrastructure as Code (IaC), takie jak Terraform.
  • Zamiast ręcznie wyklikiwać maszyny wirtualne, sieci i bazy danych w panelu dostawcy chmury, definiuje się całą infrastrukturę w postaci kodu.
  • Pozwala to na pełną automatyzację tworzenia i niszczenia całych środowisk, co jest niezwykle użyteczne do testowania i tworzenia oprogramowania, a także zapewnia, że środowisko produkcyjne jest zawsze spójne i zgodne z definicją.
Ilustracja dla slajdu 7

Provisioning infrastruktury w modelu tradycyjnym wymaga ręcznego składania zamówień w portalu dostawcy chmury, co jest czasochłonne i podatne na błędy. W podejściu Infrastructure as Code provisioning odbywa się poprzez wykonanie pliku konfiguracyjnego, który definiuje wszystkie niezbędne zasoby. Terraform, AWS CloudFormation i Azure Resource Manager to najpopularniejsze narzędzia do tego celu.

Provisioning może obejmować nie tylko maszyny wirtualne, ale także sieci wirtualne, grupy bezpieczeństwa, równoważniki obciążenia, bazy danych i usługi DNS. Każdy z tych zasobów jest definiowany w kodzie, co zapewnia pełną powtarzalność procesu tworzenia środowiska. Środowiska mogą być tworzone i niszczone wielokrotnie bez ryzyka niezgodności konfiguracyjnych.

W zaawansowanych scenariuszach provisioning może być wyzwalany automatycznie przez system CI/CD w odpowiedzi na zmiany w repozytorium kodu. Pozwala to na tworzenie środowisk developerskich dla każdego brancha, co znacząco przyspiesza proces tworzenia oprogramowania. Automatyczne niszczenie środowisk po zakończeniu pracy zapobiega niepotrzebnym kosztom.

8/50
Automatyczna konfiguracja usług
  • Po provisionowaniu serwerów, kolejnym krokiem jest ich konfiguracja.
  • Narzędzia takie jak Ansible pozwalają na zautomatyzowanie tego procesu.
  • Za pomocą playbooków można zdefiniować, jakie pakiety mają być zainstalowane, jakie pliki konfiguracyjne wdrożone, a jakie usługi uruchomione.
  • Uruchomienie takiego playbooka na grupie serwerów zapewnia, że wszystkie one będą miały identyczną, spójną konfigurację.
  • Eliminuje to problem odchyleń konfiguracyjnych, gdzie ręczne zmiany prowadzą do tego, że serwery, które miały być identyczne, zaczynają się od siebie różnić.
Ilustracja dla slajdu 8

Automatyczna konfiguracja usług wykracza poza prostą instalację pakietów i obejmuje konfigurację złożonych aplikacji wielowarstwowych. Narzędzia takie jak Ansible pozwalają na szablonowanie plików konfiguracyjnych za pomocą Jinja2, co umożliwia dynamiczne dostosowanie konfiguracji do specyfiki środowiska. Playbook może również restartować usługi po zmianie konfiguracji bez przerywania działania systemu.

Zarządzanie certyfikatami SSL, konfiguracja monitoringu i logowanie to kolejne obszary, które podlegają automatyzacji. Dzięki zautomatyzowanej konfiguracji każdy nowy serwer jest gotowy do pracy w ciągu kilku minut. Spójność konfiguracji eliminuje problemy wynikające z ręcznych modyfikacji i zapewnia przewidywalne zachowanie systemu.

W środowiskach kontenerowych konfiguracja usług odbywa się poprzez definicje w Kubernetes, gdzie konfiguracja jest przechowywana w ConfigMap i Secret. Automatyzacja obejmuje również zarządzanie wersjami konfiguracji i możliwość wycofania zmian. Dzięki temu każda zmiana konfiguracji jest audytowana i odwracalna.

9/50
Zarządzanie konfiguracją
Zarządzanie konfiguracją to proces utrzymywania spójnego i pożądanego stanu systemów komputerowych w całym ich cyklu życia.
  • Nie jest to jednorazowe działanie, ale ciągły proces.
  • Narzędzia do zarządzania konfiguracją mogą być uruchamiane regularnie, aby upewnić się, że stan systemów nie odbiega od zdefiniowanego w kodzie.
  • Jeśli wykryją jakąkolwiek niezgodność, na przykład ręczną zmianę w pliku konfiguracyjnym, mogą one automatycznie przywrócić pożądany stan, zapewniając stabilność i przewidywalność środowiska.
Ilustracja dla slajdu 9

Zarządzanie konfiguracją to dyscyplina IT polegająca na utrzymywaniu spójnego i udokumentowanego stanu wszystkich komponentów systemu. W praktyce oznacza to, że każda zmiana w konfiguracji serwera, aplikacji czy urządzenia sieciowego musi być rejestrowana i zatwierdzana. System kontroli wersji, taki jak Git, jest idealnym narzędziem do przechowywania historii konfiguracji.

Narzędzia do zarządzania konfiguracją mogą działać w trybie push, serwer inicjuje zmianę na klientach, lub pull, klienci okresowo sprawdzają stan na serwerze. Ansible jest przykładem narzędzia push, podczas gdy Puppet i Chef domyślnie działają w trybie pull. Wybór trybu wpływa na architekturę i skalowalność rozwiązania.

Zarządzanie konfiguracją obejmuje również zarządzanie wersjami oprogramowania i patchowanie systemów. Automatyczne cykle aktualizacji zapewniają, że wszystkie systemy są zabezpieczone przed znanymi podatnościami. Raportowanie stanu konfiguracji umożliwia identyfikację odchyleń i nieautoryzowanych zmian.

10/50
GitOps
  • GitOps to nowoczesne podejście do ciągłego dostarczania oprogramowania, które wykorzystuje repozytorium Git jako jedyne źródło prawdy dla deklaratywnego opisu pożądanego stanu infrastruktury i aplikacji.
  • W modelu GitOps, każda zmiana w systemie, od aktualizacji aplikacji po zmianę konfiguracji, musi być wprowadzona poprzez commit do repozytorium Git.
  • Zautomatyzowany proces w klastrze, na przykład operator w Kubernetes, stale monitoruje repozytorium i automatycznie synchronizuje stan klastra z tym, co jest zdefiniowane w Gicie.
  • Zapewnia to pełną audytowalność, historię zmian i możliwość łatwego wycofywania zmian.
Ilustracja dla slajdu 10

GitOps opiera się na czterech podstawowych zasadach: deklaratywność całego systemu, repozytorium Git jako jedyne źródło prawdy, automatyczna synchronizacja stanu i pętla uzgadniania. W praktyce oznacza to, że każda zmiana w systemie musi być poprzedzona commitem i merge requestem w repozytorium. Zatwierdzenie merge requestu uruchamia automatyczny proces wdrożenia.

Narzędzia takie jak ArgoCD i Flux są najpopularniejszymi implementacjami GitOps dla Kubernetes. Monitorują one repozytorium Git i automatycznie stosują zmiany w klastrze, dbając o zgodność stanu rzeczywistego z pożądanym. W przypadku rozbieżności narzędzie sygnalizuje problem i próbuje automatycznie przywrócić zgodność.

Zaletą GitOps jest pełna audytowalność zmian i łatwość wycofywania się do poprzednich wersji. Każda zmiana jest powiązana z konkretnym zatwierdzeniem w Git, co ułatwia identyfikację przyczyn problemów. GitOps promuje również kulturę współpracy poprzez recenzje kodu i zarządzanie dostępem na poziomie repozytorium.

11/50
CI/CD w usługach sieciowych
  • Praktyki CI/CD, tradycyjnie kojarzone z rozwojem oprogramowania, znajdują również zastosowanie w zarządzaniu usługami sieciowymi.
  • Konfiguracja urządzeń sieciowych, takich jak firewalle czy równoważniki obciążenia, może być przechowywana jako kod w repozytorium Git.
  • Każda zmiana w konfiguracji uruchamia potok CI/CD, który automatycznie waliduje składnię, uruchamia testy w środowisku wirtualnym, a następnie, po zatwierdzeniu, wdraża zmianę na urządzeniach produkcyjnych.
  • Zapewnia to znacznie wyższy poziom niezawodności i kontroli nad zmianami w sieci.
Ilustracja dla slajdu 11

Zastosowanie CI/CD w kontekście sieci wymaga przechowywania konfiguracji w postaci kodu, na przykład w języku YAML lub JSON. Narzędzia CI/CD, takie jak Jenkins, GitLab CI czy GitHub Actions, mogą uruchamiać testy walidujące poprawność konfiguracji sieciowej przed jej wdrożeniem. Testy mogą obejmować sprawdzenie składni, symulację ruchu sieciowego w środowisku wirtualnym i weryfikację polityk bezpieczeństwa.

Wdrożenie konfiguracji sieciowej na urządzeniach produkcyjnych może odbywać się za pomocą protokołów takich jak NETCONF, RESTCONF lub standardowego SSH. Ansible oferuje bogaty zestaw modułów sieciowych dla urządzeń Cisco, Juniper, Arista i innych producentów. Integracja z systemami zarządzania siecią pozwala na automatyczne tworzenie kopii zapasowych konfiguracji.

Bramki jakościowe w potoku CI/CD mogą automatycznie blokować wdrożenie w przypadku wykrycia nieprawidłowości. Mechanizm ten zapobiega wprowadzeniu błędnej konfiguracji na urządzenia produkcyjne. Recenzja kodu i testy automatyczne znacząco podnoszą jakość i niezawodność zarządzania siecią.

12/50
Pipeline wdrożeniowy
  • Potok wdrożeniowy to zautomatyzowany przepływ pracy, który przeprowadza zmianę od repozytorium kodu aż do środowiska produkcyjnego.
  • Typowy potok składa się z kilku etapów.
  • Etap budowania kompiluje kod i tworzy artefakt, na przykład obraz kontenera.
  • Etap testowania uruchamia różne rodzaje testów automatycznych.
  • Etapy wdrażania instalują nową wersję na kolejnych środowiskach: deweloperskim, testowym, a na końcu produkcyjnym.
  • Każdy etap jest bramką jakościową – niepowodzenie na jednym z nich zatrzymuje cały proces.
Ilustracja dla slajdu 12

Pipeline wdrożeniowy to zautomatyzowany zestaw etapów, przez które przechodzi kod od momentu zatwierdzenia do wdrożenia na produkcję. Typowy pipeline składa się z etapów: build, test, deploy do środowiska staging, testy integracyjne i wdrożenie produkcyjne. Każdy etap może uruchamiać się równolegle lub sekwencyjnie w zależności od zależności.

Nowoczesne platformy CI/CD oferują wizualne projektowanie pipelineów za pomocą plików YAML, co ułatwia zarządzanie i wersjonowanie definicji. Narzędzia takie jak GitLab CI wykorzystują koncepcję runnerów, które wykonują zadania w izolowanych kontenerach. Umożliwia to odtwarzalność i izolację każdego etapu pipelineu.

Optymalizacja czasu wykonywania pipelineu jest kluczowa dla szybkości dostarczania oprogramowania. Techniki takie jak cache'owanie zależności, równoległe wykonywanie niezależnych zadań i selektywne uruchamianie etapów skracają czas oczekiwania. Monitorowanie czasu wykonania pipelineu i identyfikacja wąskich gardeł pozwala na ciągłą optymalizację procesu.

13/50
Testy automatyczne usług
Automatyczne testowanie jest fundamentem niezawodnych wdrożeń.
  • Testy jednostkowe weryfikują małe fragmenty kodu w izolacji.
  • Testy integracyjne sprawdzają, czy różne komponenty systemu potrafią ze sobą poprawnie współpracować.
  • Testy end-to-end symulują całe scenariusze użytkownika, weryfikując działanie systemu jako całości.
  • Włączenie tych testów do potoku CI/CD zapewnia, że każda zmiana jest automatycznie weryfikowana pod kątem regresji, co daje zespołowi pewność, że nowa wersja nie zepsuje istniejących funkcjonalności.
Ilustracja dla slajdu 13

Testy jednostkowe są najniższym poziomem testowania i weryfikują pojedyncze funkcje w izolacji od reszty systemu. W kontekście automatyzacji testy jednostkowe mogą dotyczyć modułów Ansible czy funkcji Terraform. Frameworki takie jak pytest dla modułów Ansible czy terratest dla Terraform są popularnymi narzędziami w tym obszarze.

Testy integracyjne sprawdzają współpracę między komponentami systemu, na przykład czy serwer aplikacji poprawnie łączy się z bazą danych. W automatyzacji testy integracyjne mogą uruchamiać pełny playbook Ansible w środowisku Docker i weryfikować stan końcowy. Testy te są kluczowe dla wykrycia problemów wynikających z interakcji między modułami.

Testy end-to-end symulują rzeczywiste scenariusze użytkownika i weryfikują działanie całego systemu. Narzędzia takie jak Selenium czy Cypress automatyzują testy interfejsu użytkownika. Włączenie wszystkich poziomów testów do pipelineu CI/CD zapewnia kompleksową weryfikację przed każdym wdrożeniem.

14/50
Automatyzacja wdrożeń aplikacji
  • Automatyzacja samego procesu wdrażania na środowisko produkcyjne jest kluczowa dla minimalizacji ryzyka i przestojów.
  • Zamiast ręcznie kopiować pliki i restartować usługi, używa się zautomatyzowanych strategii, takich jak wdrożenie typu blue-green lub canary.
  • Wdrożenie canary polega na stopniowym udostępnianiu nowej wersji tylko małej grupie użytkowników.
  • System monitoringu obserwuje, czy nowa wersja nie generuje błędów.
  • Jeśli wszystko jest w porządku, ruch jest stopniowo przełączany na nową wersję, aż obejmie wszystkich użytkowników.
Ilustracja dla slajdu 14

Strategia blue-green polega na utrzymywaniu dwóch identycznych środowisk, niebieskiego i zielonego, z których tylko jedno obsługuje ruch produkcyjny. Nowa wersja aplikacji jest wdrażana do środowiska nieaktywnego, a po pomyślnych testach ruch jest przełączany do nowego środowiska. W przypadku problemów można błyskawicznie wrócić do poprzedniej wersji, przełączając ruch z powrotem.

Strategia canary polega na stopniowym kierowaniu rosnącego procentu ruchu do nowej wersji aplikacji. Rozpoczynając od jednego procenta, system monitoruje błędy i wydajność, stopniowo zwiększając procent aż do pełnego wdrożenia. Jeśli w dowolnym momencie zostanie wykryty wzrost błędów, wdrożenie jest automatycznie wstrzymywane i wycofywane.

Wdrożenie rolling update polega na stopniowej wymianie instancji starej wersji na nową bez przerywania działania usługi. Kubernetes domyślnie stosuje tę strategię dla swoich Deploymentów, zapewniając ciągłą dostępność podczas aktualizacji. Automatyzacja monitoruje postęp wdrożenia i w przypadku problemów może wstrzymać lub wycofać zmianę.

15/50
Orkiestracja kontenerów
  • Orkiestracja to pojęcie szersze niż automatyzacja.
  • Obejmuje ona nie tylko automatyzację zadań, ale także inteligentne zarządzanie i koordynację wielu komponentów w celu osiągnięcia pożądanego stanu.
  • W świecie kontenerów, orkiestracja jest niezbędna.
  • System orkiestracji, taki jak Kubernetes, automatyzuje wdrażanie, skalowanie i zarządzanie cyklem życia setek lub tysięcy kontenerów.
  • Dba on o to, aby zawsze działała odpowiednia liczba replik każdej usługi, restartuje kontenery po awarii i zarządza komunikacją sieciową między nimi.
Ilustracja dla slajdu 15

Orkiestracja kontenerów to proces zarządzania cyklem życia kontenerów w środowisku produkcyjnym. Obejmuje ona automatyzację zadań takich jak wdrażanie, skalowanie, sieciowanie i monitorowanie kontenerów. Kubernetes jest zdecydowanym liderem na rynku orkiestratorów, ale istnieją również alternatywy takie jak Docker Swarm, Apache Mesos i Nomad.

Korzyści z orkiestracji kontenerów obejmują automatyzację rozmieszczania kontenerów na węzłach klastra, zarządzanie zasobami i izolację sieciową. Orkiestrator dba również o wysoką dostępność usług, automatycznie restartując kontenery po awarii i przenosząc je na zdrowe węzły. Wbudowane mechanizmy wykrywania usług i równoważenia obciążenia ułatwiają komunikację między mikroserwisami.

Wyzwania związane z orkiestracją obejmują złożoność konfiguracji i naukę nowych koncepcji. Organizacje często potrzebują dedykowanych zespołów do zarządzania klastrami Kubernetes. Narzędzia takie jak Rancher i OpenShift upraszczają zarządzanie wieloma klastrami.

16/50
Kubernetes – podstawy
  • Kubernetes to platforma do orkiestracji kontenerów, która stała się standardem w branży.
  • Podstawową jednostką wdrożenia w Kubernetes jest Pod, który jest grupą jednego lub więcej kontenerów.
  • Użytkownik deklaruje pożądany stan za pomocą obiektów, takich jak Deployment, który opisuje ile replik Podów ma działać, czy Service, który definiuje jak uzyskać dostęp do grupy Podów. Kubernetes nieustannie porównuje stan rzeczywisty klastra ze stanem pożądanym i podejmuje działania w celu ich uzgodnienia.
Ilustracja dla slajdu 16

Kubernetes składa się z płaszczyzny sterowania i węzłów roboczych, na których uruchomione są kontenery. Płaszczyzna sterowania zawiera komponenty takie jak API Server, Scheduler, Controller Manager i etcd jako rozproszoną bazę klucz-wartość. API Server jest punktem wejścia do zarządzania klastrem i udostępnia interfejs REST do wykonywania operacji.

Scheduler odpowiada za przydzielanie Podów do węzłów na podstawie dostępnych zasobów i ograniczeń. Controller Manager uruchamia zestaw kontrolerów, które dbają o utrzymanie pożądanego stanu klastra. Kubelet na każdym węźle komunikuje się z API Serverem i zarządza kontenerami na swoim węźle.

Networking w Kubernetes opiera się na modelu flat network, gdzie każdy Pod ma własny adres IP i może komunikować się z innymi Podami bez translacji adresów. Sieć jest zarządzana przez wtyczki CNI, takie jak Calico, Flannel czy Weave. Service Mesh, z narzędziami takimi jak Istio, dodaje warstwę bezpieczeństwa i obserwowalności.

17/50
Deployments i ReplicaSets
  • W Kubernetes rzadko tworzy się Pody bezpośrednio.
  • Zamiast tego używa się obiektów wyższego poziomu, takich jak Deployment.
  • Deployment zarządza obiektem zwanym ReplicaSet.
  • Zadaniem ReplicaSet jest zapewnienie, że w klastrze zawsze działa określona liczba identycznych replik danego Poda.
  • Jeśli jeden z Podów ulegnie awarii, ReplicaSet natychmiast utworzy nowy, aby zastąpić brakujący.
  • Deployment dodaje do tego funkcjonalność zarządzania aktualizacjami, pozwalając na bezpieczne wdrażanie nowych wersji aplikacji za pomocą strategii aktualizacji rolling update.
Ilustracja dla slajdu 17

ReplicaSet to podstawowy mechanizm zapewniający, że w klastrze działa określona liczba replik Podów. W przypadku awarii Poda ReplicaSet natychmiast tworzy nowy, aby zastąpić utracony. ReplicaSet nie jest jednak zdolny do przeprowadzania aktualizacji i wymaga ręcznego zarządzania wersjami.

Deployment rozszerza ReplicaSet o funkcje zarządzania wdrożeniami i aktualizacjami. Umożliwia on definiowanie strategii wdrożenia, takich jak RollingUpdate i Recreate, oraz zarządzanie historią wdrożeń. W przypadku problemów z nową wersją Deployment pozwala na szybkie wycofanie do poprzedniej wersji.

W praktyce użytkownicy rzadko tworzą ReplicaSet bezpośrednio, a zamiast tego zawsze korzystają z Deployment. Deployment automatycznie tworzy ReplicaSet i zarządza nim, śledząc wersje i historię zmian. Każda zmiana w specyfikacji Deployment powoduje utworzenie nowego ReplicaSet.

18/50
Services i Ingress
  • Pody w Kubernetes są efemeryczne i mogą zmieniać swoje adresy IP.
  • Aby zapewnić stabilny sposób komunikacji z grupą Podów, używa się obiektu Service.
  • Service otrzymuje stały, wirtualny adres IP i działa jak wewnętrzny równoważnik obciążenia, rozdzielając ruch na Pody, które do niego należą.
  • Aby udostępnić usługę na zewnątrz klastra, używa się obiektu Ingress.
  • Ingress to zestaw reguł, które definiują, jak ruch HTTP przychodzący z zewnątrz ma być kierowany do odpowiednich usług wewnątrz klastra, działając jak serwer pośredniczący typu reverse proxy.
Ilustracja dla slajdu 18

Service w Kubernetes to abstrakcja definiująca logiczny zestaw Podów i politykę dostępu do nich. Service działa jako stabilne API, do którego można kierować ruch, niezależnie od zmian adresów IP poszczególnych Podów. Services można definiować w czterech trybach: ClusterIP, NodePort, LoadBalancer i ExternalName.

Ingress to obiekt Kubernetes, który zarządza zewnętrznym dostępem do usług w klastrze, zazwyczaj przez HTTP. Ingress udostępnia funkcje takie jak routing oparty na nazwach hostów i ścieżkach, terminacja SSL oraz wirtualne hostowanie. Kontroler Ingress, na przykład NGINX Ingress Controller, implementuje reguły zdefiniowane w obiekcie Ingress.

Sieciowe polityki NetworkPolicy umożliwiają kontrolę ruchu między Podami na poziomie warstwy sieciowej. Polityki te pozwalają na segmentację ruchu według etykiet i ograniczanie dostępu między mikroserwisami. W połączeniu z Service Mesh można uzyskać zaawansowane funkcje bezpieczeństwa i monitorowania.

19/50
Helm jako narzędzie pakietowania
  • Wdrożenie złożonej aplikacji w Kubernetes może wymagać zdefiniowania wielu powiązanych ze sobą obiektów, takich jak Deployment, Service czy Ingress.
  • Helm to menedżer pakietów dla Kubernetes, który pozwala na spakowanie wszystkich tych definicji w jeden, spójny pakiet zwany chartem.
  • Charty używają systemu szablonów, co pozwala na łatwą parametryzację i ponowne wykorzystanie.
  • Dzięki Helm można instalować, aktualizować i zarządzać całymi aplikacjami za pomocą jednego polecenia, co znacząco upraszcza zarządzanie złożonymi wdrożeniami.
Ilustracja dla slajdu 19

Helm używa struktury katalogów zwanej chartem, który zawiera szablony manifestów YAML i plik wartości. Szablony są przetwarzane przez silnik szablonów Go, co pozwala na dynamiczne generowanie konfiguracji dla różnych środowisk. Chart może także definiować zależności od innych chartów, co ułatwia składanie złożonych aplikacji z gotowych komponentów.

Helm umożliwia zarządzanie wydaniami w klastrze, śledząc historię wdrożeń i umożliwiając wycofywanie zmian. Repozytoria chartów, publiczne i prywatne, ułatwiają dystrybucję gotowych pakietów. Artifact Hub jest centralnym repozytorium, w którym publikowane są certyfikowane charty dla popularnych narzędzi.

W środowiskach produkcyjnych Helma można integrować z GitOps, przechowując wartości chartów w repozytorium Git. Narzędzia takie jak Helmfile czy Helm Operator pozwalają na deklaratywne zarządzanie chartami. Dzięki temu wdrożenia są spójne, audytowalne i łatwe do odtworzenia.

20/50
Operatorzy
  • Operator to zaawansowany wzorzec w Kubernetes, który pozwala na automatyzację zarządzania złożonymi, stanowymi aplikacjami, takimi jak bazy danych.
  • Operator to specjalny rodzaj kontrolera, który rozumie specyfikę danej aplikacji.
  • Potrafi on samodzielnie wykonywać złożone operacje, takie jak tworzenie klastra bazy danych, zarządzanie jego kopiami zapasowymi, przeprowadzanie aktualizacji czy obsługa awarii, na podstawie prostych definicji dostarczonych przez użytkownika.
  • Operatorzy rozszerzają API Kubernetes, ucząc je jak zarządzać nowymi rodzajami aplikacji.
Ilustracja dla slajdu 20

Operatorzy rozszerzają API Kubernetes poprzez dodawanie nowych zasobów niestandardowych i kontrolerów. Pozwalają na automatyzację złożonych zadań administracyjnych, które wymagają wiedzy domenowej o konkretnej aplikacji. Operator może zarządzać tworzeniem kopii zapasowych, skalowaniem, aktualizacjami i odzyskiwaniem po awarii.

Frameworki takie jak Operator SDK, Kopf i Kubebuilder ułatwiają tworzenie operatorów w językach Go, Python i Ansible. Operator w Pythonie może wykorzystywać bibliotekę kubernetes-client do zarządzania klastrem. Operator Ansible pozwala na tworzenie operatorów z istniejących playbooków Ansible.

OperatorHub to centralne repozytorium operatorów, w którym można znaleźć gotowe operatory dla popularnych aplikacji. Operatorzy Prometheusa, PostgreSQL, MySQL czy Kafka są szeroko używane w środowiskach produkcyjnych. Operatorzy poprawiają jakość zarządzania aplikacjami stanowymi w Kubernetes.

21/50
Automatyczna skalowalność
Automatyczna skalowalność to jedna z kluczowych zalet orkiestracji.
  • Pozwala ona na dynamiczne dostosowywanie liczby zasobów do bieżącego obciążenia, co zapewnia optymalną wydajność przy minimalnych kosztach.
  • W Kubernetes istnieją różne mechanizmy automatycznego skalowania.
  • Horizontal Pod Autoscaler automatycznie zwiększa lub zmniejsza liczbę replik Podów na podstawie metryk, takich jak użycie procesora.
  • Cluster Autoscaler potrafi dodawać lub usuwać całe węzły, czyli maszyny wirtualne, z klastra, gdy brakuje w nim zasobów.
Ilustracja dla slajdu 21

Automatyczna skalowalność w Kubernetes jest realizowana przez kilka mechanizmów działających na różnych poziomach. Horizontal Pod Autoscaler dostosowuje liczbę Podów do obciążenia na podstawie metryk CPU, pamięci lub niestandardowych metryk. Vertical Pod Autoscaler zmienia przydział zasobów dla istniejących Podów bez zmiany ich liczby.

Cluster Autoscaler zarządza skalowaniem węzłów klastra, dodając nowe maszyny wirtualne, gdy istniejące węzły nie mogą pomieścić nowych Podów. Współpracuje on z interfejsem API dostawcy chmury, takiego jak AWS, Azure czy GCP. Automatyczne usuwanie niepotrzebnych węzłów po godzinach szczytu pozwala na optymalizację kosztów.

Skalowanie na poziomie aplikacji może być również oparte na harmonogramie, co jest przydatne w przypadku znanych wzorców obciążenia. Skalowanie predykcyjne może wykorzystywać uczenie maszynowe do przewidywania przyszłego obciążenia na podstawie historycznych danych. Właściwa konfiguracja autoskalera wymaga precyzyjnego zdefiniowania metryk i progów.

22/50
Autoscaling usług
Mechanizmy automatycznego skalowania są fundamentem budowania elastycznych, chmurowych architektur.
  • Pozwalają one na obsługę nagłych, nieprzewidzianych skoków ruchu, na przykład w wyniku kampanii marketingowej, bez interwencji człowieka.
  • System automatycznie dodaje nowe instancje serwerów, gdy rośnie obciążenie, a następnie, gdy ruch wraca do normy, usuwa niepotrzebne instancje, aby nie generować zbędnych kosztów.
  • Prawidłowa konfiguracja automatycznego skalowania wymaga zdefiniowania odpowiednich metryk i progów, które będą wyzwalać proces skalowania.
Ilustracja dla slajdu 22

Autoscaling usług w chmurze opiera się na trzech głównych rodzajach skalowania: horyzontalnym, wertykalnym i predykcyjnym. Skalowanie horyzontalne jest najczęściej stosowane i polega na dodawaniu lub usuwaniu instancji usługi. Skalowanie wertykalne zmienia rozmiar istniejących instancji, co jest przydatne w przypadku starszych aplikacji.

Autoscaling może być oparty na metrykach systemowych, takich jak użycie procesora, pamięci i dysku, oraz na metrykach biznesowych, takich jak liczba żądań na sekundę czy czas odpowiedzi. W architekturze chmurowej autoscaling jest często łączony z równoważeniem obciążenia. Równoważnik obciążenia dystrybuuje ruch między nowo dodanymi instancjami.

Wyzwania związane z autoscalingiem obejmują zjawisko thrashingu, czyli częstej zmiany liczby instancji w odpowiedzi na chwilowe skoki obciążenia. Aby temu zapobiec, stosuje się mechanizmy histerezy i opóźnień. Monitorowanie i dostrajanie parametrów autoscalera jest procesem ciągłym.

23/50
Infrastruktura jako kod
Infrastruktura jako kod umożliwia tworzenie powtarzalnych, spójnych i niezawodnych środowisk, co jest fundamentem nowoczesnych praktyk DevOps.
  • Infrastruktura jako kod to praktyka zarządzania infrastrukturą IT, czyli serwerami, sieciami, bazami danych, za pomocą plików konfiguracyjnych, które są traktowane jak kod źródłowy aplikacji.
  • Zamiast ręcznie konfigurować zasoby, opisuje się je w deklaratywnym języku.
  • Ten kod jest przechowywany w systemie kontroli wersji, co zapewnia jego historię, audytowalność i możliwość współpracy.
Ilustracja dla slajdu 23

Infrastruktura jako kod to praktyka, która umożliwia zarządzanie zasobami IT za pomocą plików konfiguracyjnych przechowywanych w systemie kontroli wersji. Pozwala to na automatyzację procesów tworzenia, modyfikacji i usuwania zasobów w sposób powtarzalny i przewidywalny. IaC jest fundamentem nowoczesnych praktyk DevOps.

Wyróżnia się dwa główne podejścia do IaC: deklaratywne i imperatywne. Podejście deklaratywne opisuje stan końcowy systemu, a narzędzie samo decyduje o krokach potrzebnych do jego osiągnięcia. Podejście imperatywne definiuje sekwencję komend do wykonania, co może prowadzić do braku idempotentności.

Narzędzia IaC dzielą się na narzędzia do zarządzania konfiguracją, takie jak Ansible i Puppet, oraz narzędzia do provisionowania, takie jak Terraform i Pulumi. Integracja tych narzędzi z systemami kontroli wersji i CI/CD tworzy potężny ekosystem automatyzacji. IaC znacząco redukuje ryzyko błędów ludzkich w zarządzaniu infrastrukturą.

24/50
Terraform – podstawy
  • Terraform to wiodące narzędzie open-source do implementacji infrastruktury jako kod.
  • Jego największą zaletą jest niezależność od platformy – za pomocą jednego narzędzia i spójnego języka można zarządzać zasobami u wielu dostawców chmury, takich jak AWS, Azure czy GCP, a także w środowiskach lokalnych. Terraform działa na zasadzie planowania i wykonywania.
  • Najpierw tworzy plan, który pokazuje jakie zmiany zostaną wprowadzone w infrastrukturze, a następnie, po zatwierdzeniu przez użytkownika, wykonuje ten plan, tworząc, modyfikując lub usuwając zasoby.
Ilustracja dla slajdu 24

Terraform używa własnego języka konfiguracyjnego HCL, który jest czytelny i łatwy do nauczenia. Konfiguracja składa się z bloków definiujących zasoby, zmienne i zależności między zasobami. Terraform automatycznie buduje graf zależności, co pozwala na optymalizację kolejności tworzenia i modyfikacji zasobów.

Terraform przechowuje stan infrastruktury w pliku stanu, który może być przechowywany lokalnie lub zdalnie w usługach takich jak Terraform Cloud, S3 z blokadą DynamoDB. Stan jest używany do mapowania zasobów w konfiguracji na rzeczywiste zasoby u dostawcy. Prawidłowe zarządzanie stanem jest kluczowe dla uniknięcia konfliktów.

Po zmianach w konfiguracji wykonuje się `terraform plan`, który pokazuje różnice między stanem obecnym a pożądanym. Po zatwierdzeniu planu wykonuje się `terraform apply`, który wprowadza zmiany do infrastruktury. Terraform wspiera pracę zespołową poprzez blokowanie stanu i integrację z systemami kontroli wersji.

25/50
Moduły Terraform
  • Moduły w Terraform to sposób na grupowanie powiązanych ze sobą zasobów w logiczne, reużywalne komponenty.
  • Zamiast definiować za każdym razem od nowa całą konfigurację maszyny wirtualnej z jej siecią i grupami bezpieczeństwa, można stworzyć moduł serwer-aplikacyjny, który będzie można wielokrotnie wykorzystywać w różnych częściach infrastruktury, podając tylko niezbędne parametry.
  • Stosowanie modułów promuje dobre praktyki, takie jak DRY, i pozwala na budowanie złożonych, ale czytelnych i łatwych w utrzymaniu konfiguracji infrastruktury jako kodu.
Ilustracja dla slajdu 25

Moduły w Terraform pozwalają na hermetyzację grupy powiązanych zasobów w jeden komponent wielokrotnego użytku. Moduły akceptują parametry wejściowe i zwracają wyniki, co umożliwia elastyczne dostosowanie do różnych środowisk. Moduły mogą być przechowywane w rejestrze Terraform, na GitHub lub w prywatnych repozytoriach.

Dzięki modułom można stworzyć bibliotekę gotowych komponentów infrastrukturalnych, takich jak moduł VPC, moduł bazy danych czy moduł klastra Kubernetes. Zastosowanie modułów znacząco redukuje ilość duplikowanego kodu i przyspiesza tworzenie nowych środowisk. Moduły mogą być wersjonowane za pomocą tagów Git.

Tworząc moduły, należy kierować się zasadami dobrego projektowania, takimi jak pojedyncza odpowiedzialność i minimalizacja zależności. Dobrze zaprojektowany moduł powinien być elastyczny, ale nie nadmiernie skomplikowany. Dokumentacja modułów jest kluczowa dla umożliwienia ich łatwego wykorzystania przez innych członków zespołu.

26/50
Zarządzanie stanem infrastruktury
Ten stan jest kluczowy dla działania narzędzia.
Prawidłowe zarządzanie stanem jest kluczowe dla uniknięcia konfliktów i uszkodzenia infrastruktury.
  • Narzędzia infrastruktury jako kod, takie jak Terraform, muszą gdzieś przechowywać informacje o aktualnym stanie zarządzanej infrastruktury, aby wiedzieć jakie zasoby zostały utworzone i jakie mają parametry.
  • W środowiskach zespołowych plik stanu musi być przechowywany w zdalnej, współdzielonej lokalizacji, na przykład w usłudze obiektowej pamięci masowej jak Amazon S3, i zabezpieczony przed jednoczesnym dostępem przez wielu użytkowników.
Ilustracja dla slajdu 26

Stan infrastruktury w Terraform jest przechowywany w pliku JSON, który zawiera mapowanie między zasobami zdefiniowanymi w konfiguracji a rzeczywistymi zasobami u dostawcy. Plik stanu jest kluczowy dla działania narzędzia, ponieważ umożliwia śledzenie zmian i obliczanie różnic. Utrata pliku stanu może prowadzić do poważnych problemów z zarządzaniem infrastrukturą.

W środowisku zespołowym niezbędne jest przechowywanie stanu w zdalnym back-endzie z mechanizmem blokady. Popularne opcje to S3 z blokadą DynamoDB dla AWS lub Terraform Cloud. Blokowanie stanu zapobiega jednoczesnym zmianom przez wielu użytkowników, co mogłoby prowadzić do konfliktów.

Do migracji stanu między back-endami służy polecenie `terraform state mv`, a do importowania istniejących zasobów `terraform import`. Regularne robienie kopii zapasowych pliku stanu jest dobrą praktyką. Terraform Cloud oferuje zarządzanie stanem, historię zmian i polityki zgodności.

27/50
Automatyzacja sieci
  • Automatyzacja wkracza również do świata sieci komputerowych, tradycyjnie zarządzanych ręcznie za pomocą wiersza poleceń.
  • Nowoczesne urządzenia sieciowe oferują interfejsy API, które pozwalają na programistyczną konfigurację.
  • Narzędzia takie jak Ansible, z jego bogatym zestawem modułów sieciowych, pozwalają na automatyzację zadań takich jak konfiguracja sieci VLAN, reguł firewalla czy protokołów routingu.
  • Przechowywanie konfiguracji sieci jako kodu w repozytorium Git zapewnia jej audytowalność i powtarzalność.
Ilustracja dla slajdu 27

Automatyzacja sieci obejmuje zarządzanie urządzeniami sieciowymi, takimi jak routery, przełączniki i firewalle, za pomocą skryptów i narzędzi automatyzacji. Ansible oferuje dedykowane moduły sieciowe dla głównych producentów, takich jak Cisco, Juniper, Arista i Huawei. Moduły te umożliwiają konfigurację interfejsów, routingu, VLAN i wielu innych funkcji.

Nowoczesne urządzenia sieciowe obsługują protokoły takie jak NETCONF i RESTCONF, które zastępują tradycyjne CLI i umożliwiają programistyczne zarządzanie konfiguracją. YANG jest językiem modelowania danych używanym do definiowania struktury konfiguracji sieciowej. Narzędzia takie jak yangtool i pyang ułatwiają pracę z modelami YANG.

Integracja automatyzacji sieci z CI/CD umożliwia testowanie zmian konfiguracji w środowisku wirtualnym przed wdrożeniem na urządzenia produkcyjne. Symulatory sieci, takie jak GNS3 czy EVE-NG, pozwalają na tworzenie wirtualnych środowisk testowych. Automatyzacja sieci redukuje błędy konfiguracyjne i przyspiesza wdrażanie nowych usług.

28/50
SDN – software-defined networking
  • Sieci definiowane programowo to rewolucyjne podejście do architektury sieci, które oddziela płaszczyznę sterowania od płaszczyzny przesyłania danych.
  • W tradycyjnej sieci każde urządzenie, przełącznik czy router, ma własną, rozproszoną inteligencję.
  • W sieciach definiowanych programowo cała inteligencja jest scentralizowana w oprogramowaniu zwanym kontrolerem.
  • Kontroler ma globalny widok na całą sieć i programuje zachowanie prostych urządzeń przesyłających, co pozwala na dynamiczne i elastyczne zarządzanie przepływem ruchu w całej sieci z jednego miejsca.
Ilustracja dla slajdu 28

SDN oddziela płaszczyznę sterowania odpowiedzialną za podejmowanie decyzji o przekazywaniu pakietów od płaszczyzny danych odpowiedzialnej za faktyczne przekazywanie pakietów. Centralny kontroler SDN ma globalny widok na całą sieć i może dynamicznie programować przepływy danych. Umożliwia to elastyczne dostosowanie sieci do zmieniających się potrzeb.

Protokół OpenFlow jest najpopularniejszym standardem komunikacji między kontrolerem a urządzeniami sieciowymi. OpenFlow definiuje sposób, w jaki kontroler może dodawać, modyfikować i usuwać wpisy w tablicy przepływów urządzeń. Alternatywne podejścia, takie jak Cisco ACI czy VMware NSX, oferują własne implementacje SDN.

Zaletami SDN są centralne zarządzanie, automatyzacja konfiguracji i możliwość programowania zachowania sieci. SDN umożliwia tworzenie sieci wirtualnych, zwanych overlay, które działają niezależnie od fizycznej infrastruktury. Sieci overlay, takie jak VXLAN i NVGRE, pozwalają na tworzenie izolowanych sieci dla różnych dzierżawców.

29/50
Kontrolery SDN
  • Kontroler SDN jest mózgiem sieci definiowanej programowo.
  • Komunikuje się on z urządzeniami sieciowymi za pomocą otwartych protokołów, takich jak OpenFlow.
  • Aplikacje działające na kontrolerze mogą implementować zaawansowane funkcje, takie jak routing, równoważenie obciążenia czy polityki bezpieczeństwa.
  • Dzięki centralizacji, wprowadzenie nowej polityki w całej sieci sprowadza się do zmiany konfiguracji w jednym miejscu – na kontrolerze, który następnie automatycznie propaguje ją na wszystkie podległe urządzenia.
Ilustracja dla slajdu 29

Kontroler SDN jest centralnym elementem architektury SDN, który zarządza przepływem danych i podejmuje decyzje routingu. Popularne kontrolery SDN to OpenDaylight, ONOS, Ryu i Floodlight, każdy z własnymi zaletami i obszarami zastosowań. OpenDaylight jest najbardziej rozbudowanym kontrolerem, oferującym wiele wtyczek i funkcji.

Kontroler komunikuje się z urządzeniami sieciowymi za pomocą protokołu południowego interfejsu, najczęściej OpenFlow. Aplikacje działające na kontrolerze używają północnego interfejsu REST API do odczytywania i modyfikowania stanu sieci. Dzięki temu programiści mogą tworzyć własne aplikacje do zarządzania siecią.

Wdrożenie SDN wymaga zmiany architektury sieci i często współistnienia z tradycyjnymi protokołami routingowymi. Migracja do SDN jest procesem stopniowym, podczas którego kontroler może zarządzać tylko częścią urządzeń. SDN znajduje zastosowanie w centrach danych, kampusach i sieciach operatorskich.

30/50
Automatyzacja firewalli
  • Ręczne zarządzanie setkami reguł na wielu zaporach sieciowych jest czasochłonne i podatne na błędy.
  • Automatyzacja w tym obszarze pozwala na definiowanie polityk bezpieczeństwa jako kodu.
  • Zmiany w regułach są wprowadzane w repozytorium Git, a potok CI/CD automatycznie waliduje ich składnię i wdraża na firewallach.
  • Nowoczesne platformy do automatyzacji pozwalają również na dynamiczne tworzenie reguł w odpowiedzi na zdarzenia, na przykład automatyczne blokowanie adresu IP, z którego wykryto atak.
Ilustracja dla slajdu 30

Automatyzacja zarządzania firewallami umożliwia definiowanie, testowanie i wdrażanie reguł bezpieczeństwa w sposób scentralizowany i powtarzalny. Polityki bezpieczeństwa są przechowywane jako kod w repozytorium Git, co zapewnia audytowalność i historię zmian. Narzędzia takie jak Ansible z modułami dla firewalla pfSense, iptables czy nftables umożliwiają automatyzację.

Nowoczesne rozwiązania, takie jak Firewall as a Service, integrują się z chmurowymi firewallami i oferują automatyczne generowanie reguł na podstawie architektury aplikacji. Automatyzacja może także wykrywać nieużywane reguły i proponować ich usunięcie, poprawiając wydajność i bezpieczeństwo. Reguły firewalla mogą być testowane w izolowanym środowisku przed wdrożeniem.

W podejściu Zero Trust automatyzacja firewalla jest kluczowa do tworzenia mikrosegmentacji sieci. Mikrosegmentacja ogranicza ruch między poszczególnymi komponentami aplikacji, minimalizując ryzyko lateralnego przemieszczania się atakującego. Automatyzacja umożliwia dynamiczne tworzenie reguł w odpowiedzi na zmiany w architekturze.

31/50
Automatyzacja monitoringu
  • W dynamicznych środowiskach chmurowych ręczne dodawanie i usuwanie hostów z systemu monitoringu jest niemożliwe.
  • Automatyzacja w tym obszarze opiera się na mechanizmach wykrywania usług.
  • System monitoringu, na przykład Prometheus, integruje się z API dostawcy chmury lub orkiestratora, na przykład Kubernetes, aby automatycznie wykrywać nowo utworzone instancje i zaczynać zbierać z nich metryki.
  • Konfiguracja dashboardów i alertów również może być zarządzana jako kod, co zapewnia spójność i powtarzalność.
Ilustracja dla slajdu 31

Automatyzacja monitoringu obejmuje proces automatycznego wykrywania i konfigurowania monitorowania nowych zasobów w środowisku IT. Narzędzia takie jak Prometheus używają mechanizmu service discovery do automatycznego wykrywania nowych celów w Kubernetes lub w chmurze. Alertmanager zarządza alertami i może je routować, deduplikować i wyciszać zgodnie z regułami.

Dashboardy w Grafana mogą być zarządzane jako kod i importowane automatycznie podczas tworzenia nowego środowiska. Szablony dashboardów pozwalają na szybkie tworzenie spójnych widoków dla różnych usług. Automatyzacja konfiguracji alertów zapewnia, że każda usługa ma odpowiednią konfigurację monitorowania.

Integracja monitoringu z systemem ticketingowym umożliwia automatyczne tworzenie zgłoszeń w przypadku alertów. Automatyzacja może również uruchamiać akcje naprawcze, takie jak restart usługi, w odpowiedzi na alert. Logi systemowe mogą być automatycznie zbierane i analizowane przez systemy SIEM.

32/50
Generowanie alertów
  • Definiowanie reguł alertów jako kodu, na przykład w plikach YAML w Prometheusie, jest kluczową praktyką.
  • Pozwala to na przechowywanie definicji alertów w systemie kontroli wersji, co zapewnia ich historię i audytowalność.
  • Umożliwia również stosowanie szablonów i reużywalność, co ułatwia zarządzanie alertami w dużej skali.
  • Zmiany w alertach przechodzą przez ten sam proces recenzji i wdrożenia, co zmiany w kodzie aplikacji, co zwiększa ich jakość i niezawodność.
Ilustracja dla slajdu 32

Reguły alertów w Prometheus są definiowane w języku PromQL i określają warunki, po spełnieniu których alert jest wyzwalany. Przykładem reguły może być alert o wysokim użyciu procesora przez instancję przez dłuższy czas. Alerty mogą być grupowane według etykiet, co ułatwia zarządzanie dużą liczbą podobnych alertów.

Alertmanager odpowiada za odbieranie alertów z Prometheusa i podejmowanie działań, takich jak wysyłanie powiadomień do Slacka, e-maila lub PagerDuty. Można konfigurować routing alertów według priorytetu i przypisywać je do odpowiednich zespołów. Wyciszanie alertów pozwala na tymczasowe zawieszenie alertów podczas planowanych prac konserwacyjnych.

Przechowywanie reguł alertów w Git umożliwia recenzję kodu, zarządzanie wersjami i automatyczne testowanie. Narzędzia takie jak promtool pozwalają na walidację składni reguł przed ich wdrożeniem. Dobrze zdefiniowane alerty są specyficzne, wykonalne i zawierają wystarczający kontekst do podjęcia działań.

33/50
Automatyczne reakcje na problemy
  • Automatyzacja reakcji na problemy to kolejny poziom dojrzałości operacyjnej.
  • Polega ona na tworzeniu automatycznych przepływów pracy, które są uruchamiane w odpowiedzi na konkretne alerty.
  • Proste przykłady to automatyczny restart usługi po jej awarii lub automatyczne czyszczenie dysku, gdy jego zajętość przekroczy próg.
  • Bardziej zaawansowane scenariusze mogą obejmować automatyczne skalowanie zasobów, przełączanie awaryjne do zapasowego centrum danych czy izolowanie zainfekowanej maszyny w sieci.
Ilustracja dla slajdu 33

Automatyczne reakcje na problemy mogą być realizowane przez webhooki, które łączą system monitoringu z narzędziami automatyzacji. Gdy alert jest wyzwalany, webhook wywołuje API narzędzia automatyzacji, które uruchamia odpowiednią procedurę naprawczą. Przykładem może być automatyczne zwiększenie rozmiaru dysku po przekroczeniu progu zajętości.

W środowiskach kontenerowych Kubernetes samodzielnie restartuje uszkodzone kontenery, ale bardziej zaawansowane działania mogą być realizowane przez operatory. Operator może wykryć awarię klastra bazy danych i automatycznie uruchomić proces odtwarzania z kopii zapasowej. Automatyczne procedury naprawcze powinny być projektowane z zachowaniem ostrożności.

W złożonych scenariuszach automatyzacja może realizować wieloetapowe procedury naprawcze z weryfikacją na każdym etapie. Każda automatyczna akcja powinna być rejestrowana i audytowana, aby umożliwić analizę po fakcie. Ważne jest również stosowanie limitów czasowych i mechanizmów przerwania wykonania w przypadku niepowodzenia.

34/50
ChatOps
  • ChatOps to model pracy, w którym zespoły używają platformy czatowej jako centralnego punktu do zarządzania infrastrukturą i aplikacjami.
  • W kanałach czatowych integruje się różne narzędzia – od systemów CI/CD, przez monitoring, aż po narzędzia do automatyzacji.
  • Za pomocą specjalnych botów członkowie zespołu mogą wydawać polecenia w języku naturalnym, aby wdrożyć nową wersję aplikacji, sprawdzić status usługi czy uruchomić zautomatyzowaną procedurę operacyjną.
  • Zapewnia to transparentność i wspólną historię wszystkich operacji.
Ilustracja dla slajdu 34

ChatOps integruje narzędzia operacyjne z platformami komunikacyjnymi, takimi jak Slack, Microsoft Teams czy Discord. Boty operacyjne nasłuchują na komendy na czacie i wykonują zautomatyzowane akcje, takie jak wdrożenie aplikacji czy sprawdzenie statusu serwera. Wszystkie działania są rejestrowane na kanale, zapewniając transparentność i historię operacji.

Hubot i Errbot to popularne frameworki do tworzenia botów, które można rozszerzać o własne skrypty. Integracja z CI/CD, monitoringiem i zarządzaniem konfiguracją pozwala na wykonywanie złożonych operacji z poziomu czatu. Boty mogą również udostępniać informacje o alarmach, wykresach i dziennikach zdarzeń.

ChatOps redukuje barierę wejścia dla członków zespołu, umożliwiając wykonywanie operacji bez znajomości interfejsów wiersza poleceń. Poprawia również współpracę w zespole, umożliwiając wszystkim członkom wgląd w wykonywane operacje. Standaryzacja komend i procedur operacyjnych zwiększa bezpieczeństwo i powtarzalność.

35/50
Boty operacyjne
Boty operacyjne są kluczowym elementem podejścia ChatOps.
  • Są to programy, które żyją na platformie czatowej, nasłuchują na polecenia i integrują się z zewnętrznymi systemami.
  • Mogą one pobierać dane z systemu monitoringu i wklejać wykresy bezpośrednio na kanał, informować o statusie wdrożenia, a także uruchamiać skrypty Ansible czy Terraform w odpowiedzi na polecenia operatora.
  • Użycie botów standaryzuje sposób wykonywania operacji i zapewnia, że wszystkie działania są widoczne dla całego zespołu.
Ilustracja dla slajdu 35

Boty operacyjne mogą być pisane w różnych językach, najczęściej Python, JavaScript lub Go, w zależności od platformy docelowej. Bot może korzystać z API narzędzi automatyzacji, monitoringu i zarządzania konfiguracją. Każda komenda bota powinna być zabezpieczona autoryzacją, aby zapobiec nieuprawnionemu użyciu.

Bot może oferować komendy do uruchamiania procedur naprawczych, generowania raportów i zarządzania środowiskami. Można również zaimplementować mechanizm potwierdzania krytycznych akcji przed ich wykonaniem. Bot powinien logować wszystkie wykonane komendy dla celów audytu.

Rozszerzalność botów poprzez wtyczki umożliwia łatwe dodawanie nowych funkcji. Społeczności botów, takie jak Hubot Scripts, oferują gotowe wtyczki do popularnych narzędzi. Boty mogą również uczyć się na podstawie interakcji i oferować sugestie podczas rozwiązywania problemów.

36/50
Systemy samonaprawiające się
  • Systemy samonaprawiające się to ostateczny cel automatyzacji operacyjnej.
  • Są to systemy zaprojektowane tak, aby potrafiły automatycznie wykrywać problemy i podejmować działania naprawcze bez jakiejkolwiek interwencji człowieka.
  • Orkiestratory kontenerów, takie jak Kubernetes, mają wbudowane podstawowe mechanizmy samonaprawy, takie jak automatyczny restart kontenerów po awarii.
  • Bardziej zaawansowane systemy, oparte na sztucznej inteligencji w operacjach, potrafią diagnozować i naprawiać bardziej złożone problemy, ucząc się na podstawie historycznych incydentów.
Ilustracja dla slajdu 36

Systemy samonaprawiające się wykorzystują pętlę sprzężenia zwrotnego między monitoringiem a automatyzacją. System monitoruje swoje komponenty, wykrywa odchylenia od normy i podejmuje automatyczne działania naprawcze. Celem jest przywrócenie prawidłowego działania bez ingerencji człowieka w możliwie krótkim czasie.

Kubernetes oferuje podstawowe mechanizmy samonaprawy, w tym automatyczny restart kontenerów, przenoszenie Podów na zdrowe węzły i replikację. Bardziej zaawansowane strategie, takie jak automatyczna zmiana konfiguracji na podstawie warunków środowiskowych, mogą być implementowane przez operatory. Narzędzia AIOps analizują wzorce awarii i proponują optymalne działania naprawcze.

System samonaprawiający się musi być zaprojektowany z uwzględnieniem mechanizmów bezpieczeństwa, aby nie podejmował działań pogarszających sytuację. Wprowadzenie limitów czasowych i liczników ponowień zapobiega nieskończonym pętlom naprawczym. Ważne jest również monitorowanie samego systemu samonaprawy, aby wykrywać nieprawidłowości w jego działaniu.

37/50
Automatyzacja procedur operacyjnych
  • Automatyzacja procedur operacyjnych to praktyka przekształcania manualnych procedur operacyjnych w wykonywalne skrypty i przepływy pracy.
  • Zamiast polegać na ludzkiej pamięci i precyzji w stresującej sytuacji, operatorzy mogą uruchomić zautomatyzowaną procedurę operacyjną, która w sposób powtarzalny i niezawodny wykona wszystkie niezbędne kroki.
  • Narzędzia takie jak Ansible czy platformy SOAR doskonale nadają się do tworzenia takich zautomatyzowanych procedur, które mogą obejmować zarówno kroki diagnostyczne, jak i naprawcze.
Ilustracja dla slajdu 37

Procedury operacyjne, takie jak restart usługi, odtwarzanie z kopii zapasowej czy dodawanie nowego użytkownika, mogą być zautomatyzowane za pomocą skryptów Ansible lub Terraform. Każda procedura jest definiowana jako playbook, który zawiera wszystkie niezbędne kroki. Uruchomienie procedury sprowadza się do wykonania jednego polecenia.

Narzędzia SOAR, takie jak Splunk Phantom, Cortex XSOAR i Swimlane, oferują zaawansowane funkcje do automatyzacji procedur bezpieczeństwa i operacyjnych. SOAR umożliwia definiowanie playbooków z warunkami, pętlami i równoległymi krokami. Integracja z narzędziami IT i bezpieczeństwa pozwala na tworzenie kompleksowych procedur.

Automatyzacja procedur operacyjnych redukuje czas potrzebny na wykonanie powtarzalnych zadań i minimalizuje ryzyko błędów. Każda procedura powinna być testowana w środowisku nieprodukcyjnym przed wdrożeniem. Dokumentacja i szkolenie personelu są kluczowe dla skutecznego wykorzystania zautomatyzowanych procedur.

38/50
Integracje narzędzi automatyzacyjnych
  • Siła automatyzacji leży w integracji. Żadne pojedyncze narzędzie nie rozwiąże wszystkich problemów.
  • Nowoczesne środowiska automatyzacji tworzą ekosystem, w którym różne, wyspecjalizowane narzędzia współpracują ze sobą.
  • System CI/CD może wywoływać Terraform do provisionowania infrastruktury, następnie Ansible do jej konfiguracji, a na końcu Helm do wdrożenia aplikacji.
  • System monitoringu może z kolei wywoływać Ansible w celu automatycznej naprawy.
  • Kluczem do tej integracji są otwarte standardy i interfejsy API.
Ilustracja dla slajdu 38

Integracja narzędzi automatyzacyjnych wymaga stosowania standardowych interfejsów API i formatów danych, takich jak REST, JSON i YAML. Narzędzia CI/CD, takie jak Jenkins, GitLab CI i GitHub Actions, mogą wywoływać narzędzia IaC i zarządzania konfiguracją poprzez webhooki lub CLI. Jenkins Pipeline pozwala na definiowanie wieloetapowych przepływów pracy z integracją wielu narzędzi.

Webhooki umożliwiają wyzwalanie automatyzacji w odpowiedzi na zdarzenia, takie jak push do repozytorium czy alert z monitoringu. API Gateway może służyć jako centralny punkt wejścia do wszystkich narzędzi automatyzacyjnych. Zarządzanie kluczami API i uwierzytelnianie między narzędziami zapewnia bezpieczeństwo integracji.

Platformy takie jak RunDeck, StackStorm i Netflix Spinnaker oferują centralne zarządzanie zautomatyzowanymi przepływami pracy. Umożliwiają one tworzenie dashboardów do monitorowania wykonania zadań i historii operacji. W miarę rozwoju organizacje mogą wdrożyć Event-Driven Automation, gdzie zdarzenia automatycznie wyzwalają odpowiednie przepływy pracy.

39/50
Zarządzanie sekretami
  • W zautomatyzowanych przepływach pracy skrypty i narzędzia często potrzebują dostępu do wrażliwych danych, takich jak hasła, klucze API czy certyfikaty.
  • Przechowywanie tych sekretów w postaci jawnego tekstu w plikach konfiguracyjnych lub w repozytorium Git jest jednym z najpoważniejszych błędów bezpieczeństwa.
  • Do bezpiecznego zarządzania sekretami służą dedykowane narzędzia, zwane sejfami, takie jak HashiCorp Vault czy AWS Secrets Manager.
  • Pozwalają one na centralne, bezpieczne przechowywanie sekretów, audyt dostępu do nich i dynamiczne wstrzykiwanie ich do aplikacji w czasie uruchomienia.
Ilustracja dla slajdu 39

Narzędzia do zarządzania sekretami, takie jak HashiCorp Vault, oferują funkcje przechowywania, rotacji i audytu dostępu do wrażliwych danych. Vault umożliwia definiowanie polityk dostępu, które kontrolują, kto i w jakich okolicznościach może odczytać poszczególne sekrety. Sekrety mogą być automatycznie odnawiane i unieważniane po upływie czasu ważności.

Integracja Vaulta z Kubernetes pozwala na dynamiczne wstrzykiwanie sekretów do Podów za pomocą Sidecar Injector. AWS Secrets Manager i Azure Key Vault oferują podobne funkcje w chmurze. Sekrety mogą być przechowywane w zaszyfrowanej formie i dostępne tylko dla autoryzowanych aplikacji.

W CI/CD sekrety mogą być przechowywane w zmiennych środowiskowych lub plikach chronionych przez system kontroli dostępu. Nigdy nie należy przechowywać sekretów w repozytorium Git w postaci jawnego tekstu. Narzędzia takie jak git-secrets mogą automatycznie skanować repozytorium w poszukiwaniu potencjalnie wyciekłych sekretów.

40/50
Bezpieczeństwo w automatyzacji
  • Automatyzacja, choć przynosi wiele korzyści, wprowadza również nowe wektory ryzyka.
  • Systemy do automatyzacji, takie jak serwer CI/CD czy Ansible, stają się niezwykle uprzywilejowanymi komponentami, ponieważ mają dostęp do całej infrastruktury.
  • Zabezpieczenie tych systemów jest absolutnie kluczowe.
  • Należy stosować zasadę najmniejszych uprawnień, dając poszczególnym zadaniom automatyzacji tylko te uprawnienia, które są im niezbędne.
  • Wszystkie operacje wykonywane przez systemy automatyzacji muszą być szczegółowo logowane i audytowane.
Ilustracja dla slajdu 40

Zabezpieczenie systemów automatyzacji wymaga stosowania najlepszych praktyk bezpieczeństwa, w tym najmniejszych uprawnień i segmentacji sieci. System CI/CD powinien być odizolowany od sieci produkcyjnej i komunikować się z nią za pomocą bezpiecznych kanałów. Wszystkie komunikaty między narzędziami automatyzacji powinny być szyfrowane.

Kontrola dostępu oparta na rolach umożliwia ograniczenie uprawnień poszczególnych użytkowników i systemów. Logowanie i audyt wszystkich akcji automatyzacji są niezbędne do wykrywania nieautoryzowanych działań. Regularne przeglądy uprawnień i konfiguracji zabezpieczeń powinny być częścią procesu utrzymania.

Automatyzacja bezpieczeństwa może być wykorzystywana do skanowania infrastruktury pod kątem podatności i automatycznego stosowania poprawek. Security as Code to praktyka definiowania polityk bezpieczeństwa w kodzie, które są weryfikowane w procesie CI/CD. Automatyczne testy penetracyjne mogą być integrowane z potokiem wdrożeniowym.

41/50
Testowanie automatyzacji
  • Kod automatyzacji powinien być traktowany z taką samą powagą jak kod aplikacji.
  • Oznacza to, że on również musi być testowany.
  • Do testowania kodu automatyzacji używa się narzędzi, które pozwalają na uruchamianie go w odizolowanych, tymczasowych środowiskach, na przykład w kontenerach Docker lub na maszynach wirtualnych.
  • Testy te weryfikują, czy kod ma poprawną składnię, czy wykonuje oczekiwane operacje i czy w efekcie końcowym system osiąga pożądany, zgodny z definicją stan.
Ilustracja dla slajdu 41

Testowanie kodu automatyzacji jest procesem wieloetapowym, który powinien być integralną częścią cyklu rozwoju. Testy składni i statyczna analiza kodu mogą być wykonywane przez lintery, takie jak ansible-lint dla playbooków i tflint dla Terraform. Testy te wykrywają błędy składniowe i potencjalne problemy bezpieczeństwa.

Testy jednostkowe weryfikują poszczególne funkcje i moduły automatyzacji. Molecule to framework do testowania ról Ansible w izolowanych środowiskach Docker. Inspec od Chef umożliwia pisanie testów weryfikujących stan systemu po zastosowaniu konfiguracji.

Testy integracyjne uruchamiają pełną automatyzację w środowisku testowym i weryfikują jej działanie. Testy te mogą sprawdzać, czy po wykonaniu playbooka usługi są uruchomione i dostępne. Wdrożenie testów do pipeline CI/CD zapewnia, że każda zmiana w kodzie automatyzacji jest weryfikowana.

42/50
Błędy i awarie automatyzacji
  • Nawet najlepiej napisana automatyzacja może zawieść, na przykład z powodu chwilowych problemów z siecią, błędów w API dostawcy chmury czy nieprzewidzianych zmian w środowisku.
  • Dlatego kluczowe jest projektowanie automatyzacji w sposób odporny na błędy.
  • Powinna ona zawierać mechanizmy ponawiania operacji, a także logikę obsługi błędów, która w razie niepowodzenia pozostawi system w spójnym stanie lub przywróci go do poprzedniej, stabilnej wersji.
  • Każda awaria automatyzacji powinna generować czytelny alert i dostarczać wystarczająco dużo informacji do jej zdiagnozowania.
Ilustracja dla slajdu 42

Najczęstszymi przyczynami awarii automatyzacji są problemy z siecią, zmiany w API dostawców chmury i upływ ważności certyfikatów. Nieprzewidziane stany systemu, takie jak brak miejsca na dysku czy wyczerpanie pamięci, mogą również powodować niepowodzenia. Projektowanie automatyzacji z uwzględnieniem obsługi błędów jest kluczowe dla niezawodności.

Mechanizmy ponawiania operacji z opóźnieniem, znane jako retry, są podstawową techniką radzenia sobie z błędami przejściowymi. Backoff wykładniczy, gdzie opóźnienie między ponownieniami rośnie wykładniczo, jest skuteczną strategią unikania przeciążenia API. Ważne jest ograniczenie maksymalnej liczby ponownych prób, aby zapobiec nieskończonym pętlom.

W przypadku nieodwracalnych błędów automatyzacja powinna pozostawić system w spójnym stanie i wygenerować szczegółowy komunikat błędu. Rollback automatyczny powinien być zaimplementowany dla krytycznych operacji, które mogą pozostawić system w nieokreślonym stanie. Monitorowanie wskaźników sukcesu automatyzacji pozwala na szybkie wykrywanie problemów.

43/50
Migracja do środowisk zautomatyzowanych
Zazwyczaj jest to proces stopniowy.
  • Przejście od ręcznego zarządzania do w pełni zautomatyzowanego środowiska to złożony proces, który wymaga nie tylko wdrożenia nowych narzędzi, ale także zmiany kultury i sposobu myślenia.
  • Zaczyna się od automatyzacji małych, powtarzalnych zadań, aby pokazać wartość i zdobyć doświadczenie.
  • Następnie automatyzuje się proces provisionowania nowych systemów, a stare, ręcznie zarządzane systemy są stopniowo wycofywane lub migrowane do nowego modelu.
  • Kluczowe dla sukcesu jest wsparcie kierownictwa i inwestycja w szkolenie zespołów.
Ilustracja dla slajdu 43

Proces migracji do środowisk zautomatyzowanych powinien rozpoczynać się od inwentaryzacji istniejących systemów i procesów. Należy zidentyfikować najprostsze i najbardziej powtarzalne zadania, które przyniosą największe korzyści po automatyzacji. Wprowadzanie automatyzacji stopniowo, małymi krokami, minimalizuje ryzyko i pozwala na zdobycie doświadczenia.

Wybór narzędzi automatyzacji powinien być dostosowany do istniejącej infrastruktury i kompetencji zespołu. Wdrożenie pilotażowe w jednym obszarze pozwala na przetestowanie narzędzi i procesów przed rozszerzeniem na całą organizację. Kluczowe jest zaangażowanie zespołu operacyjnego w proces migracji i zapewnienie odpowiednich szkoleń.

Migracja danych i konfiguracji powinna być przeprowadzana z zachowaniem ciągłości działania usług. Automatyzacja procesu migracji może być zaprojektowana i testowana w środowisku nieprodukcyjnym przed wdrożeniem na produkcję. Po zakończeniu migracji należy monitorować system i zbierać feedback od zespołu operacyjnego.

44/50
Wycenianie kosztów automatyzacji
  • Wdrożenie automatyzacji to inwestycja, która wymaga czasu i zasobów.
  • Oceniając jej opłacalność, należy wziąć pod uwagę nie tylko bezpośrednie oszczędności wynikające z redukcji czasu poświęcanego na ręczne zadania.
  • Znacznie większe korzyści płyną z redukcji kosztów awarii spowodowanych błędami ludzkimi, zwiększenia szybkości wdrażania nowych funkcji oraz poprawy satysfakcji i morale inżynierów, którzy mogą skupić się na bardziej kreatywnych zadaniach.
  • Automatyzacja to inwestycja w szybkość, jakość i niezawodność.
Ilustracja dla slajdu 44

Koszty wdrożenia automatyzacji obejmują wydatki na narzędzia, szkolenia personelu i czas poświęcony na tworzenie automatyzacji. Należy również uwzględnić koszty utrzymania infrastruktury automatyzacji, takiej jak serwery CI/CD, narzędzia IaC i platformy orkiestracji. Zwrot z inwestycji w automatyzację może być obliczany na podstawie oszczędności czasu i redukcji błędów.

Korzyści z automatyzacji obejmują redukcję czasu poświęcanego na ręczne zadania, szybsze wdrażanie zmian i mniejszą liczbę incydentów. Zwiększona szybkość dostarczania oprogramowania przekłada się na przewagę konkurencyjną i szybsze reagowanie na potrzeby rynku. Poprawa morale zespołu operacyjnego, który może skupić się na bardziej wartościowych zadaniach, jest dodatkową korzyścią.

Do wyceny korzyści można użyć metryk takich jak czas średniego przywracania usługi, czas między wdrożeniami i liczba incydentów związanych z błędami ludzkimi. Kalkulacja ROI powinna uwzględniać perspektywę długoterminową, ponieważ efekty automatyzacji kumulują się w czasie. Warto również uwzględnić korzyści niematerialne, takie jak poprawa jakości i niezawodności.

45/50
Przykład projektu automatyzacji
  • Rozważmy projekt automatyzacji wdrożenia serwera WWW.
  • Proces zaczyna się od kodu Terraform, który tworzy maszynę wirtualną w chmurze.
  • Po jej utworzeniu automatycznie uruchamiany jest playbook Ansible.
  • Playbook ten instaluje serwer Nginx, wdraża pliki konfiguracyjne z szablonów, pobiera najnowszą wersję aplikacji z repozytorium artefaktów i uruchamia usługę.
  • Na koniec playbook dodaje nową maszynę do systemu monitoringu Prometheus.
  • Cały proces, od zera do działającego serwera, trwa kilka minut i jest w pełni powtarzalny.
Ilustracja dla slajdu 45

Rozbudowany przykład projektu automatyzacji obejmuje pełne środowisko e-commerce z wieloma warstwami. Terraform provisionuje sieć VPC, podsieci, grupy bezpieczeństwa i instancje EC2 w AWS. Ansible konfiguruje serwery aplikacji, instaluje Javę, Nginxa i wdraża aplikację z repozytorium artefaktów.

Kubernetes zarządza kontenerami mikroserwisów, a Helm wdraża charty zdefiniowane w repozytorium Git. Prometheus i Grafana monitorują wszystkie warstwy aplikacji, a Alertmanager wysyła powiadomienia do Slacka w przypadku problemów. Cały proces od zera do w pełni działającego środowiska jest w pełni zautomatyzowany i trwa kilkanaście minut.

Repozytorium Git zawiera wszystkie definicje infrastruktury i konfiguracji, a pipeline CI/CD automatycznie wdraża zmiany po zatwierdzeniu. Każda gałąź Git może tworzyć własne środowisko testowe, które jest automatycznie niszczone po zakończeniu pracy. Projekt ten pokazuje siłę integracji narzędzi automatyzacyjnych w praktyce.

46/50
Najlepsze praktyki automatyzacji
  • Do najlepszych praktyk w automatyzacji należy traktowanie całego kodu konfiguracyjnego jak kodu aplikacji – przechowywanie go w Gicie, stosowanie recenzji kodu i testowanie.
  • Należy dążyć do tworzenia małych, reużywalnych i idempotentnych komponentów automatyzacji.
  • Ważne jest unikanie przechowywania sekretów w kodzie i używanie do tego dedykowanych narzędzi.
  • Kluczowe jest również zapewnienie dobrej dokumentacji i logowania, aby procesy automatyzacji były zrozumiałe i audytowalne.
Ilustracja dla slajdu 46

Stosowanie kontroli wersji dla całego kodu automatyzacji jest podstawową praktyką, która umożliwia audyt i odtwarzanie zmian. Recenzje kodu powinny być obowiązkowe dla wszystkich zmian w kodzie automatyzacji, tak jak dla kodu aplikacji. Automatyzacja powinna być idempotentna, co oznacza, że wielokrotne uruchomienie daje ten sam rezultat.

Modularyzacja kodu automatyzacji umożliwia ponowne wykorzystanie komponentów w różnych projektach. Małe, wyspecjalizowane moduły są łatwiejsze w testowaniu i utrzymaniu. Unikanie przechowywania haseł i kluczy w kodzie jest krytyczne dla bezpieczeństwa.

Dokumentacja i komentarze w kodzie automatyzacji ułatwiają zrozumienie i utrzymanie. Logowanie wszystkich akcji automatyzacji umożliwia diagnostykę i audyt. Regularne testowanie i walidacja automatyzacji w środowisku testowym zapobiega problemom na produkcji.

47/50
Typowe pułapki
  • Jedną z typowych pułapek jest próba zautomatyzowania złych, nieefektywnych procesów.
  • Automatyzacja powinna być poprzedzona optymalizacją i uproszczeniem samego procesu.
  • Inną pułapką jest tworzenie zbyt skomplikowanych, monolitycznych skryptów automatyzacji, które są trudne do zrozumienia i utrzymania.
  • Należy unikać również automatyzacji dla samej automatyzacji – wysiłek powinien być skupiony na tych obszarach, gdzie przyniesie on największą wartość, redukując ryzyko i powtarzalną pracę.
Ilustracja dla slajdu 47

Jedną z najczęstszych pułapek jest nadmierna automatyzacja, czyli automatyzacja procesów, które są rzadko wykonywane lub niesprawdzone. W takich przypadkach koszt stworzenia automatyzacji może przewyższać oszczędności. Należy zacząć od automatyzacji procesów o wysokiej częstotliwości i dużym ryzyku błędu.

Brak idempotentności to kolejna częsta pułapka, która prowadzi do niepożądanych efektów przy wielokrotnym uruchomieniu. Niektóre automatyzacje są zaprojektowane tylko do jednorazowego wykonania i nie uwzględniają mechanizmów ponawiania. Testowanie automatyzacji w różnych warunkach pomaga wykryć te problemy.

Zbyt skomplikowana automatyzacja, która próbuje obsłużyć wszystkie możliwe przypadki krawędziowe, może być trudna w utrzymaniu i podatna na błędy. Prostota i czytelność kodu automatyzacji są ważniejsze niż próba pokrycia każdego możliwego scenariusza. Regularny przegląd i refaktoryzacja kodu automatyzacji pomagają utrzymać jego jakość.

48/50
Narzędzia DevOps
Systemy kontroli wersji są fundamentem.
  • Automatyzacja i orkiestracja są sercem kultury DevOps.
  • Ekosystem narzędzi DevOps jest ogromny i obejmuje cały cykl życia aplikacji.
  • Narzędzia CI/CD automatyzują budowanie i testowanie.
  • Narzędzia infrastruktury jako kod i zarządzania konfiguracją automatyzują infrastrukturę.
  • Orkiestratory kontenerów zarządzają aplikacjami w środowisku uruchomieniowym.
  • Wszystko to jest spięte przez platformy do obserwowalności.
Ilustracja dla slajdu 48

Ekosystem narzędzi DevOps jest bogaty i zróżnicowany, obejmujący narzędzia do zarządzania kodem, CI/CD, IaC, monitoringu i orkiestracji. Git jest uniwersalnym systemem kontroli wersji, który stanowi fundament współpracy. Jenkins, GitLab CI, GitHub Actions i CircleCI to najpopularniejsze narzędzia CI/CD.

Docker i Kubernetes dominują w obszarze konteneryzacji i orkiestracji, podczas gdy Terraform i Ansible są liderami IaC i zarządzania konfiguracją. Prometheus i Grafana są standardem w monitoringu, a ELK Stack w zarządzaniu logami. HashiCorp Vault oferuje bezpieczne zarządzanie sekretami.

Wybór odpowiedniego zestawu narzędzi zależy od specyfiki organizacji, budżetu i kompetencji zespołu. Ważne jest unikanie nadmiernej liczby narzędzi, które mogą prowadzić do złożoności i problemów z integracją. Regularna ewaluacja narzędzi i zastępowanie ich lepszymi alternatywami jest częścią dojrzałej kultury DevOps.

49/50
Podsumowanie
  • Automatyzacja i orkiestracja to nie tylko technologie, ale fundamentalna zmiana w sposobie myślenia o zarządzaniu infrastrukturą i usługami.
  • Przejście od ręcznych, reaktywnych operacji do zautomatyzowanych, proaktywnych procesów zdefiniowanych jako kod jest kluczem do budowania szybkich, niezawodnych i bezpiecznych systemów w dzisiejszym, dynamicznym świecie.
  • Narzędzia takie jak Ansible, Terraform i Kubernetes stały się niezbędnymi umiejętnościami każdego nowoczesnego inżyniera operacji i specjalisty DevOps.
Ilustracja dla slajdu 49

Automatyzacja i orkiestracja stanowią fundament nowoczesnego zarządzania usługami IT, umożliwiając budowanie skalowalnych i niezawodnych systemów. Przejście od ręcznego zarządzania do zautomatyzowanych procesów wymaga inwestycji w narzędzia i szkolenia, ale przynosi wymierne korzyści w postaci szybkości i jakości. Kluczowe technologie w tym obszarze to konteneryzacja, IaC, CI/CD i GitOps.

Kubernetes, Terraform i Ansible to obecnie trzy najważniejsze narzędzia, które każdy inżynier DevOps powinien znać. Znajomość tych technologii otwiera wiele możliwości rozwoju zawodowego i jest wysoko ceniona na rynku pracy. Trendy takie jak AIOps i Event-Driven Automation będą kształtować przyszłość automatyzacji.

Ciągłe uczenie się i śledzenie nowych technologii jest niezbędne w dynamicznie zmieniającym się świecie IT. Zachęcam do eksperymentowania z narzędziami automatyzacji we własnych projektach. Praktyczne doświadczenie jest najlepszym sposobem na zdobycie biegłości w tych technologiach.

50/50
Pytania
  • Dziękuję za uwagę.
  • Omówiliśmy szeroki zakres tematów, od podstawowych narzędzi do zarządzania konfiguracją, przez infrastrukturę jako kod, aż po zaawansowaną orkiestrację kontenerów za pomocą Kubernetes.
  • Mam nadzieję, że ten wykład dał Państwu solidne podstawy do zrozumienia, jak automatyzacja i orkiestracja rewolucjonizują świat utrzymania usług.
  • Teraz chętnie odpowiem na wszelkie pytania.
Ilustracja dla slajdu 50

W trakcie wykładu omówiliśmy szeroki zakres tematów związanych z automatyzacją i orkiestracją w utrzymaniu usług IT. Od podstaw automatyzacji przez narzędzia zarządzania konfiguracją, infrastrukturę jako kod, aż po zaawansowaną orkiestrację kontenerów w Kubernetes. Wszystkie te technologie łączy wspólny cel: zwiększenie efektywności i niezawodności systemów.

Zachęcam do zadawania pytań dotyczących praktycznego zastosowania omawianych narzędzi i technik. Jeśli interesuje Was konkretny przypadek użycia lub chcielibyście zobaczyć demonstrację działania, proszę o sygnał. Możemy również omówić ścieżki rozwoju w kierunku specjalisty DevOps.

Dla zainteresowanych pogłębieniem wiedzy polecam oficjalną dokumentację narzędzi oraz kursy na platformach takich jak Udemy, Coursera i Linux Academy. Kluczowe jest zdobycie praktycznego doświadczenia poprzez własne projekty i eksperymenty. Życzę powodzenia w dalszym zgłębianiu fascynującego świata automatyzacji IT.