00: Kubernetes — przegląd
Kubernetes — przegląd
Zanim zaczniesz ćwiczenia, poznaj ogólny obraz: po co jest Kubernetes, z jakich elementów się składa i jak te elementy współpracują.

Po co Kubernetes?

Wyobraź sobie port kontenerowy. Masz setki kontenerów (aplikacji), które trzeba:
- Rozmieścić na odpowiednich statkach (serwerach)
- Pilnować — jeśli kontener spadnie, ktoś musi go podnieść
- Skalować — w sezonie potrzebujesz więcej kontenerów
- Aktualizować — wymiana towaru bez zamykania portu
Problem: “Mam aplikację w kontenerze Docker. Jak ją uruchomić na wielu maszynach, skalować, aktualizować bez przestoju i automatycznie naprawiać awarie?”
Odpowiedź: Kubernetes (K8s) — orkiestrator kontenerów, który automatyzuje deploy, skalowanie i self-healing.
Architektura klastra

Klaster Kubernetes składa się z dwóch warstw:
graph TB
subgraph CP["Control Plane (mózg klastra)"]
API["API Server<br/>Brama wejściowa — każde polecenie przechodzi przez API"]
ETCD["etcd<br/>Baza danych — przechowuje cały stan klastra"]
SCHED["Scheduler<br/>Planista — decyduje na którym Node uruchomić Pod"]
CM["Controller Manager<br/>Nadzorca — pilnuje że stan rzeczywisty = stan pożądany"]
end
subgraph W1["Worker Node 1"]
KL1["kubelet<br/>Agent na Node — uruchamia i monitoruje Pody"]
KP1["kube-proxy<br/>Sieć — routing ruchu do Podów"]
CR1["Container Runtime<br/>Silnik kontenerów (containerd)"]
P1["Pod A"]
P2["Pod B"]
end
subgraph W2["Worker Node 2"]
KL2["kubelet"]
KP2["kube-proxy"]
CR2["Container Runtime"]
P3["Pod C"]
P4["Pod D"]
end
API <-->|"watch/sync"| ETCD
API --> SCHED
API --> CM
API <-->|"polecenia"| KL1
API <-->|"polecenia"| KL2
KL1 --> CR1
CR1 --> P1
CR1 --> P2
KL2 --> CR2
CR2 --> P3
CR2 --> P4
Komponenty Control Plane
| Komponent | Rola |
|---|---|
| API Server | Jedyny punkt wejścia — kubectl, UI i inne komponenty komunikują się przez API |
| etcd | Rozproszona baza klucz-wartość przechowująca cały stan klastra |
| Scheduler | Wybiera Node dla nowo utworzonych Podów na podstawie zasobów i ograniczeń |
| Controller Manager | Uruchamia kontrolery pilnujące, że stan klastra odpowiada deklaracji (np. “chcę 3 repliki”) |
Komponenty Worker Node
| Komponent | Rola |
|---|---|
| kubelet | Agent na każdym Node — odbiera polecenia z API Server i zarządza Podami |
| kube-proxy | Zarządza regułami sieciowymi — zapewnia, że ruch trafia do właściwych Podów |
| Container Runtime | Silnik uruchamiający kontenery (np. containerd) |
kubectl i kubeconfig

kubectl — narzędzie do zarządzania klastrem
kubectl to CLI (Command Line Interface) do komunikacji z klastrem Kubernetes. Każde polecenie kubectl trafia do API Servera, który je przetwarza i wykonuje.
graph LR
YOU["Ty<br/>(terminal)"]
KC["kubectl"]
API["API Server<br/>(Control Plane)"]
YOU -->|"kubectl get pods"| KC
KC -->|"HTTPS"| API
API -->|"odpowiedź"| KC
style YOU fill:#e3f2fd
style KC fill:#fff3e0
style API fill:#e8f5e9
kubeconfig — plik konfiguracyjny
Skąd kubectl wie, z którym klastrem się połączyć? Z pliku kubeconfig (~/.kube/config). Zawiera on:
| Element | Co przechowuje |
|---|---|
| cluster | Adres API Servera i certyfikat CA klastra |
| user | Dane uwierzytelniające (token, certyfikat klienta) |
| context | Połączenie cluster + user + domyślny namespace |
# Uproszczony przykład ~/.kube/config
apiVersion: v1
kind: Config
clusters:
- cluster:
server: https://k8s-training-xyz.hcp.swedencentral.azmk8s.io:443
certificate-authority-data: LS0tLS1C... # certyfikat CA
name: k8s-training
users:
- name: k8s-training-admin
user:
token: eyJhbGci... # token uwierzytelniający
contexts:
- context:
cluster: k8s-training
user: k8s-training-admin
name: k8s-training
current-context: k8s-training
Ważne: Plik kubeconfig zawiera dane uwierzytelniające — traktuj go jak hasło. Nie udostępniaj publicznie.
Słownik pojęć

| Pojęcie | Co to | Analogia | Ćwiczenie |
|---|---|---|---|
| Pod | Najmniejsza jednostka — 1 lub więcej kontenerów | Pokój hotelowy (kontenery = goście) | 01, 03 |
| Namespace | Wirtualny klaster — izolacja zasobów | Piętro w hotelu | 02 |
| ConfigMap | Konfiguracja jako pary klucz-wartość | Karteczka z ustawieniami | 05 |
| Secret | Wrażliwe dane (zakodowane base64) | Sejf w pokoju | 06 |
| Volume | Montowanie plików/katalogów do kontenera | Pendrive podpięty do komputera | 07 |
| Deployment | Zarządza cyklem życia: repliki, aktualizacje, rollbacki, self-healing | Kierownik produkcji — pilnuje obsady, wymienia pracowników bez przestoju, cofa zmiany gdy coś nie gra | 11-13 |
| Service | Stały adres sieciowy do grupy Podów | Recepcja hotelowa — nie musisz znać numeru pokoju | 14 |
| Ingress | Routing HTTP z zewnątrz do Service’ów | Portier kierujący gości do odpowiedniego wejścia | 18 |
Jak elementy się łączą

graph LR
U["Użytkownik<br/>(przeglądarka)"]
ING["Ingress<br/>routing HTTP"]
SVC["Service<br/>stały adres + load balancing"]
DEP["Deployment<br/>repliki + aktualizacje"]
POD["Pod"]
subgraph PODINT["Wnętrze Poda"]
CONT["Kontener<br/>(aplikacja)"]
CM["ConfigMap<br/>(konfiguracja)"]
SEC["Secret<br/>(hasła, certyfikaty)"]
PROBE["Probes<br/>(health checks)"]
RES["Resources<br/>(CPU/Memory limits)"]
end
U -->|"HTTP request"| ING
ING -->|"reguły routingu"| SVC
SVC -->|"selector → Endpoints"| DEP
DEP -->|"zarządza"| POD
POD --- PODINT
style PODINT fill:#f0f4ff,stroke:#4a6fa5
Mapa szkolenia
Szkolenie składa się z 5 modułów i 20 ćwiczeń. Każdy moduł buduje na wiedzy z poprzedniego:
| Moduł | Cel |
|---|---|
| 1. Pierwsze kroki (01-03) | Uruchomić pierwszego Poda i zrozumieć podstawowe komendy |
| 2. Konfiguracja aplikacji (04-08) | Oddzielić konfigurację od kodu, zarządzać wrażliwymi danymi |
| 3. Niezawodność i Deployments (09-13) | Zapewnić stabilność, limity zasobów i automatyczne aktualizacje |
| 4. Sieć wewnętrzna (14-16) | Zrozumieć komunikację między Podami wewnątrz klastra |
| 5. Sieć zewnętrzna (17-20) | Udostępnić aplikację światu zewnętrznemu |
Pełny spis ćwiczeń z linkami znajdziesz na stronie startowej.