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 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:

  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, 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:

  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

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):

  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

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:

  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.

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ę:

Automatyzacja procesów

Powiązana usługa

Serwery i infrastruktura

Administracja, monitoring, bezpieczeństwo

Potrzebujesz pomocy IT?

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

Napisz do nas