Ein einzelner Docker-Container auf einem einzelnen Server ist einfach zu verwalten. Aber was passiert wenn du 50 Microservices, 200 Container- Instanzen auf 10 Servern hast und diese automatisch skalieren, bei Ausfällen neu starten und Updates ohne Downtime einspielen willst? Dann braucht man einen Container-Orchestrator.
Kubernetes (kurz: K8s – das "8" steht für die 8 Buchstaben zwischen K und s) ist das führende Open-Source-System zur Automatisierung von Container-Deployment, Skalierung und Verwaltung. Ursprünglich von Google entwickelt (basierend auf internem "Borg"-System) und 2014 als Open Source veröffentlicht.
Kubernetes Cluster:
┌──────────────────────────────────────────────────┐
│ Control Plane │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │API Server│ │Scheduler │ │Controller Manager│ │
│ └──────────┘ └──────────┘ └──────────────────┘ │
│ ┌──────────────────────────────────────────────┐│
│ │ etcd ││
│ └──────────────────────────────────────────────┘│
└──────────────────────────────────────────────────┘
│
┌─────────────┼─────────────┐
│ │ │
┌───────────┐ ┌───────────┐ ┌───────────┐
│ Worker │ │ Worker │ │ Worker │
│ Node 1 │ │ Node 2 │ │ Node 3 │
│ kubelet │ │ kubelet │ │ kubelet │
│ kube- │ │ kube- │ │ kube- │
│ proxy │ │ proxy │ │ proxy │
│ [Pod][Pod]│ │ [Pod][Pod]│ │ [Pod][Pod]│
└───────────┘ └───────────┘ └───────────┘Komponente | Aufgabe |
|---|---|
API Server | Zentrale Schnittstelle – alle Befehle gehen durch den API Server |
etcd | Verteilte Key-Value-Datenbank – speichert den Cluster-Zustand |
Scheduler | Entscheidet auf welchem Node ein Pod gestartet wird |
Controller Manager | Überwacht Cluster-Zustand und stellt Soll-Zustand sicher |
Komponente | Aufgabe |
|---|---|
kubelet | Agent auf jedem Node – startet und überwacht Pods |
kube-proxy | Netzwerk-Proxy – leitet Traffic zu den richtigen Pods |
Container Runtime | Startet Container (containerd, CRI-O) |
Kleinste deploybare Einheit in Kubernetes:
- Enthält einen oder mehrere Container
- Container in einem Pod teilen Netzwerk und Storage
- Hat eine eigene IP-Adresse im Cluster
Beispiel:
apiVersion: v1
kind: Pod
metadata:
name: webserver
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80Verwaltet eine Menge von Pods (ReplicaSet):
- Definiert Soll-Zustand (z.B. 3 Replicas)
- Rollt Updates automatisch aus
- Rollback bei Fehlern möglich
Beispiel:
apiVersion: apps/v1
kind: Deployment
metadata:
name: webserver
spec:
replicas: 3 ← 3 Instanzen
selector:
matchLabels:
app: webserver
template:
metadata:
labels:
app: webserver
spec:
containers:
- name: nginx
image: nginx:1.25
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "256Mi"Stabiler Endpunkt für Pods (Pods kommen und gehen):
Typen:
ClusterIP → Nur intern im Cluster erreichbar (Standard)
NodePort → Auf jedem Node auf einem Port erreichbar
LoadBalancer → Externer Load Balancer (Cloud)
ExternalName → DNS-Alias für externen Dienst
Beispiel:
apiVersion: v1
kind: Service
metadata:
name: webserver-svc
spec:
selector:
app: webserver ← Leitet zu Pods mit diesem Label
ports:
- port: 80
targetPort: 80
type: ClusterIPFeature | Beschreibung |
|---|---|
Auto-Scaling | HPA skaliert Replicas basierend auf CPU/RAM automatisch |
Self-Healing | Abgestürzte Container werden automatisch neu gestartet |
Rolling Updates | Updates ohne Downtime – Pod für Pod erneuert |
Rollback | Bei Fehlern sofort zur vorherigen Version zurück |
Service Discovery | Container finden sich per DNS-Namen |
Secrets | Passwörter und Zertifikate sicher verwalten |
ConfigMaps | Konfiguration von Container-Images trennen |
Cluster in virtuelle Cluster aufteilen (Teams/Projekte) |
Cluster-Info:
kubectl cluster-info
kubectl get nodes
Pods:
kubectl get pods
kubectl get pods -n kube-system → Pods im Namespace kube-system
kubectl describe pod webserver
kubectl logs webserver
kubectl exec -it webserver -- bash
Deployments:
kubectl get deployments
kubectl apply -f deployment.yaml → Deployment erstellen/aktualisieren
kubectl delete -f deployment.yaml → Deployment löschen
kubectl scale deployment webserver --replicas=5
kubectl rollout status deployment webserver
kubectl rollout undo deployment webserver → Rollback
Services:
kubectl get services
kubectl expose deployment webserver --port=80 --type=LoadBalancerK3s ist eine leichtgewichtige Kubernetes-Distribution von Rancher/SUSE – ideal für Homelab, Edge-Computing und ressourcenbeschränkte Umgebungen:
Unterschiede zu Standard-Kubernetes:
- Einzelne Binary (~70 MB statt mehrere GB)
- Integrierte SQLite statt etcd (für Single-Node)
- Weniger RAM-Bedarf (~512 MB)
- Einfache Installation (ein Befehl)
Installation:
curl -sfL https://get.k3s.io | sh -
K3s läuft auf:
- Raspberry Pi (ARM)
- Kleine VMs
- Edge-Geräte
- HomelabAnbieter | Produkt | Besonderheit |
|---|---|---|
AWS | EKS (Elastic Kubernetes Service) | Control Plane von AWS verwaltet |
Azure | AKS (Azure Kubernetes Service) | Kostenloser Control Plane |
GKE (Google Kubernetes Engine) | Autopilot-Modus verfügbar | |
Hetzner | Hetzner Cloud + K3s | Günstigste Option |
Kubernetes orchestriert Container über mehrere Server hinweg
Der Control Plane (API Server, Scheduler, etcd) verwaltet den Cluster-Zustand
Worker Nodes führen die eigentlichen Container in Pods aus
Pods sind die kleinste deploybare Einheit – enthalten einen oder mehrere Container
Deployments verwalten Replicas und ermöglichen Rolling Updates
Services bieten stabile Endpunkte für dynamisch kommende und gehende Pods
Kubernetes heilt sich selbst – abgestürzte Container werden automatisch neu gestartet
K3s ist eine leichtgewichtige Alternative ideal für Homelab und Edge