Konteneryzacja to dzisiejszy standard dostarczania aplikacji. Oferuje lekkie, wydajne i spójne środowisko do ich tworzenia i uruchamiania. Nie dziwi więc fakt, że wraz ze wzrostem popularności, wzrosła skala i złożoność tak tworzonych aplikacji.
Jednak rosnąca popularność konteneryzacji zrodziła potrzebę zapewnienia kompleksowego wsparcia narzędziowego w zarządzaniu kontenerami, na którą odpowiedzią było stworzenie Kubernetes (k8s) - nowego standardu dla uruchamiania, zarządzania i orkiestracji środowisk kontenerowych na dużą skalę. Czym jest Kubernetes i jak wiąże się z monitoringiem oraz obserwowalnością? Tego wszystkiego dowiecie się z poniższego tekstu!
Co to jest Kubernetes (k8s)?
Kubernetes to projekt open source, obecnie rozwijany w ramach CNCF (Cloud Native Computing Fundation). Jego podstawowa wersja, tzw. Vanilla Kubernetes, jest dostępna dla każdego. Otwartość platformy sprawiła, że w oparciu o wersję Vanilla powstało wiele kolejnych odmian, uwzględniających oprócz podstawowych funkcjonalności szeroką paletę rozszerzeń i udogodnień.
Dziś Kubernetes jest platformą, którą można wdrożyć samodzielnie na własnej infrastrukturze lub wykupić ją w formie usługi u dostawcy chmury publicznej. Najpopularniejsze edycje Kubernetes zarządzane przez dostawców public cloud to:
- Azure Kubernetes Service (AKS)
- Amazon Elastic Kubernetes Service (EKS)
- IBM Cloud Kubernetes Service
- Red Hat OpenShift
- Google Cloud Kubernetes Engine (GKE)
- Oracle Kubernetes Engine.
Lista dystrybucji wersji Kubernetes zarządzanych samodzielnie również jest szeroka i obejmuje zarówno edycje community, jak i dystrybucje komercyjne między innymi takie jak:
- Red Hat OpenShift Container Platform
- Rancher Kubernetes Engine
- Mirantis Docker Kubernetes Service
- VMWare Tanzu Kubernetes Grid.
Kubernetes rozwiązał wiele wyzwań związanych ze środowiskami rozproszonymi, takimi jak szybkość, skalowalność i odporność. Dodał jednak złożoności w zakresie zarządzania wydajnością aplikacji, uzyskiwania wglądu w usługi oraz wykrywania problemów, które wystąpiły lub mogą wystąpić. To sprawiło, że w projektowaniu architektury opartej o Kubernetes obowiązkowo pojawił się aspekt odpowiedniego monitoringu lub coraz częściej obserwowalności (ang. Observability).
Chcesz wiedzieć więcej o Kubernetes? Weź udział w webinarze: Kubernetes monitoring done right
Obserwowalność vs Monitoring
Chociaż obserwowalność i monitorowanie są ze sobą powiązane, warto mieć świadomość, że są to dwa odrębne pojęcia.
Monitoring
Monitorowanie koncentruje się na obserwacji określonych wskaźników pod kątem wykrywania potencjalnych problemów. Oparty jest na założeniu, że przewidzenie problemów przed ich wystąpieniem jest możliwe. Zebrane w procesie monitoringu dane zazwyczaj są analizowane w oderwaniu od szerszego kontekstu. Mówiąc prościej, monitoring pomaga określić, czy awaria wystąpi tam, gdzie się jej spodziewamy.
Takie podejście wprowadza znaczne ograniczenia w przypadku złożonych, szybkozmiennych środowisk np. cloud-native. Z uwagi na ich dynamikę i wielowarstwowość nie jest możliwe przewidzenie, jakiego typu problemy będzie można napotkać.
Obserwowalność
Dzięki wdrożeniu obserwowalności możliwe jest zrozumienie wewnętrznych stanów systemu oraz ich wpływu na całość infrastruktury. Dzięki temu możliwe jest uzyskanie informacji o tym, czy system zachowuje się zgodnie z oczekiwaniami, a w przypadku wykrycia anomalii wskazać przyczyny jej wystąpienia.
Obserwowalność, co do zasady, opiera się na łączeniu danych z różnych źródeł i kompleksowej analizie stanu systemu na bazie relacji między tym danymi. Uwzględnia ona znacznie szerszy kontekst niż monitoring, m.in. wpływ działania aplikacji na wskaźniki biznesowe. Im bardziej dojrzałe podejście do obserwowalności wybierzemy, tym bardziej kompleksowe spojrzenie na działanie aplikacji uzyskamy.
Obserwowalność powinna cechować się automatyzacją i autonomicznością – mieć wgląd na wszystko, łączyć fakty pochodzące z różnych źródeł i analizować je w szerszym kontekście. Najbardziej efektywne jest w tym przypadku wykorzystanie sztucznej inteligencji, a tutaj przewagę uzyskują narzędzia komercyjne.
Zobacz korzyści płynące z obserwowalności w praktyce - przeczytaj case study Kitopi!
Kubernetes a monitoring aplikacji
Głównymi wyzwaniami dla monitoringu jest wspominana wcześniej złożoność samej platformy, dynamicznie zmieniające się środowisko aplikacyjne oraz liczba komunikujących się ze sobą komponentów tworzonych w architekturze mikroserwisowej. Kubernetes jest kolejną warstwą znajdującą się pomiędzy infrastrukturą (fizyczną lub wirtualną), a usługami, które umożliwiają działanie aplikacji. Usługa może być dystrybuowana w wielu instancjach. Kontenery, na których jest oparta są krótkotrwałym bytem i przemieszczają się po infrastrukturze zgodnie z potrzebami. Gdy pojawiają się problemy, trudno jest wskazać ich przyczynę ze względu na to, że mogła ona wystąpić na jednej z wielu warstw.
Jak więc wykrywać i rozwiązywać problemy z ogromną ilością mikrousług działających w efemerycznych i jednorazowych kontenerach?
Kompleksowe Monitorowanie Kubernetes pozwala na obserwowanie wszystkich warstw i komponentów odpowiedzialnych za działanie skonteneryzowanych aplikacji, takich jak:
- Infrastruktura
Kubernetes i uruchamiane przez niego kontenery działają na warstwie wirtualnej i fizycznej. Ważne jest zrozumienie, jak infrastruktura wpływa na platformę oraz uruchomione na niej aplikacje. Niezależnie od tego, czy korzystamy z infrastruktury zarządzanej przez dostawców chmury publicznej, czy też własnej, potrzebujemy wglądu w dostępne i wykorzystywane przez nią zasoby.
- Platforma
Monitorowanie samej platformy Kubernetes to konieczność. Problemy na niej występujące, mogą kaskadowo wpływać na wydajność i funkcjonowanie osadzonych na niej usług, a także doprowadzić do ich niedostępności. Formą architektury wdrożenia platformy Kubernetes jest klaster. Składa się on z:
- Węzłów roboczych, które uruchamiają skonteneryzowane usługi;
- Węzłów, na których znajdują się komponenty zarządzające platformą.
Monitoring musi więc obejmować stan i kondycję klastra oraz poszczególnych węzłów wchodzących w jego skład. Należy śledzić wykorzystanie dostępnych zasobów oraz zdarzenia, które występują na jego poziomie.
- Workloady
W Kubernetes workload składa się z jednego lub wielu podów. Pod tworzy z kolei jeden lub większa liczba kontenerów. Workloady zarządzane są przez platformę i przyporządkowywane do tak zwanych przestrzeni nazw.
Tak jak potrzebujemy wglądu w ogólną kondycję, stan i utylizację zasobów klastra, tak samo pożądana jest informacja o uruchomionych na nim workloadów oraz ich składowych. Pozwoli ona określić, czy workloady uruchamiają się poprawnie i zgodnie z założeniami oraz czy działają stabilnie, a jeśli nie, to co jest tego przyczyną.
Obserwacja wykorzystania zasobów względem zadeklarowanych wartości dostarcza informacji, czy są one odpowiednio zdefiniowane. Zaangażowanie zbyt małych zasobów może być źródłem różnych problemów, takich jak ograniczenia przydziału czasu procesora dla usługi lub restartów jej kontenerów z powodu braku pamięci. Ich nadmiar może z kolei generować niepotrzebne koszty, zwłaszcza przy dużej skali.
- Aplikacja
Kubernetes nie posiada informacji o wewnętrznym stanie aplikacji. Nawet jeśli jako platforma nie wykazuje żadnych problemów, sama aplikacja może nie funkcjonować poprawnie lub może być obarczona problemami wydajnościowymi. Aplikacje zazwyczaj są budowane w architekturze mikroserwisowej lub wielowarstwowej z wieloma odrębnymi, komunikującymi się ze sobą komponentami. Dlatego też należy monitorować ich wewnętrzny stan, przebieg poszczególnych transakcji oraz zaangażowanych w nie komponentów. Zebrane dane są podstawą do rozpoznania lokalizacji oraz przyczyny problemów.
Co powinien zawierać monitoring?
Monitoring powinien zawierać przede wszystkim:
- Dane metryczne z hostów, klastra i jego węzłów, workloadów (podów i kontenerów) oraz usług aplikacji;
- Dane pozwalające na śledzenie transakcji, tzw. tracy;
- Logi skonteneryzowanych usług oraz logi systemowe;
- Informacje odnośnie zdarzeń występujących na platformie Kubernetes.
Narzędzia do monitoringu Kubernetes
Istnieje wiele rozwiązań służących do monitorowania Kubernetes, takich jak webowe konsole zarządzania dostępne wraz z platformą lub dostarczane komercyjnie. Zapewniają one wgląd w ogólny stan oraz kondycję platformy i jej workloadów, a także podstawową utylizację ich zasobów. Przykładami takich rozwiązań są Kubernetes Dashboard czy konsola OpenShift.
Możemy skorzystać z rozwiąń OpenSource. Najpopularniejszym rozwiązaniem jest Prometheus, który posłużyć może nam do zbierania i przechowywania metryk oraz alertowania. Ten de facto standard open source dla monitorowania k8s pozwala na kolekcjonowanie metryk udostępnianych przez platformę Kubernetes, metryk udostępnianych przez aplikacje oraz wielu innych dzięki dostępnym rozszerzeniom. Bardzo często wdrażany jest w połączeniu z Grafaną - narzędziem, które pozwala wizualizować i analizować dane pochodzące z wielu źródeł między innymi właśnie z Prometheusa. Rozwiązań typu FluentBit/FluentD możemy użyć do kolekcjonowania i przesyłania logów a przechowywać je w ElasticSearch, Loki. W śledzeniu transakcji pomóc może nam OpenTelemetry i Jaeger.
Oczywiście, istnieją także komercyjne platformy obserwowalności przeznaczone do monitoringu, które eliminują potrzebę wykorzystywania wielu odrębnych rozwiązań. Największą ich zaletą jest konsolidacja w jednym miejscu danych pochodzących z różnych źródeł, a następnie analiza zależności między nimi i ich wpływu na poszczególne warstwy. Takim rozwiązaniem jest np. Dynatrace. Dynatrace optymalizuje dodatkowo zakres wykrywania anomalii oraz proces analizy ich przyczyn. Oferuje także pełną obserwowalność, a także uwzględnia aspekty biznesowe, doświadczenia użytkowników końcowych oraz bezpieczeństwo.
Podsumowanie
W efektywnym monitorowaniu, zarządzaniu i ulepszaniu złożonych aplikacji opartych na mikrousługach, obserwowalność i monitorowanie mają kluczowe znaczenie.
Monitoring Kubernetes nie jest prostym zadaniem ze względu na jego złożoność, dynamikę zachodzących zmian oraz ilość i zróżnicowanie danych do analizy. Podczas jego projektowania należy uwzględnić wiele różnych aspektów, objąć nim wiele warstw i komponentów, nie zapominając przy tym o uwzględnieniu samej aplikacji, której obserwowanie jest często pomijane. Istnieje wiele podejść i narzędzi, które mogą pomóc Ci w monitorowaniu, od rozwiązań open source po kompleksowe dedykowane platformy komercyjne.
W kolejnych artykułach przedstawimy bardziej szczegółowo i technicznie jak działa Kubernetes oraz w jaki sposób podejść do jego monitorowania za pomocą różnych rozwiązań. A jeśli ta tematyka jest dla Ciebie interesująca i masz związane z nią pytania po prostu skontaktuj się z nami.