W pierwszym module nauczyliśmy się zarządzać pojedynczymi kontenerami za pomocą Dockera i Podmana. To świetny start, ale co się stanie, gdy nasza aplikacja urośnie i będziemy musieli zarządzać nie jednym, a dziesiątkami, setkami, a nawet tysiącami kontenerów?
Ręczne zarządzanie taką skalą jest niemożliwe. Potrzebujemy systemu, który zrobi to za nas. I tu na scenę wkracza Kubernetes.
Czym jest Kubernetes?
Najprościej mówiąc, Kubernetes (często skracany do K8s) to system do orkiestracji kontenerów.
Wyobraź sobie orkiestrę. Każdy muzyk (kontener) gra swoją partię. Orkiestrator, czyli dyrygent (Kubernetes), dba o to, by wszyscy grali razem, w odpowiednim tempie, reaguje na problemy (np. gdy ktoś zemdleje) i zapewnia, że cała symfonia (Twoja aplikacja) brzmi doskonale.
Kubernetes to “system operacyjny dla chmury”, który automatyzuje wdrażanie, skalowanie i zarządzanie aplikacjami kontenerowymi. Jego główne zadania to:
- Planowanie (Scheduling): Decyduje, na której maszynie (nazywanej Węzłem) uruchomić dany kontener, biorąc pod uwagę dostępne zasoby.
- Samonaprawianie (Self-healing): Jeśli kontener ulegnie awarii, Kubernetes automatycznie go zrestartuje. Jeśli cała maszyna przestanie działać, kontenery z niej zostaną uruchomione na innej, zdrowej maszynie.
- Skalowanie (Scaling): Automatycznie zwiększa lub zmniejsza liczbę działających kontenerów w odpowiedzi na zmieniające się obciążenie.
- Wykrywanie usług i Równoważenie obciążenia (Service Discovery & Load Balancing): Pomaga kontenerom odnajdywać się nawzajem i rozdziela ruch sieciowy pomiędzy nimi, aby żaden pojedynczy kontener nie był przeciążony.
- Automatyczne wdrożenia i wycofywanie zmian (Rollouts & Rollbacks): Pozwala na aktualizację aplikacji bez przerw w działaniu (tzw. zero-downtime deployment), a w razie problemów umożliwia szybki powrót do poprzedniej, stabilnej wersji.
Kubernetes został stworzony przez Google (bazując na ich wewnętrznym systemie Borg), a obecnie jest projektem open-source rozwijanym pod egidą Cloud Native Computing Foundation (CNCF).
Architektura w wielkim skrócie
Na tym etapie nie musimy znać każdego szczegółu, ale warto poznać podstawowy podział ról w klastrze Kubernetesa.
Klaster to po prostu zbiór maszyn, którymi zarządza Kubernetes. Dzielą się one na dwie role:
- Control Plane (Płaszczyzna Sterowania): To jest “mózg” klastra. Zazwyczaj jest to jeden lub kilka komputerów (dla wysokiej dostępności), które podejmują wszystkie globalne decyzje. To tutaj znajduje się m.in. API Server – główna “brama”, przez którą komunikujemy się z klastrem.
- Worker Nodes (Węzły Robocze): To są maszyny (fizyczne lub wirtualne), na których faktycznie uruchamiane są Twoje kontenery. Każdy Węzeł Roboczy ma zainstalowanego agenta (
kubelet), który komunikuje się z Control Plane i wykonuje jego polecenia.
Można to porównać do firmy: Control Plane to zarząd, który decyduje, co ma być zrobione. Węzły Robocze to pracownicy, którzy wykonują zadania zlecone przez zarząd.
Model Deklaratywny: Klucz do zrozumienia K8s
To najważniejsza koncepcja, jaką musisz zrozumieć. Dotychczas, używając docker run, wydawaliśmy polecenia w trybie imperatywnym – mówiliśmy systemowi “zrób to”, “uruchom to”.
Kubernetes działa w modelu deklaratywnym. Zamiast mówić mu, co ma zrobić, opisujemy pożądany stan naszej aplikacji.
- Imperatywnie: “Uruchom kontener z obrazu nginx.”
- Deklaratywnie: “Chcę, aby w moim klastrze zawsze działały 3 repliki kontenera nginx w wersji 1.21.”
Ten pożądany stan opisujemy w plikach konfiguracyjnych (najczęściej w formacie YAML). Następnie wysyłamy taki plik do API Servera Kubernetesa. Od tego momentu Kubernetes w nieskończonej pętli (tzw. reconciliation loop) porównuje stan pożądany ze stanem rzeczywistym i podejmuje działania, aby je do siebie dopasować.
- Działa za mało kontenerów? Uruchomi nowe.
- Kontener uległ awarii? Zastąpi go nowym.
- Wdrożyliśmy nową wersję i coś poszło nie tak? Możemy wrócić do poprzedniego stanu pożądanego.
Podsumowanie
Kubernetes to potężny system do orkiestracji kontenerów, który automatyzuje wiele aspektów zarządzania aplikacjami. Jego architektura opiera się na podziale ról na Control Plane i Węzły Robocze, a jego działanie opiera się na modelu deklaratywnym, w którym opisujemy pożądany stan systemu.
W następnej lekcji zainstalujemy narzędzia, które pozwolą nam stworzyć nasz pierwszy, lokalny klaster Kubernetes i zacząć wydawać mu polecenia!