Ansible vs. Kubernetes: zrozumienie różnic –

Żadna dyskusja na temat automatyzacji operacji IT nie może obyć się bez Ansible i Kubernetes. Chociaż te dwa narzędzia służą różnym celom, naprawdę zrewolucjonizowały cykl tworzenia oprogramowania. Przejdźmy więc do tych narzędzi bardziej szczegółowo.

Co to jest Ansible?

Ansible, pierwotnie pomysł Michaela DeHaa, jest obecnie zaliczany na GitHub jako jeden ze 100 najpopularniejszych projektów. Jest lubiany ze względu na prosty język i łatwość obsługi. Obecnie Ansible zyskał szerokie uznanie jako de facto punkt odniesienia dla automatyzacji IT.

Rozwijające się w społeczności open source narzędzie przeszło godny uwagi rozwój, oferując rozwiązania dla operatorów, administratorów i decydentów IT w różnych środowiskach technicznych.

Ansibl

W związku z tym znane organizacje, takie jak Twitter, eBay, Verizon, NASA, ILM, Rackspace i Electronic Arts szeroko wykorzystują to narzędzie. Ze względu na swój sukces Red Hat przejął Ansible w 2015 roku.

Ansible sprawia, że ​​zarządzanie konfiguracją, wdrażanie aplikacji i automatyzacja zadań są nieskomplikowane. W nowoczesnych środowiskach cyfrowych specjaliści DevOps często wykorzystują ją do udostępniania zasobów w celu realizacji podejścia infrastruktury jako kodu (IaC) w celu bezproblemowego dostarczania oprogramowania.

Oto kilka sposobów wykorzystania Ansible:

  • Zarządzanie konfiguracją: Dzięki rozwiązaniu Ansible zdefiniowanie żądanej konfiguracji serwerów, urządzeń sieciowych i innych elementów infrastruktury jest dziecinnie proste. Może również automatycznie i konsekwentnie odtwarzać te konfiguracje w wielu systemach, zapewniając w ten sposób ustandaryzowaną strukturę i zgodność.
  • Wdrażanie aplikacji: Ansible sprawia, że ​​wdrażanie aplikacji jest dziecinnie proste, automatyzując proces w różnych środowiskach, od programowania, przez testowanie, aż po produkcję. Zadania takie jak instalowanie oprogramowania, konfigurowanie baz danych i konfigurowanie sieci są wykonywane za pomocą kilku poleceń.
  • Automatyzacja zadań: Pożegnaj się z ręcznymi, powtarzalnymi zadaniami! Ansible pozwala zespołom IT zautomatyzować szeroki zakres zadań, takich jak łatanie systemów, zarządzanie kopiami zapasowymi, tworzenie kont użytkowników i ponowne uruchamianie usług. Dzięki temu Twój zespół może skupić się na bardziej strategicznych inicjatywach.
  • Udostępnianie infrastruktury: dynamiczne udostępnianie i konfigurowanie zasobów, takich jak maszyny wirtualne, instancje w chmurze i urządzenia sieciowe, w oparciu o zapotrzebowanie, może być żmudne. Jednak Ansible ponownie przychodzi ci z pomocą i może wydajnie skalować twoją infrastrukturę w górę lub w dół.
  • Orkiestracja: Ansible błyszczy w zarządzaniu złożonymi wdrożeniami obejmującymi wiele systemów. Może przeprowadzać skomplikowane przepływy pracy w celu obsługi zadań, takich jak wdrażanie aplikacji wielowarstwowych i wdrażanie aktualizacji w rozproszonym środowisku, zarządzając w ten sposób urządzeniami sieciowymi w skoordynowany sposób.
  • Korzyści z Ansibla

    • Prosty do nauczenia się i użycia: ponieważ podręczniki używają YAML, są dość łatwe do napisania, dzięki czemu mogą się nimi bawić zarówno amatorzy, jak i eksperci. Prosta i intuicyjna składnia ułatwia szybkie wdrożenie i płynny przepływ pracy.
    • Napisane w Pythonie: To narzędzie opiera się na prostocie. Jest napisany w Pythonie, jednym z najpopularniejszych i nieskomplikowanych języków programowania.
    • Architektura bezagentowa: jest bezagentowa. Ansible może regulować zdalne hosty przez SSH bez konieczności instalowania na nich oprogramowania. Wykorzystując podręczniki i role, Ansible ułatwia zdefiniowanie idealnej infrastruktury i automatyzację ścieżki do niej.
    • Zwiększone bezpieczeństwo: dzięki SSH Ansible nadaje priorytet bezpieczeństwu między systemami. Chroni aplikacje i infrastrukturę przed potencjalnymi zagrożeniami.
    • Integracja z systemami zarządzania uwierzytelnianiem: Ansible integruje się z systemami zarządzania uwierzytelnianiem, takimi jak LDAP, Kerberos i innymi, w celu zapewnienia właściwej kontroli dostępu i zwiększonego bezpieczeństwa.
    • Niezawodność: infrastruktury IT wymagają stabilności i niezawodności. Ansible ma doświadczenie w oferowaniu wysokiej wydajności i niezawodności.

    Co więcej, Ansible jest ekscytujący, ponieważ jest naprawdę przyjazny dla użytkownika. Zarządzanie zarówno infrastrukturą lokalną, jak i opartą na chmurze jest absolutne, jak powiedziałby Sherlock, „elementarne” z Ansible.

    Jak działa ansible?

    Zanim zagłębimy się w działanie Ansible, przyjrzyjmy się jego komponentom:

    Moduły: gdyby Ansible był daniem (posiłkiem), moduły byłyby głównym składnikiem. Są to gotowe małe programy, które obsługują prawie wszystko – od aplikacji i pakietów po pliki w systemach zewnętrznych. Ansible implementuje zdefiniowane instrukcje na systemy zewnętrzne i jednocześnie dostarcza moduły z komputera dowodzenia.

    Podręczniki uruchamiają ten powiązany moduł i usuwają go z pętli po wykonaniu zadania. Ansible ma ponad 750 (stale rosnących) wbudowanych modułów, dzięki którym automatyzacja jest łatwa dzięki swoim zabawom i zadaniom!

    Źródło obrazu: InterviewBit

    Podręczniki: podręczniki to zorientowane na zadania podręczniki użytkownika, które wykorzystują format YAML w celu uproszczenia automatyzacji. Te podręczniki dyktują przepływ pracy i wykonują zadania w uporządkowany sposób. Podręczniki mogą wykonywać sekwencyjne procedury, definiować środowiska i zarządzać różnymi etapami zadania.

    Wtyczki: Wtyczki Ansible poprawiają zarówno wbudowaną, jak i dostosowaną funkcjonalność witryny. System może wykonywać funkcje rejestrowania, wyświetlania zdarzeń, buforowania i kontrolera front-end i wykonuje je przed modułami w węzłach.

    Inwentarze: Inwentarze Ansible zawierają listy hostów z ich adresami IP, serwerami i bazami danych. SSH dla systemów UNIX, Linux lub urządzeń sieciowych oraz WinRM dla systemów Windows pomagają nimi zarządzać.

    Inne komponenty Ansible to API, chmura, host, sieć i CMD (baza danych zarządzania konfiguracją).

    Oto jak Ansible działa na swoją magię:

    Po pierwsze, Ansible ma plik inwentaryzacji z listą hostów lub maszyn. Użytkownicy mogą zmieniać ten plik inwentarza, dodając serwery, którymi chcą sterować.

    Następnym krokiem jest utworzenie podręczników w celu zdefiniowania idealnej infrastruktury w zarządzanych węzłach. Teraz, gdy Ansible działa na węźle kontrolnym, który pomaga wykonywać zadania w systemie zdalnym, nawiąże połączenie SSH z tym ostatnim. Pozwala na bezpieczną komunikację między węzłami.

    Następnie wysyła i wykonuje moduły, aby wykonać zadania zdefiniowane w podręcznikach, doprowadzając systemy do pożądanego stanu.

    Po wykonaniu zadania Ansible usuwa moduły z zarządzanych węzłów, aby zapobiec pozostawieniu modułów. Wreszcie dostarcza raporty o statusie realizacji zadań, pozwalając użytkownikom na monitorowanie postępu i wyników zadań automatyzacji. Co więcej, Ansible może działać regularnie, aby utrzymywać i ulepszać system w miarę upływu czasu.

    Co to jest Kubernetes?

    Joe Beda, Brendan Burns i Craig McLuckie to genialne umysły stojące za Kubernetes. Pracując jako inżynierowie w Google, stworzyli to narzędzie, które jest teraz potęgą dla aplikacji kontenerowych.

    Początkowo Kubernetes został opracowany przez Google do zarządzania własnymi kontenerowymi aplikacjami w środowisku produkcyjnym, a po raz pierwszy został wydany jako projekt open source w 2014 roku.

    W 2015 roku firma Google przekazała Kubernetes niezależnej od dostawcy Cloud Native Computing Foundation (CNCF), aby rozwijać technologię przetwarzania natywnego w chmurze.

    Od tego czasu Kubernetes stał się jednym ze sztandarowych projektów CNCF, szeroko przyjętym w branży i ugruntował swoją pozycję lidera w orkiestracji kontenerów.

    Według Gartnera do 2025 roku około 85% organizacji będzie używać Kubernetes. Dlaczego miałoby tego nie robić? Solidny ekosystem dodatków, narzędzi i usług sprawia, że ​​jest to wszechstronna platforma do zarządzania aplikacjami kontenerowymi.

    Kubernetes przeszedł kilka ważnych aktualizacji, wprowadzając nowe funkcje, ulepszenia i poprawki błędów w każdej wersji. Stale ewoluuje i ulepsza się dzięki społeczności pełnej pasji!

    Korzyści z Kubernetesa

    • Skalowalność: łatwe skalowanie aplikacji w zależności od zapotrzebowania.
    • Przenośność: konsekwentnie wdrażaj aplikacje i zarządzaj nimi w różnych środowiskach.
    • Elastyczność: obsługa różnych środowisk wykonawczych i formatów kontenerów.
    • Automatyzacja: zautomatyzuj wdrażanie, skalowanie, monitorowanie i naprawę kontenerów.
    • Odporność: Wbudowana odporność na awarie i możliwości samonaprawy.
    • Włączenie DevOps: promuje współpracę między programistami a zespołami operacyjnymi.
    • Rozszerzalność: Konfigurowalna i rozszerzalna architektura do integracji z innymi narzędziami.
    • Społeczność i ekosystem: duża społeczność i ekosystem dla zwiększonych możliwości.

    Jak działa Kubernetes?

    Ponieważ Kubernetes jest platformą, która pomaga w orkiestracji kontenerów, pierwszym krokiem jest spakowanie aplikacji do kontenerów za pomocą narzędzi do konteneryzacji, takich jak Docker. Te kontenery są samowystarczalne, zawierają całe niezbędne oprogramowanie i zależności, aby niezawodnie działać w różnych środowiskach.

    Następnie za pomocą YAML lub JSON definiowany jest stan aplikacji, w tym obrazy kontenerów, wymagania dotyczące zasobów, zasady skalowania, konfiguracja sieci i pamięci masowej. Pliki z instrukcjami nazywane są manifestami.

    W Kubernetes klaster jest jak zespół komputerów, zwanych węzłami, które współpracują ze sobą w celu uruchamiania aplikacji. Pomyśl o węzłach jako graczach w drużynie piłkarskiej, a każdy gracz może obsługiwać wiele kontenerów, które są jak sprzęt lub wyposażenie graczy potrzebne do gry.

    Komponenty Kubernetesa

    Najmniejszy element konstrukcyjny w Kubernetes nazywa się Pod, który jest jak przytulny domek na jeden lub więcej pojemników. Kapsuły są jak szatnie graczy, w których spędzają czas i dzielą się takimi rzeczami, jak zasoby sieciowe i pamięci masowej. Każdy Pod ma swoją unikalną nazwę i adres, dzięki czemu można je łatwo zidentyfikować i komunikować się z nimi.

    Wdrożenia są jak trenerzy, którzy zarządzają zespołem. Informują Kubernetes, ile odtwarzaczy (lub replik) każdego Poda powinno być uruchomionych w dowolnym momencie. Tak jak trener zarządza zawodnikami na boisku, Wdrożenie zarządza tworzeniem, skalowaniem i usuwaniem Podów, aby mieć pewność, że Twoja aplikacja jest zawsze w pożądanym stanie.

    Usługi są jak sędziowie, którzy pomagają graczom komunikować się ze sobą. Zapewniają stały adres, taki jak numer telefonu, za pomocą którego inni mogą uzyskać dostęp do Twojej aplikacji. Usługi wybierają odpowiednie kapsuły na podstawie etykiet, takich jak pozycja gracza, i równomiernie rozdzielają ruch między nimi, zapewniając każdemu równe szanse gry.

    Aby obsłużyć ważne informacje, takie jak hasła lub klucze API, Kubernetes udostępnia ConfigMaps i Secrets. Są jak skrytki, w których możesz bezpiecznie przechowywać te poufne dane, a następnie używać ich w swoich Podach i Wdrożeniach, aby uzyskać dostęp do zasobów bez ujawniania ich w postaci zwykłego tekstu.

    Wreszcie, serwer Kubernetes API jest jak infolinia coachingowa zespołu. Zapewnia łatwy sposób zarządzania stanem zespołu za pomocą RESTful API, z którym można wchodzić w interakcje za pomocą kubectl lub innych narzędzi Kubernetes. To tak, jakby mieć bezpośrednią linię do biura trenera, aby udzielać instrukcji lub otrzymywać aktualne informacje na temat wyników zespołu.

    Porównanie funkcji: Ansible i Kubernetes

    FeatureAnsibleKubernetesTypeNarzędzie do zarządzania i automatyzacji konfiguracjiPlatforma orkiestracji kontenerówCelAutomatyzacja zadań IT, takich jak zarządzanie konfiguracją, wdrażanie aplikacji i udostępnianie systemuAutomatyzacja wdrażania, skalowania i zarządzania konteneryzowanymi aplikacjamiArchitekturaBez agentów, wykorzystuje SSH lub WinRM do komunikacji z systemami docelowymiKonteneryzacja, wykorzystuje architekturę węzła głównegoKonfiguracjaNapisana w YAML, deklaratywna język Napisany w deklaratywnym języku YAML lub JSON Skalowalność Obsługuje zarówno małe, jak i duże infrastruktury Przeznaczony do wdrożeń na dużą skalę Wysoka dostępność Oparta na ściąganiu, w której kontenery są pobierane z rejestru kontenerów do węzłów docelowych Zapewnia wbudowane funkcje wysokiej dostępności z automatyczną zmianą harmonogramu kontenerów i przełączaniem awaryjnym węzłów Praca w sieci Zapewnia podstawowe funkcje sieciowe
    Zapewnia zaawansowane funkcje sieciowe, takie jak wykrywanie usług, równoważenie obciążenia i routing oparty na DNSDeploymentPush-based, w którym zmiany konfiguracji są przesyłane do systemów docelowych
    Używa TLS do komunikacji, zapewnia wbudowaną izolację kontenerów i RBAC do kontroli dostępu. Aktualizacje kroczące
    Obsługuje aktualizacje kroczące przy minimalnym przestoju
    Obsługuje aktualizacje stopniowe bez przestojów Kontrole kondycji
    Zapewnia podstawowe kontrole kondycji systemów docelowych
    Zapewnia zaawansowane kontrole kondycji kontenerów i automatyczne ponowne uruchamianie kontenerów Bezpieczeństwo Wykorzystuje SSH lub WinRM do komunikacji, wymaga odpowiedniego uwierzytelnienia i autoryzacji

    Umiarkowany do dużego, wymaga zrozumienia koncepcji konteneryzacji, sieci i systemów rozproszonychRozszerzenieZapewnia niestandardowe moduły do ​​rozszerzania funkcjonalności
    Zapewnia niestandardowe zasoby i operatorów do rozszerzania funkcjonalności Krzywa uczenia się

    Umiarkowany, wymaga znajomości języka YAML i podstawowych skryptów

    Umiarkowany do stromego, wymaga zrozumienia koncepcji konteneryzacji, sieci i systemów rozproszonych

    Zastosowania Kubernetesa

    Wdrażanie aplikacji

    Zarządzanie złożonymi aplikacjami w środowisku produkcyjnym wymaga bezbłędnego wykonywania wielu zadań w określonym czasie. Gdyby programiści wykonywali to zadanie ręcznie, wdrożenie aplikacji zajęłoby im tygodnie.

    Jednak korzystając z Kubernetes i konteneryzując aplikacje, mogą nie tylko wdrażać je i zarządzać nimi w klastrze maszyn, ale także zapewniać spójność i odtwarzalność. Mogą osiągnąć maksymalną wydajność, automatyzując zadania, takie jak planowanie, skalowanie i aktualizacje.

    Skalowalność i równoważenie obciążenia

    Aby aplikacja odniosła sukces, musi obsługiwać większe natężenie ruchu bez obniżania wydajności. Wbudowane funkcje Kubernetes dotyczące skalowalności i równoważenia obciążenia oferują najlepszą opcję.

    Rozdziela obciążenia w klastrze maszyn i automatycznie skaluje w górę lub w dół w zależności od zapotrzebowania, zapewniając wysoką dostępność. Co więcej, pomaga również przydzielać ruch przychodzący do wielu instancji.

    Wykrywanie usług i tworzenie sieci

    Większość aplikacji nie może działać samodzielnie. Muszą łączyć się z innymi aplikacjami lub usługami. Kubernetes oferuje funkcje sieciowe, które pomagają w nawiązaniu komunikacji między kontenerami w klastrze. Aplikacje mogą również wykrywać i łączyć się z innymi usługami działającymi w grupie za pośrednictwem narzędzia serwisowego opartego na DNS.

    Ciągłe aktualizacje i wycofywanie

    Dzięki Kubernetes aktualizacja aplikacji lub powrót do wcześniejszych wersji jest prosty. Automatyzuje proces i zapewnia bezproblemowe aktualizacje bez zakłócania dostępności aplikacji, umożliwiając stopniowe aktualizacje i wycofywanie z krótkimi przestojami.

    Zarządzanie infrastrukturą

    Kubernetes przyjmuje podejście deklaratywne, aby uprościć zarządzanie infrastrukturą. Pozwala użytkownikom definiować zasoby infrastruktury, takie jak pamięć masowa, sieć i obliczenia, jako kod za pomocą manifestów YAML lub JSON. Te manifesty lub pliki konfiguracyjne umożliwiają wersjonowanie, automatyzację, zarządzanie IaC (Infrastructure as Code) oraz usprawnienie zarządzania złożonymi konfiguracjami infrastruktury.

    Wdrażanie hybrydowe i wielochmurowe

    Kubernetes zmienia zasady gry dla organizacji poszukujących możliwości adaptacji i elastyczności w swoich wdrożeniach. Dzięki zastosowaniu spójnej warstwy abstrakcji wdrażanie i zarządzanie aplikacjami u różnych dostawców usług w chmurze lub w lokalnych centrach danych staje się wydajne.

    Umożliwia użytkownikom przyjęcie strategii hybrydowej lub wielochmurowej, wykorzystując elastyczność i przenośność kontenerów do wdrażania aplikacji i zarządzania nimi w różnych środowiskach.

    Ansible i Kubernetes – cykl życia oprogramowania

    Etap w SDLC Ansible KubernetesDevelopmentZapewnia automatyczne zarządzanie konfiguracją i wdrażanie środowisk programistycznych, umożliwia kontrolę wersji plików konfiguracyjnych i ułatwia wdrażanie kodu
    N/ATestingZapewnia zautomatyzowane udostępnianie i konfigurację środowisk testowych, umożliwia łatwą replikację środowisk i obsługuje zautomatyzowane zadania testowe
    N/ACiągła integracja/Ciągłe wdrażanie (CI/CD)
    Ułatwia automatyczne wdrażanie aplikacji i zmiany konfiguracji, umożliwia kontrolę wersji kodu infrastruktury oraz obsługuje potoki ciągłego dostarczania i wdrażania
    Ułatwia wdrażanie w kontenerach, skalowanie i zarządzanie aplikacjami, obsługuje aktualizacje stopniowe i wdrożenia bez przestojówStaging/Pre-production
    Zapewnia zautomatyzowane udostępnianie i konfigurację środowisk pomostowych, zapewnia spójność między środowiskami pomostowymi i produkcyjnymi oraz ułatwia testowanie środowisk podobnych do produkcyjnych
    Ułatwia wdrażanie w kontenerach i skalowanie aplikacji w środowiskach przedprodukcyjnych, umożliwia testowanie aplikacji w kontenerach w odizolowanym środowiskuProdukcjaUłatwia zautomatyzowane udostępnianie, konfigurowanie i zarządzanie środowiskami produkcyjnymi, umożliwia korzystanie z infrastruktury jako kodu (IaC) i wspiera wdrożenia produkcyjne
    Zapewnia wdrożenia kontenerowe, skalowanie i zarządzanie aplikacjami produkcyjnymi, oferuje wbudowane funkcje wysokiej dostępności i zaawansowane funkcje sieciowe Operacje/konserwacja
    Automatyzuje zarządzanie dryfem konfiguracji, ciągłe monitorowanie i egzekwowanie pożądanego stanu. Obsługuje kopie zapasowe, uaktualnienia i zadania operacyjne. Usprawnia zarządzanie aplikacjami, skalowanie, aktualizacje i zadania operacyjne, takie jak aktualizacje stopniowe i automatyczne ponowne uruchamianie aplikacji kontenerowych.
    Rozwiązywanie problemów/Debugowanie
    Umożliwia widoczność konfiguracji, rozwiązywanie problemów i wycofywanie zmian. Umożliwia widoczność aplikacji kontenera, rozwiązywanie problemów, debugowanie oraz dzienniki/diagnostykę.

    Przypadki użycia Ansibla

    Zespół IT zarządza dużą infrastrukturą z setkami serwerów w wielu centrach danych. Dzięki Ansible automatyzują spójne i bezpieczne konfiguracje i procesy serwera, takie jak zarządzanie użytkownikami, konfigurowanie zapór ogniowych i egzekwowanie zasad bezpieczeństwa.

    Serwery są pogrupowane według ról i środowisk, a regularne uruchamianie podręczników zapewnia ich aktualność i zgodność. Ansible upraszcza zarządzanie konfiguracją, ogranicza pracę ręczną i poprawia zgodność z wymogami bezpieczeństwa.

    Przypadki użycia Kubernetesa

    Zespół programistów tworzy aplikację internetową opartą na mikrousługach i wdraża ją za pomocą Kubernetes, konfigurując sieć, pamięć masową i kontenery za pomocą platformy Docker i manifestów. Skalowanie, równoważenie obciążenia, samonaprawianie i aktualizacje są obsługiwane przez Kubernetes. Skalowanie w górę lub w dół jest proste, co gwarantuje odporność na awarie i wysoką dostępność.

    Ten zasób wdrożenia Kubernetes wdraża aplikację internetową z 3 replikami. Etykiety wskazują, że instancje aplikacji i konfiguracje kontenerów są zdefiniowane w polu szablonu. Kubernetes zarządza skalowaniem, równoważeniem obciążenia, samonaprawianiem i stopniowymi aktualizacjami, tworząc skalowalną, odporną, odporną na błędy i wysoce dostępną aplikację.

    Administracja jest łatwiejsza dzięki kontenerom i Kubernetes, zapewniając jednolite wdrażanie i łatwe skalowanie. W razie potrzeby można dodać więcej konfiguracji dla sieci, pamięci masowej i innych potrzeb.

    Podsumowując

    Chociaż Ansible i Kubernetes to narzędzia do automatyzacji, bezpośrednie porównywanie ich ze sobą nie byłoby całkowicie sprawiedliwe. Ansible pomaga w zarządzaniu konfiguracjami i zadaniami w szerokim zakresie systemów, podczas gdy Kubernetes to bardziej orkiestracja kontenerów.

    Jeśli weźmiemy pod uwagę tradycyjną infrastrukturę IT, Ansible byłby właściwym wyborem do obsługi konfiguracji i wdrożeń. Jednak Kubernetes doskonale sprawdza się w nowoczesnych, natywnych środowiskach chmurowych i zarządzaniu aplikacjami kontenerowymi.

    Ponadto oba narzędzia mają swoje mocne strony i mogą znacznie usprawnić automatyzację IT i przepływy pracy związane z wdrażaniem w odpowiednich obszarach specjalizacji. Tak więc zrozumienie ich unikalnych celów i odpowiednie ich wykorzystanie może przynieść ogromną wartość Twojej działalności.