Logo Kubernetes

Kubernetes: przewodnik po orkiestracji kontenerów

Kubernetes (często skracany do K8s) to platforma open-source, która jest de facto standardem w dziedzinie orkiestracji kontenerów. Stworzony pierwotnie przez Google, Kubernetes automatyzuje wdrażanie, skalowanie i zarządzanie aplikacjami skonteneryzowanymi. Podczas gdy narzędzia takie jak Docker pozwalają na uruchamianie pojedynczych kontenerów, Kubernetes rozwiązuje problem zarządzania setkami lub tysiącami kontenerów w środowisku produkcyjnym, tworząc z wielu serwerów jeden, spójny i odporny na awarie klaster dla złożonych systemów internetowych.

Architektura klastra kubernetes

Klaster Kubernetes składa się z dwóch głównych typów maszyn (węzłów), które współpracują ze sobą, aby utrzymać pożądany stan aplikacji.

  • Control plane (płaszczyzna sterowania): To mózg całego klastra. Odpowiada za podejmowanie globalnych decyzji, harmonogramowanie zadań i monitorowanie stanu systemu. Składa się z komponentów takich jak `kube-apiserver`, `etcd` (baza danych klastra) i `kube-scheduler`.
  • Węzły robocze (worker nodes): To maszyny (fizyczne lub wirtualne), na których faktycznie uruchamiane są kontenery z aplikacjami. Każdy węzeł roboczy posiada agenta o nazwie `kubelet`, który komunikuje się z Control Plane i zarządza cyklem życia kontenerów na danym węźle.

Podstawowe obiekty i abstrakcje

Praca z Kubernetesem polega na definiowaniu pożądanego stanu systemu za pomocą obiektów API. Do najważniejszych z nich należą:

  • Pod: Najmniejsza i podstawowa jednostka wdrożeniowa. Jest to logiczna otoczka dla jednego lub więcej kontenerów, które współdzielą zasoby sieciowe i pamięci masowej. Zazwyczaj jeden pod zawiera jeden kontener aplikacyjny, co jest kluczowe w architekturze mikroserwisów.
  • Service: Abstrakcja, która definiuje logiczny zbiór podów i politykę dostępu do nich. Service zapewnia stały adres IP i wpis DNS, co umożliwia komunikację i równoważenie obciążenia (load balancing) między podami, nawet jeśli ulegają one awarii i są odtwarzane.
  • Deployment: Obiekt, który w sposób deklaratywny zarządza podami. Pozwala na definiowanie pożądanej liczby replik aplikacji, realizację aktualizacji w sposób kontrolowany (rolling updates) bez przestojów oraz łatwe skalowanie aplikacji internetowych.

Przykład kodu - definicja deploymentu

Poniżej znajduje się prosty przykład pliku YAML, który definiuje Deployment dla serwera Nginx, zapewniając, że w klastrze zawsze będą działać 3 repliki.


apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21.6
        ports:
        - containerPort: 80

Główne zalety kubernetesa

Wdrożenie Kubernetesa w projekcie, zwłaszcza gdy jest to duży system na zamówienie, przynosi szereg korzyści:

  • Samonaprawianie (self-healing): Kubernetes automatycznie restartuje kontenery, które uległy awarii, i przenosi je na inne węzły, jeśli cała maszyna przestaje odpowiadać.
  • Automatyczne skalowanie (auto-scaling): Możliwość automatycznego dostosowywania liczby uruchomionych kontenerów w zależności od aktualnego obciążenia (np. użycia CPU).
  • Zautomatyzowane wdrożenia: Kontrolowane wdrażanie nowych wersji aplikacji (rollouts) i możliwość natychmiastowego powrotu do poprzedniej, stabilnej wersji (rollbacks) w razie problemów.

Podsumowanie

Podsumowując, Kubernetes stał się fundamentalnym narzędziem w nowoczesnym IT. Jego zdolność do automatyzacji, skalowania i zarządzania złożonymi aplikacjami sprawia, że jest to kluczowa technologia dla firm, które chcą budować niezawodne i skalowalne systemy w chmurze.

Przydatne linki

Oficjalna Dokumentacja Kubernetes

Oficjalny Blog Kubernetes