Kubernetes Grundlagen: Container-Orchestrierung verstehen
Kubernetes (K8s) ist der Standard für Container-Orchestrierung. Wenn Docker einzelne Container verwaltet, orchestriert Kubernetes hunderte oder tausende davon. Dieser Guide erklärt die Grundlagen.
Was ist Kubernetes?
Kubernetes ist eine Open-Source-Plattform zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von Container-Anwendungen. Google entwickelte es ursprünglich intern.
Wann braucht man Kubernetes?
- Viele Container über mehrere Server verteilen
- Automatische Skalierung bei Last
- Selbstheilung bei Ausfällen
- Zero-Downtime Deployments
- Service Discovery und Load Balancing
Grundbegriffe
| Begriff |
Erklärung |
| Cluster |
Gruppe von Nodes, die zusammenarbeiten |
| Node |
Einzelner Server im Cluster (Master oder Worker) |
| Pod |
Kleinste Einheit – enthält einen oder mehrere Container |
| Deployment |
Beschreibt gewünschten Zustand der Pods |
| Service |
Stabile Netzwerkadresse für Pods |
| Namespace |
Virtuelle Unterteilung des Clusters |
| ConfigMap |
Konfigurationsdaten für Pods |
| Secret |
Sensible Daten (Passwörter, Tokens) |
Kubernetes Architektur
Control Plane (Master)
- API Server: Zentrale Schnittstelle
- etcd: Key-Value-Speicher für Cluster-Zustand
- Scheduler: Weist Pods den Nodes zu
- Controller Manager: Überwacht Cluster-Zustand
Worker Nodes
- Kubelet: Agent auf jedem Node
- Kube-proxy: Netzwerk-Proxy
- Container Runtime: Docker, containerd, etc.
Lokale Entwicklungsumgebung
Minikube installieren
# macOS
brew install minikube
# Linux
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# Cluster starten
minikube start
# Dashboard öffnen
minikube dashboard
kubectl installieren
# macOS
brew install kubectl
# Linux
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install kubectl /usr/local/bin/kubectl
# Verbindung testen
kubectl cluster-info
Erstes Deployment
Pod erstellen (YAML)
# nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
# Pod erstellen
kubectl apply -f nginx-pod.yaml
# Status prüfen
kubectl get pods
# Logs anzeigen
kubectl logs nginx-pod
# Pod löschen
kubectl delete pod nginx-pod
Deployment erstellen
# nginx-deployment.yaml
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.25
ports:
- containerPort: 80
resources:
limits:
memory: "128Mi"
cpu: "500m"
kubectl apply -f nginx-deployment.yaml
kubectl get deployments
kubectl get pods
Service erstellen
# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
type: LoadBalancer
kubectl apply -f nginx-service.yaml
kubectl get services
Wichtige kubectl Befehle
| Befehl |
Beschreibung |
kubectl get pods |
Alle Pods anzeigen |
kubectl get pods -o wide |
Pods mit mehr Details |
kubectl describe pod NAME |
Pod-Details anzeigen |
kubectl logs POD |
Pod-Logs anzeigen |
kubectl exec -it POD -- bash |
In Pod einloggen |
kubectl scale deployment NAME --replicas=5 |
Skalieren |
kubectl rollout status deployment/NAME |
Rollout-Status |
kubectl rollout undo deployment/NAME |
Rollback |
Kubernetes vs. Docker Compose
| Aspekt |
Docker Compose |
Kubernetes |
| Komplexität |
Einfach |
Komplex |
| Skalierung |
Manuell |
Automatisch |
| Self-Healing |
Nein |
Ja |
| Multi-Host |
Nein (Swarm) |
Ja |
| Einsatz |
Entwicklung, kleine Projekte |
Produktion, Enterprise |
💡 Tipp:
Für kleinere Projekte ist Docker Compose oft ausreichend. Kubernetes lohnt sich erst bei größeren, verteilten Anwendungen.
Managed Kubernetes Dienste
- Google GKE: Google Kubernetes Engine
- AWS EKS: Elastic Kubernetes Service
- Azure AKS: Azure Kubernetes Service
- DigitalOcean DOKS: Managed Kubernetes
Weitere Informationen