
Czym właściwie jest Kubernetes?
Czym jest Kubernetes? Dlaczego wszyscy o tym mówią? Dlaczego nikt nie potrafi mi tego wyjaśnić w prosty sposób?
Zacznijmy od początku. Kubernetes to platforma do zarządzania, automatyzacji i skalowania aplikacji. Cokolwiek by to nie znaczyło. Zacznijmy od samej nazwy. Słowo kubernetes pochodzi z greki i oznacza sternika albo pilota.
Pierwsza wersja została zaproponowana przez Google w 2014 roku, aktualnie jest rozwijana przez Cloud Native Computing Foundation. Można się spotkać z zapisem K8S będacym skrótem od pierwszej i ostatniej litery i 8 znaków pomiędzy nimi: KuberneteS.
Na początku był pod.
Na początek wyobraź sobie pudełko. Zwykłe kartonowe pudełko.

Co możemy o nim powiedzieć? Ma swoje wymiary, ma określoną pojemność. Do pudełka możemy włożyć co tylko chcemy, oczywiście jeżeli się tylko tam zmieści. Aby można było szybko określić jego przeznaczenie nadajmy mu kolor i etykietę.
Od tej pory, do pudełek w kolorze żółtym z etykietą A wsadzamy jedną konkretną rzecz, która idealnie tam pasuje. W naszym przypadku będzie to konkretna aplikacja. Co przez to rozumiem? Na przykład Wordpress w konkretnej wersji, z konkretnymi ustawieniami i zależnościami. W nomenklaturze Kubernetesa nazywa się to to Pod. Nazwa ta wzięła się od anglojęzycznego pod of whales lub pea pod (stado wielorybów / strączek grochu)i jest najmniejszą jednostką w strukturze K8S. Pod może mieć zdefiniowane przydzielone zasoby CPU/RAM (wymiary lub pojemność pudełka). Nie komplikując sprawy, Pod to nasze pudełko.
A co, jeżeli nasza kolekcja krawatów rozrasta się na tyle, że wszystkie nie mieszczą się w jednym pudełku? Możemy zmienić pudełko na większe, albo - co ma tutaj miejsce - możemy dodać drugie identyczne.Identyczne pod kątem wymiarów, nazwy, etykiety i koloru.
Chcąc wyciągnąć coś konkretnego, musimy zatem sprawdzić najpierw pierwsze, a jeżeli nie znajdziemy, drugie pudełko. W Kubernetesie, rolę takiego nadzorcy pełni Service.

Mamy więc grupę pudełek, które realizują dokładnie tą samą funkcjonalność. Ile pudełek może zawierać taka grupa i jak można tą ilością zarządzać? Żeby cokolwiek działało, musimy mieć minimalnie jedno pudełko - to jest oczywiste. Możemy na sztywno zdefiniować, że pudełek ma być na przykład 3. Ale należy pamiętać, że każde dodatkowe pudełko, nawet nieużywane, zajmuje nam przestrzeń. A co gdybyśmy mieli mechanizm, który w zależności od potrzeb, dodaje puste pudełka (repliki), lub usuwa jeżeli nie są potrzebne? W Kuberenetesie taki mechanizm nazywa się Horizontal Pod Autoscaling (HPA). Pierwszą rzeczą którą musimy zrobić, to zdefiniowanie dokładnych wymiarów pudełka (CPU/RAM). Następnie wskazujemy przedział ilości minimalnych i maksymalnych dla replik, na przykład minimum:1, maximum:3. Określamy również progi procentowe lub liczbowe po których przekroczeniu ma się dodać lub usunąć replika. Przykładowo, jeżeli zużycie procesora na istniejących kontenerach wzrośnie powyżej 70% - dodaj kolejną replikę, jeżeli spadnie poniżej - usuń. W ten sposób mamy dynamiczne zarządzanie ilością kontenerów w zależności od zużycia. Ile replik możemy mieć maksymalnie? W teorii nieskończoną ilość, w praktyce jest to ograniczone do rozmiaru klastra. Ale przejdziemy do tego później.
Czy jesteśmy skazani na pudełka o tym samym kolorze i rozmiarze? Absolutnie nie! Mamy pełną dowolność w dobieraniu pudełek do naszych potrzeb, co odzwierciedla swobodę w definiowaniu ich konfiguracji, rozmiarów i przeznaczenia.

Wszystkie opisane wcześniej mechanizmy mają zastosowanie do nowych grup kontenerów. Wracając do analogii, możemy mieć krawaty, skarpety, paski, spinki pogrupowane w pudełkach o różnych kolorach, etykietach i rozmiarach.
Przywołajmy raz jeszcze wcześniej wspomnianą szafę i spróbujmy zagospodarować jej wnętrze pudełkami, które udało nam się do tego pory przygotować.

Szafa reprezentuje fizyczne zasoby klastra. Jedna szafa to jeden serwer posiadający określone zasoby CPU/RAM i przestrzeni dyskowej - fachowo jest to Node (węzeł). Rozmiar szafy powinien zostać dobrany tak, aby największe z pudełek jakie posiadamy mogło się swobodnie zmieścić. W przypadku Kubernetesa, rozsądnym jest aby minimalnie były dwa Nody (szafy) - awaria jednego z nich nie spowoduje zaniku działania systemu.
W podstawowej konfiguracji, pudełka, które wsadzamy do szafy, mogą być rozłożone chaotycznie. Jedno pudełko ze skarpetami leży obok pudełka ze spinkami.

Dla Kubernetesa nie ma to większego znaczenia, pudełka układane są tam, gdzie będzie dostępne wolne miejsce. Dostęp do pudełek nie jest w żaden sposób uzależniony od miejsca w którym są one usytuowane. Nawet, jeżeli szaf jest dużo więcej.

Ale możemy to też bardziej zorganizować. Załóżmy, że chcemy mieć jednak każdy typ pudełek podzielony w taki sposób, żeby każda grupa była w jednym miejscu, oraz aby jedna grupa nie miała dostępu do drugiej.

Możemy postawić przegrodę w naszej szafie i drzwi zamykane na klucz. W Kubernetesie taką rolę pełni Namespace (przestrzeń nazw). Jest to logiczna separacja elementów składowych w celu uporządkowania i ograniczenia dostępu między elementami. Namespace może być użyty do separacji na przykład typów środowisk: development, test, stage.
W przypadku, gdy szaf mamy więcej, namespace nie ogranicza się do konkretnej szafy tylko całego zbioru, ale żeby nie zaciemniać, załóżmy że wygląda to tak, jak na poniższej ilustracji.

Podobnie jak z pudełkami, pojawia się pytanie ile możemy mieć naszych szaf i jak zarządzać ich ilością? Mamy dwie opcje: ilość węzłów zdefiniowana na stałe, oraz wskazanie minimum i maximum i przekazanie zarządzania aktualną ilością do systemu monitorowania zużycia zasobów. Przy czym ważna uwaga. Kubernetes sam z siebie nie ma mechanizmu autoskalowania. Duża część operatorów dająca Kubernetesa jako usługę ma takie mechanizmy wdrożone, ale zdarzają się również operatorzy, którzy tego mechanizmu nie mają.
Jak działa autoskalowanie całego klastra? Wszystko zaczyna się od pudełek. Badane jest aktualne zużycie zasobów i w razie potrzeby dodawane są kolejne pudełka (opisany wcześniej mechanizm HPA). Może zdarzyć się sytuacja, że potrzebne jest kolejne pudełko ale w szafie nie ma już miejsca. Kubernetes sygnalizuje wtedy że brakuje zasobów. Mechanizm autoskalowania wykrywa takie zdarzenie i zgodnie z konfiguracją dodaje kolejną szafę (serwer/wirtualną maszynę z dodatkowymi zasobami). Jeżeli z kolei zbędne pudełka są usuwane, w przypadku wykrycia, że dodatkowa szafa jest już zbędna - jest ona usuwana.

W teorii, ilość szaf jest nieskończona. W praktyce, w aktualnej wersji Kubernetesa mamy pewne ograniczenia:
- Nie więcej niż 110 pudełek w jednej szafie
- Nie więcej niż 5000 szaf
- Nie więcej niż 150000 pudełek w sumie
Osiągnięcie takich ilości w przypadku eCommerce jest bardzo trudne.
Czym zatem jest Kubernetes?

Czym zatem jest Kubernetes? Systemem orkiestracji kontenerów. W dużej liczbie przypadków, mimo iż cała architektura wydaje się być skomplikowana, upraszcza procesy i przyspiesza wdrożenia. Daje dużą skalowalność i modułowość. Jednocześnie otwiera możliwości, których osiągnięcie na zwyczajnych maszynach jest albo bardzo trudne, albo niemożliwe.