Kubernetes to system orkiestracji kontenerów dla aplikacji rozproszonych. Tradycyjne metody deploymentu nie skalują się dla aplikacji kontenerowych, dlatego coraz więcej zespołów deweloperskich i administratorów sięga po Kubernetes do zarządzania aplikacjami kontenerowymi.
Co to jest Kubernetes: Podstawowe pojęcia i zastosowania
Definicja i pochodzenie nazwy Kubernetes
Kubernetes to otwarte oprogramowanie (open source) do orkiestracji kontenerów: deployment, skalowanie i zarządzanie aplikacjami kontenerowymi. Nazwa pochodzi z greckiego i oznacza "sternika".
Historia: projekt powstał w Google na bazie wewnętrznego systemu Borg. W 2014 roku Google udostępnił Kubernetes jako open source, a w 2015 roku przekazał go pod opiekę Cloud Native Computing Foundation (CNCF).
W praktyce Kubernetes uruchamia kontenery na wielu maszynach fizycznych lub wirtualnych, z automatycznym deploymentem, samonaprawianiem (healing) i skalowaniem aplikacji.
Dlaczego Kubernetes stał się standardem w orkiestracji kontenerów
Problemy produkcyjne, które rozwiązuje Kubernetes:
- Automatyczne skalowanie – system automatycznie zwiększa lub zmniejsza liczbę kontenerów zależnie od obciążenia
- Samonaprawianie – monitoring i automatyczny restart kontenerów w razie awarii
- Równoważenie obciążenia – automatyczna dystrybucja ruchu sieciowego między kontenery
- Aktualizacje bez przestojów – możliwość aktualizacji aplikacji bez przerywania jej działania
- Deklaratywna konfiguracja – zamiast definiować kroki, określasz pożądany stan systemu
Kubernetes działa w różnych środowiskach – od lokalnych klastrów, przez chmury prywatne, po chmury publiczne (multi-cloud) – bez uzależnienia od jednego dostawcy (vendor lock-in).
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 to opcja dla małych projektów; Kubernetes sprawdza się przy wdrożeniach enterprise-grade.
Apache Mesos:
- Zalety: wysoka skalowalność, obsługa różnych frameworków
- Wady: bardziej złożona konfiguracja, wyższy próg wejścia
Mesos jest uniwersalny – obsługuje różne frameworki i większą różnorodność obciążeń. Kubernetes specjalizuje się w kontenerach i ma 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 stosuje się wiele węzłów master dla wysokiej dostępności (HA).
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. Stanowi centralną magistralę komunikacji – obsługuje żądania wewnętrzne (między komponentami) i zewnętrzne (od użytkowników).
etcd to rozproszona baza danych typu klucz-wartość (key-value store) przechowująca stan całego klastra: informacje o wszystkich obiektach Kubernetes, ich konfiguracji i statusie.
Scheduler przydziela pody do węzłów worker na podstawie wymagań zasobów (resource requests), bieżącego obciążenia węzłów (node load) i ograniczeń (constraints).
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 (namespaces) dzielą jeden fizyczny klaster Kubernetes na wiele wirtualnych klastrów. Typowe zastosowanie: izolacja zespołów i projektów korzystających z tego samego klastra.
Praktyczne zastosowania:
- Izolacja środowisk – oddzielne przestrzenie dla deweloperskich, testowych i produkcyjnych
- Podział zasobów – każdej przestrzeni można przypisać limity zasobów (CPU, pamięć)
- Kontrola dostępu – zdefiniowanie, którzy użytkownicy mają dostęp do konkretnych przestrzeni
W dużych organizacjach administrator nadaje uprawnienia (RBAC) poszczególnym zespołom tylko do ich przestrzeni: izolacja, brak kolizji nazw zasobów i ochrona przed wpływem na inne aplikacje.
Wyjątek: część zasobów jest globalna dla całego klastra (węzły, trwałe woluminy) i nie podlega podziałowi na przestrzenie nazw.
Przygotowanie środowiska do instalacji pierwszego klastra
Wymagania sprzętowe i programowe
Wymagania do uruchomienia klastra (także lokalnego i testowego):
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
Powyższe wartości dotyczą środowiska deweloperskiego z minikube. Klastry produkcyjne wymagają więcej zasobów i konfiguracji multi-node.
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ń (CLI) do komunikacji z 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 uruchamia jednowęzłowy (single-node) klaster Kubernetes na lokalnym komputerze – do nauki, testów i rozwoju aplikacji (dev/test).
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 (pre-instalacja):
- Włączenie wirtualizacji – upewnij się, że wirtualizacja jest włączona w BIOS/UEFI
- Konfiguracja zapory sieciowej – dodaj wyjątki dla portów używanych przez Kubernetes (zazwyczaj 6443 dla API serwera oraz porty 30000-32767 dla NodePort)
- Docker (opcjonalnie) – chociaż minikube może używać containerd, instalacja Dockera ułatwia pracę:
sudo apt install docker.io
sudo usermod -aG docker $USER
- 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
Uruchomienie klastra:
minikube start
Polecenie tworzy wirtualną maszynę (VM) i konfiguruje pojedynczy węzeł klastra. Pobieranie obrazów kontenerów zajmuje kilka minut (zwykle 2-5 min).
Po zakończeniu weryfikujemy, czy klaster działa:
kubectl cluster-info
Sprawdzamy stan węzłów:
kubectl get nodes
Output: jeden węzeł w statusie "Ready" – klaster jest gotowy do przyjmowania zadań.
Konfiguracja pierwszego Deploymentu
Kubernetes Deployment definiuje pody i liczbę replik aplikacji, które mają działać.
Krok 1: 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
Krok 2: deployment aplikacji:
kubectl apply -f first-deployment.yaml
Sprawdzamy stan:
kubectl get deployments
kubectl get pods
Ekspozycja aplikacji przy użyciu Service
Dostęp do aplikacji wymaga ekspozycji przez obiekt 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
Output: URL aplikacji w formacie http://[minikube-ip]:[nodeport]. Adres otwieramy w przeglądarce.
Rezultat: działający klaster Kubernetes z uruchomioną aplikacją. Workflow obejmuje trzy kroki: uruchomienie klastra, wdrożenie aplikacji (deployment) i ekspozycję przez Service.
Zarządzanie aplikacjami w klastrze Kubernetes
Skalowanie aplikacji przy użyciu ReplicaSet
ReplicaSet utrzymuje stałą liczbę podów danej aplikacji. Skalowanie to zmiana 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
HPA (Horizontal Pod Autoscaler) automatycznie dostosowuje liczbę podów na podstawie wykorzystania CPU (tu: min=2, max=10 podów).
Aktualizacja aplikacji bez przestojów
Rolling update to zmiana wersji aplikacji bez przestojów (downtime):
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 zastępuje stare pody nowymi etapami, bez przerwania dostępności aplikacji (zero downtime).
Monitorowanie stanu klastra i aplikacji
Monitoring klastra opiera się na podstawowych komendach kubectl:
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:
- Pod w stanie "Pending" – zazwyczaj oznacza brak wystarczających zasobów. Sprawdź dostępność zasobów:
kubectl describe node
- Pod w stanie "CrashLoopBackOff" – aplikacja ulega awarii i jest ponownie uruchamiana. Sprawdź logi:
kubectl logs [nazwa-poda]
- Problemy z połączeniem sieciowym – sprawdź konfigurację serwisów:
kubectl get svc
kubectl describe svc [nazwa-usługi]
- 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.
Zarządzanie aplikacjami w klastrze wymaga znajomości komend kubectl, modelu zasobów platformy i diagnostyki (troubleshooting).
Wnioski
Kubernetes to standard orkiestracji kontenerów dla aplikacji skalowanych w produkcji. W artykule omówiliśmy architekturę klastra, komponenty control-plane oraz praktyczne wdrożenie aplikacji.
Utworzenie pierwszego klastra pokazuje, że Kubernetes jest dostępny przy metodycznym podejściu krok po kroku. Punkt wejścia to dwa narzędzia: minikube (klaster lokalny) i kubectl (CLI).
Zarządzanie aplikacjami obejmuje skalowanie, rolling updates (aktualizacje bez przestojów) i troubleshooting. Te kompetencje przydają się przy wdrożeniach produkcyjnych, klastrach multi-tenant i optymalizacji kosztów infrastruktury.
Kubernetes sprawdza się zarówno w małych projektach, jak i dużych wdrożeniach produkcyjnych (small-to-enterprise scale) dzięki skalowalności i ekosystemowi narzędzi. Jeśli potrzebujesz wsparcia przy wdrożeniu Kubernetes lub automatyzacji procesów DevOps, skontaktuj się z nami. FoxLink Automation wspiera firmy w konteneryzacji aplikacji i zarządzaniu infrastrukturą.
Potrzebujesz pomocy?
Jeśli szukasz automatyzacji procesów biznesowych, skontaktuj się z nami lub sprawdź naszą ofertę:


