Automatyzacja / DevOps5 kwietnia 2025

Kubernetes Co To Jest: Od Zera do Pierwszego Klastra [Krok po Kroku]

Kubernetes (K8s) od podstaw: architektura, pody, deploymenty, serwisy. Tworzenie klastra minikube, kubectl i pliki YAML. Orkiestracja kontenerów 2025.

#kubernetes#k8s#kontenery#docker#devops#minikube#kubectl#orkiestracja
Kubernetes K8s - orkiestracja kontenerów i klastry

Kubernetes co to jest – to pytanie zadaje sobie coraz więcej programistów i administratorów systemów, stojących przed wyzwaniem zarządzania aplikacjami kontenerowymi. W dzisiejszym świecie, gdzie aplikacje stają się coraz bardziej złożone, tradycyjne metody wdrażania i zarządzania już nie wystarczają.


Co to jest Kubernetes: Podstawowe pojęcia i zastosowania

Definicja i pochodzenie nazwy Kubernetes

Kubernetes to otwarte oprogramowanie automatyzujące wdrażanie, skalowanie i zarządzanie aplikacjami kontenerowymi. Nazwa pochodzi z greckiego i oznacza "sternika" lub "pilota" – trafna metafora dla systemu sterującego kontenerami w klastrze.

Projekt został opracowany przez Google, bazując na wewnętrznym systemie Borg. W 2014 roku Google udostępnił Kubernetes jako projekt open source, przekazując go pod opiekę Cloud Native Computing Foundation (CNCF).

W praktyce, Kubernetes to system pozwalający uruchamiać wiele kontenerów na wielu maszynach fizycznych lub wirtualnych, zapewniając mechanizmy do wdrażania, utrzymania i skalowania aplikacji.

Dlaczego Kubernetes stał się standardem w orkiestracji kontenerów

Kubernetes rozwiązuje kluczowe problemy zarządzania kontenerami w środowisku produkcyjnym:

  1. Automatyczne skalowanie – system automatycznie zwiększa lub zmniejsza liczbę kontenerów zależnie od obciążenia
  2. Samonaprawianie – monitoring i automatyczny restart kontenerów w razie awarii
  3. Równoważenie obciążenia – automatyczna dystrybucja ruchu sieciowego między kontenery
  4. Aktualizacje bez przestojów – możliwość aktualizacji aplikacji bez przerywania jej działania
  5. Deklaratywna konfiguracja – zamiast definiować kroki, określasz pożądany stan systemu

Kubernetes działa w różnych środowiskach – od lokalnych klastrów po chmury publiczne, co pozwala uniknąć uzależnienia od jednego dostawcy.

Porównanie z innymi narzędziami (Docker Swarm, Apache Mesos)

Docker Swarm:

  • Zalety: łatwy w konfiguracji, zintegrowany z Docker, niski próg wejścia
  • Wady: mniej zaawansowane funkcje, ograniczona skalowalność

Docker Swarm wybierano do mniejszych projektów, ale wraz z rosnącymi wymaganiami wiele organizacji przechodzi na Kubernetes.

Apache Mesos:

  • Zalety: wysoka skalowalność, obsługa różnych frameworków
  • Wady: bardziej złożona konfiguracja, wyższy próg wejścia

Mesos obsługuje większą różnorodność obciążeń niż Kubernetes, który koncentruje się głównie na kontenerach. Jednak Kubernetes oferuje równowagę między mocą a użytecznością oraz bogatszy ekosystem narzędzi.


Architektura klastra Kubernetes dla początkujących

Węzły master i worker – różnice i zadania

Klaster Kubernetes składa się z węzłów master (kontrolnych) i worker (roboczych).

Węzły master pełnią funkcję "mózgu" klastra, podejmując globalne decyzje o wdrożeniach, skalowaniu i zarządzaniu zasobami. W środowisku produkcyjnym zazwyczaj istnieje wiele węzłów master dla zapewnienia wysokiej dostępności.

Węzły worker wykonują faktyczną pracę – na nich uruchamiane są kontenery z aplikacjami. Zawierają narzędzia do komunikacji z master oraz zarządzania kontenerami.

Różnica jest zatem prosta: węzły master zarządzają, węzły worker wykonują zadania.

Kluczowe komponenty klastra (etcd, API Server, Scheduler)

API Server stanowi centralny punkt komunikacji w klastrze. Wszystkie instrukcje, zapytania i komunikacja między komponentami przechodzą przez niego, obsługując zarówno żądania wewnętrzne, jak i zewnętrzne od użytkowników.

etcd to rozproszona baza danych typu klucz-wartość przechowująca wszystkie dane klastra. Można ją porównać do "rejestru stanu" – zawiera informacje o wszystkich obiektach Kubernetes, ich konfiguracji i statusie.

Scheduler odpowiada za przydzielanie podów do odpowiednich węzłów worker. Analizuje wymagania zasobów, bieżące obciążenie węzłów oraz ograniczenia, aby podjąć optymalną decyzję.

Dodatkowo, w control plane działają:

  • Controller Manager – monitoruje stan klastra i reaguje na zmiany
  • Cloud Controller Manager – integruje klaster z usługami dostawcy chmury

Na węzłach worker działają:

  • Kubelet – agent zarządzający kontenerami
  • Kube-proxy – zarządza sieciami i regułami przekierowania
  • Container Runtime – oprogramowanie wykonujące kontenery (np. Docker)

Przestrzenie nazw (Namespaces) i ich praktyczne zastosowanie

Przestrzenie nazw pozwalają podzielić jeden fizyczny klaster Kubernetes na wiele wirtualnych klastrów. Jest to szczególnie przydatne, gdy wiele zespołów lub projektów korzysta z tego samego klastra.

Praktyczne zastosowania:

  1. Izolacja środowisk – oddzielne przestrzenie dla deweloperskich, testowych i produkcyjnych
  2. Podział zasobów – każdej przestrzeni można przypisać limity zasobów (CPU, pamięć)
  3. Kontrola dostępu – zdefiniowanie, którzy użytkownicy mają dostęp do konkretnych przestrzeni

Przestrzenie nazw działają doskonale w dużych organizacjach, gdzie administrator może nadać uprawnienia poszczególnym zespołom tylko do ich przestrzeni, bez ryzyka kolizji nazw zasobów czy wpływu na inne aplikacje.

Pamiętajmy, że nie wszystkie obiekty Kubernetes są ograniczone do przestrzeni nazw – niektóre, jak węzły czy trwałe woluminy, są globalne dla całego klastra.


Przygotowanie środowiska do instalacji pierwszego klastra

Wymagania sprzętowe i programowe

Aby uruchomić klaster Kubernetes, nawet w wersji lokalnej i testowej, potrzebujemy:

Zasoby sprzętowe:

  • Procesor: 2 rdzenie CPU (4 rdzenie zalecane)
  • Pamięć RAM: minimum 2 GB dedykowane dla Kubernetes (4 GB lub więcej zalecane)
  • Dysk: minimum 20 GB wolnej przestrzeni
  • Łącze internetowe: do pobrania komponentów

To są wymagania dla środowiska deweloperskiego z minikube. Klastry produkcyjne wymagają znacznie więcej zasobów.

Wymagania programowe:

  • System operacyjny: Linux, macOS lub Windows 10/11
  • Włączona wirtualizacja: VT-x/AMD-v w BIOS/UEFI
  • Menedżer wirtualizacji: Hyperkit (macOS), Hyper-V (Windows), KVM (Linux) lub VirtualBox

Instalacja niezbędnych narzędzi (kubectl, minikube)

Kubectl to narzędzie wiersza poleceń służące do komunikacji z klastrem Kubernetes. Działa jak most między użytkownikiem a API Kubernetes.

Instalacja na Linux (Ubuntu/Debian):

sudo apt update
sudo apt install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubectl

Na macOS (z Homebrew):

brew install kubectl

Na Windows (z Chocolatey):

choco install kubernetes-cli

Minikube pozwala utworzyć jednowęzłowy klaster Kubernetes na lokalnym komputerze. Jest doskonałym narzędziem do nauki, testowania i rozwoju aplikacji.

Instalacja na Linux:

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

Na macOS:

brew install minikube

Na Windows:

choco install minikube

Po instalacji warto sprawdzić poprawność:

kubectl version --client
minikube version

Konfiguracja systemu operacyjnego

Przed uruchomieniem klastra Kubernetes:

  1. Włączenie wirtualizacji – upewnij się, że wirtualizacja jest włączona w BIOS/UEFI
  2. Konfiguracja zapory sieciowej – dodaj wyjątki dla portów używanych przez Kubernetes (zazwyczaj 6443 dla API serwera oraz porty 30000-32767 dla NodePort)
  3. Docker (opcjonalnie) – chociaż minikube może używać containerd, instalacja Dockera ułatwia pracę:
sudo apt install docker.io
sudo usermod -aG docker $USER
  1. Parametry systemowe dla Linux:
# Wyłączenie swap
sudo swapoff -a

# Włączenie przekazywania pakietów
echo "net.bridge.bridge-nf-call-iptables=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl --system

Dla Windows 10/11, należy upewnić się, że funkcja Hyper-V jest włączona lub zainstalować VirtualBox.


Tworzenie lokalnego klastra Kubernetes krok po kroku

Uruchomienie minikube i weryfikacja działania

Uruchamiamy minikube:

minikube start

To polecenie tworzy wirtualną maszynę i konfiguruje pojedynczy węzeł klastra. Proces może potrwać kilka minut ze względu na pobieranie potrzebnych obrazów kontenerów.

Po zakończeniu weryfikujemy, czy klaster działa:

kubectl cluster-info

Sprawdzamy stan węzłów:

kubectl get nodes

Powinniśmy zobaczyć jeden węzeł o statusie "Ready", oznaczający gotowość klastra do przyjmowania zadań.

Konfiguracja pierwszego Deploymentu

Kubernetes deployment definiuje pożądany stan dla podów oraz określa, ile replik aplikacji powinno działać.

Tworzymy plik first-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hello-kubernetes
  template:
    metadata:
      labels:
        app: hello-kubernetes
    spec:
      containers:
      - name: hello-kubernetes
        image: paulbouwer/hello-kubernetes:1.8
        ports:
        - containerPort: 8080

Wdrażamy aplikację:

kubectl apply -f first-deployment.yaml

Sprawdzamy stan:

kubectl get deployments
kubectl get pods

Ekspozycja aplikacji przy użyciu Service

Aby uzyskać dostęp do aplikacji, musimy ją wyeksponować za pomocą obiektu Service.

Tworzymy plik hello-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: hello-kubernetes
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: hello-kubernetes

Wdrażamy usługę:

kubectl apply -f hello-service.yaml

Aby uzyskać adres URL:

minikube service hello-kubernetes --url

Otrzymamy adres, pod którym aplikacja jest dostępna. Używając przeglądarki, możemy odwiedzić ten adres i zobaczyć działającą aplikację.

Właśnie stworzyliśmy działający klaster Kubernetes z uruchomioną aplikacją. Ten przykład pokazuje podstawowy przepływ pracy: uruchomienie klastra, wdrożenie aplikacji i udostępnienie jej użytkownikom.


Zarządzanie aplikacjami w klastrze Kubernetes

Skalowanie aplikacji przy użyciu ReplicaSet

ReplicaSet zapewnia utrzymanie stałej liczby podów danej aplikacji. Skalowanie sprowadza się do zmiany liczby replik:

kubectl scale deployment hello-kubernetes --replicas=5

To zwiększy liczbę podów do pięciu. Można również skonfigurować automatyczne skalowanie na podstawie obciążenia:

kubectl autoscale deployment hello-kubernetes --min=2 --max=10 --cpu-percent=80

Teraz klaster samodzielnie dostosuje liczbę podów w zależności od wykorzystania CPU.

Aktualizacja aplikacji bez przestojów

Jedną z głównych zalet Kubernetes jest możliwość aktualizacji aplikacji bez przerywania jej działania – proces zwany rolling update:

kubectl set image deployment/hello-kubernetes hello-kubernetes=paulbouwer/hello-kubernetes:1.9

Alternatywnie, można zaktualizować plik YAML deploymentu:

kubectl apply -f updated-deployment.yaml

Kubernetes stopniowo zastępuje stare pody nowymi, utrzymując dostępność aplikacji.

Monitorowanie stanu klastra i aplikacji

Do monitorowania klastra Kubernetes wykorzystujemy podstawowe komendy:

kubectl get pods        # Lista podów
kubectl get services    # Lista usług
kubectl get deployments # Lista wdrożeń

Szczegółowe informacje o podzie:

kubectl describe pod [nazwa-poda]

Podgląd logów aplikacji:

kubectl logs [nazwa-poda]

Dla bardziej zaawansowanego monitorowania warto rozważyć narzędzia takie jak Prometheus i Grafana.

Rozwiązywanie podstawowych problemów

Podczas pracy z klastrem Kubernetes możemy napotkać typowe problemy:

  1. Pod w stanie "Pending" – zazwyczaj oznacza brak wystarczających zasobów. Sprawdź dostępność zasobów:
kubectl describe node
  1. Pod w stanie "CrashLoopBackOff" – aplikacja ulega awarii i jest ponownie uruchamiana. Sprawdź logi:
kubectl logs [nazwa-poda]
  1. Problemy z połączeniem sieciowym – sprawdź konfigurację serwisów:
kubectl get svc
kubectl describe svc [nazwa-usługi]
  1. Problemy z obrazami kontenerów – upewnij się, że obraz jest dostępny i poprawnie oznaczony. Możesz spróbować pobrać go ręcznie na węźle.

W zarządzaniu aplikacjami w klastrze Kubernetes kluczowa jest znajomość podstawowych komend i zrozumienie działania zasobów platformy.


Wnioski

Podsumowując naszą podróż przez świat Kubernetes, przedstawiliśmy kompleksowy obraz tej potężnej platformy orkiestracji kontenerów. Poznaliśmy fundamentalne pojęcia, architekturę klastra, komponenty kontrolne, a także praktyczne aspekty wdrażania aplikacji.

Praktyczne doświadczenie z utworzeniem pierwszego klastra wykazało, że Kubernetes, mimo złożoności, staje się przystępny przy odpowiednim podejściu krok po kroku. Szczególną uwagę poświęciliśmy narzędziom kubectl i minikube, stanowiącym punkt wejścia do pracy z tą technologią.

Zgłębiliśmy kluczowe aspekty zarządzania aplikacjami, włączając skalowanie, aktualizacje bez przestojów oraz rozwiązywanie typowych problemów. Wiedza ta pozwala efektywnie wykorzystywać możliwości Kubernetes w codziennej pracy deweloperskiej.

Kubernetes stał się standardem nie bez powodu – jego elastyczność, skalowalność i bogaty ekosystem narzędzi sprawiają, że świetnie sprawdza się zarówno w małych projektach, jak i dużych wdrożeniach produkcyjnych. Jeśli potrzebujesz pomocy przy wdrożeniu Kubernetes lub automatyzacji procesów DevOps, skontaktuj się z nami. W FoxLink Automation pomagamy firmom w konteneryzacji aplikacji i zarządzaniu infrastrukturą.

Potrzebujesz pomocy IT?

Skontaktuj się z nami i dowiedz się, jak możemy pomóc Twojemu biznesowi

Napisz do nas