====== Kubernetes (K8s) ======
**Kubernetes** je open-source platforma pro orchestraci kontejnerů. Umožňuje automatizovat nasazování, škálování a správu kontejnerizovaných aplikací. Původně byl vyvinut společností Google (založen na interním systému Borg) a nyní je spravován nadací CNCF.
Zatímco [[docker|Docker]] definuje, jak kontejner vypadá, Kubernetes určuje, jak se kontejnery chovají v clusteru, jak spolu komunikují a jak se zotavují z chyb.
### 1. Architektura Clusteru
Kubernetes cluster se skládá ze dvou hlavních částí:
* **Control Plane (Řídicí rovina):** "Mozek" clusteru. Rozhoduje o tom, kde se kontejnery spustí, sleduje stav clusteru a reaguje na události. Obsahuje komponenty jako //API Server//, //etcd// (databáze stavu), //Scheduler// a //Controller Manager//.
* **Worker Nodes (Pracovní uzly):** Stroje (fyzické nebo virtuální), kde skutečně běží vaše aplikace. Každý uzel obsahuje službu **Kubelet** (komunikuje s řídicí rovinou) a **Container Runtime** (např. Docker nebo containerd).
### 2. Základní objekty (Abstrakce)
Kubernetes nepracuje přímo s kontejnery, ale s vyššími objekty:
* **Pod:** Nejmenší jednotka v K8s. Může obsahovat jeden nebo více úzce propojených kontejnerů, které sdílejí stejnou IP adresu a úložiště.
* **Deployment:** Definuje požadovaný stav aplikace (např. "chci, aby vždy běžely 3 repliky mého webu"). Pokud jeden Pod spadne, Deployment zajistí spuštění nového.
* **Service:** Zajišťuje stabilní síťovou adresu a balancování zátěže (Load Balancing) mezi skupinu Podů.
* **Namespace:** Virtuální oddělení zdrojů uvnitř jednoho clusteru (např. ''vyvoj'', ''test'', ''produkce'').
### 3. Deklarativní konfigurace (YAML)
V Kubernetes neříkáme systému "spusť toto", ale definujeme **požadovaný stav** v YAML souboru. Kubernetes pak neustále porovnává aktuální stav s tímto zadáním a provádí opravy.
**Příklad jednoduchého Deploymentu:**
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
ports:
- containerPort: 80
### 4. Klíčové výhody
* **Self-healing (Samooprava):** Pokud kontejner selže, K8s ho restartuje. Pokud uzel zemře, přesune kontejnery na jiný uzel.
* **Horizontální škálování:** Automatické navyšování nebo snižování počtu běžících instancí podle zátěže (CPU/RAM).
* **Service Discovery:** Aplikace se v síti najdou automaticky pomocí DNS jmen, bez nutnosti znát konkrétní IP adresy.
* **Automated Rollouts/Rollbacks:** Snadné nasazování nových verzí bez výpadku (Rolling Update).
### 5. Správa pomocí kubectl
Hlavním nástrojem pro ovládání clusteru je CLI utilita ''kubectl''.
^ Příkaz ^ Význam ^
| ''kubectl get pods'' | Zobrazí seznam běžících Podů. |
| ''kubectl apply -f soubor.yaml'' | Nasadí nebo aktualizuje konfiguraci ze souboru. |
| ''kubectl logs '' | Zobrazí logy z konkrétního kontejneru. |
| ''kubectl scale deployment web --replicas=5'' | Změní počet instancí aplikace na pět. |
| ''kubectl exec -it -- bash'' | Otevře interaktivní terminál uvnitř kontejneru. |
> **Zajímavost:** Číslo **8** v názvu K8s nahrazuje osm písmen mezi "K" a "s" ve slově "K-ubernete-s" (tzv. numeronym).
[[it_encyklopedie:vyvoj_a_devops|Zpět na DevOps]]