Co to jest kubernetes (k8s)?

Autor: Opublikowano

W skrócie: Kubernetes, w skrócie K8s, to otwarta platforma do uruchamiania i zarządzania aplikacjami w kontenerach. Pilnuje, aby działała zadana liczba ich kopii, zastępuje niedostępne instancje i ułatwia wdrażanie nowych wersji. Przydaje się przy rozbudowanych systemach, ale dla prostej strony lub niewielkiej aplikacji jego utrzymanie może być bardziej skomplikowane niż sam hosting.

Od kontenera do zarządzania aplikacją

Kontener to odizolowane środowisko uruchomienia procesu aplikacji. Powstaje z obrazu kontenera, czyli pakietu zawierającego kod, potrzebne biblioteki i ustawienia startowe. Dzięki temu tę samą wersję aplikacji można uruchamiać w różnych zgodnych środowiskach bez ręcznego instalowania wszystkich zależności.

Pojedynczy kontener jest stosunkowo łatwy do uruchomienia. Trudności pojawiają się, gdy trzeba obsłużyć wiele aplikacji, rozmieścić je na kilku serwerach, aktualizować bez długich przerw i reagować na awarie. Kubernetes automatyzuje część tych zadań — takie zarządzanie nazywa się orkiestracją kontenerów.

Nazwa K8s jest skrótem słowa Kubernetes: między literami „K” i „s” znajduje się osiem liter. Nie oznacza osobnego produktu ani innej wersji platformy.

Jak działa Kubernetes: klaster, węzły i pody

Klaster to środowisko Kubernetes składające się z warstwy zarządzającej i węzłów uruchamiających aplikacje. Węzeł, po angielsku node, jest maszyną fizyczną lub wirtualną. W małym środowisku testowym wszystkie elementy mogą działać na jednym komputerze.

Warstwa zarządzająca, czyli control plane, przechowuje konfigurację i koordynuje pracę klastra. Decyduje między innymi, gdzie uruchomić aplikację. Oprogramowanie działające na węzłach wykonuje te polecenia i przekazuje informacje o stanie uruchomionych zadań.

Kubernetes działa na zasadzie stanu oczekiwanego. Zamiast ręcznie uruchamiać każdą kopię aplikacji, deklarujesz na przykład: „mają działać trzy kopie tej wersji”. System stale porównuje tę deklarację z rzeczywistością i próbuje usuwać różnice.

Do zrozumienia podstaw wystarczą cztery pojęcia:

Konfigurację często zapisuje się w plikach YAML, czyli czytelnym formacie danych tekstowych. Do pracy z klastrem służy między innymi narzędzie wiersza poleceń kubectl.

Co dzieje się podczas awarii i aktualizacji

Wyobraź sobie sklep internetowy, którego część obsługująca zapytania działa w trzech podach na kilku węzłach. Deployment określa liczbę kopii, a Service kieruje ruch do dostępnych podów. Jeśli jeden pod przestanie działać, Kubernetes dąży do uruchomienia jego zastępstwa.

To nie oznacza natychmiastowej ani bezwarunkowej naprawy. Klaster musi mieć wolne zasoby, dostęp do obrazu aplikacji i działającą infrastrukturę. Jeśli aplikacja ma błąd powodujący awarię przy każdym starcie, ponowne uruchamianie poda nie usunie przyczyny.

Podczas aktualizacji Kubernetes może stopniowo zastępować stare pody nowymi. Testy gotowości, czyli skonfigurowane sprawdzenia zdolności aplikacji do obsługi żądań, pomagają nie kierować ruchu do kopii, która jeszcze się uruchamia. Wdrożenie bez przerwy wymaga jednak odpowiedniej konfiguracji i konstrukcji aplikacji — nie jest automatyczną gwarancją platformy.

Podobnie wygląda skalowanie. Kubernetes pozwala zmieniać liczbę kopii, a po skonfigurowaniu mechanizmu automatycznego skalowania może robić to na podstawie metryk, takich jak wykorzystanie procesora. Dodanie podów nie przyspieszy jednak przeciążonej bazy danych ani innego wspólnego wąskiego gardła.

Czego Kubernetes nie zastępuje

Kubernetes nie tworzy obrazów aplikacji i nie zastępuje całego procesu testowania oraz publikowania kodu. Nie jest też synonimem Dockera. Narzędzia Docker pomagają między innymi budować i lokalnie uruchamiać kontenery, natomiast Kubernetes zarządza ich działaniem w klastrze, korzystając z odpowiedniego środowiska uruchomieniowego, na przykład containerd.

Platforma nie zapewnia sama z siebie kompletnego monitoringu, kopii zapasowych ani bezpieczeństwa aplikacji. Trzeba zaplanować uprawnienia, aktualizacje, zbieranie logów i ochronę danych uwierzytelniających. Dostęp z internetu wymaga również odpowiedniej konfiguracji sieci i zwykle dodatkowych komponentów lub usług dostawcy.

Szczególnej uwagi wymagają dane. Pod może zniknąć i zostać odtworzony, dlatego pliki wymagające trwałości nie powinny pozostawać wyłącznie w zapisywalnej warstwie kontenera. Kubernetes obsługuje trwałe wolumeny, lecz ich użycie nie zastępuje kopii zapasowej ani sprawdzonej procedury odtwarzania.

Kiedy wdrożenie K8s ma sens

Kubernetes warto rozważyć, gdy utrzymujesz wiele usług, często je wdrażasz, potrzebujesz niezależnego skalowania i masz zespół zdolny obsługiwać platformę. Wspólny sposób konfiguracji i wdrażania może wtedy ograniczyć liczbę ręcznych operacji.

Dla bloga, strony firmowej lub jednej niewielkiej aplikacji prostszy hosting, serwer wirtualny albo zarządzana platforma aplikacyjna często oznacza mniej obowiązków. To ocena praktyczna, nie ograniczenie techniczne: małą aplikację da się uruchomić w Kubernetes, ale korzyści mogą nie równoważyć nakładu pracy.

Zarządzany Kubernetes przenosi część obowiązków na dostawcę, lecz ich zakres zależy od usługi. Przed wyborem sprawdź w oficjalnej dokumentacji i cenniku odpowiedzialność za aktualizacje, dostępność warstwy zarządzającej oraz opłaty za serwery, dyski, sieć i dodatkowe komponenty.

Jeśli dopiero poznajesz K8s, uruchom lokalny klaster testowy, na przykład przez kind lub minikube. Wdróż prostą aplikację z dwiema kopiami i usuń jeden pod. Obserwacja, jak system go zastępuje, pozwala zrozumieć podstawowy mechanizm bez budowania infrastruktury produkcyjnej.

Zobacz też: Co to jest 2FA?

Przeczytaj także

Dowiedz się, jak PHP-FPM obsługuje żądania PHP, czym różni się od serwera WWW i jak dobrać ustawienia procesów do ruchu oraz zasobów hostingu.
Poznaj BIND, otwarte oprogramowanie serwera DNS: sprawdź, jak obsługuje domeny, czym różnią się jego role i kiedy warto samodzielnie go wdrożyć.
Poznaj najważniejsze Security Headers, ich rolę w ochronie strony oraz sposób sprawdzania i wdrażania nagłówków bez blokowania potrzebnych funkcji.