Ein Kubernetes Deployment ist das zentrale Objekt, um containerisierte Anwendungen zuverlässig, skalierbar und updatefähig zu betreiben. Es kümmert sich nicht nur darum, dass Pods laufen, sondern auch darum, wie sie aktualisiert, ersetzt und zurückgerollt werden.
In diesem Artikel lernst du ausführlich:
- was ein Deployment in :contentReference[oaicite:0]{index=0} ist
- wie Deployments mit ReplicaSets zusammenarbeiten
- wie Rolling Updates & Rollbacks funktionieren
- wie ein Deployment per YAML definiert wird
- Best Practices aus der Praxis
1) Was ist ein Kubernetes Deployment?
Ein Deployment ist ein höheres Abstraktionsobjekt in Kubernetes, das den Lebenszyklus von Pods verwaltet. Es beschreibt deklarativ:
- wie viele Pods laufen sollen
- welches Container-Image verwendet wird
- wie Updates durchgeführt werden
- wie bei Fehlern zurückgerollt wird
Wichtig: Ein Deployment erstellt nicht direkt Pods, sondern erzeugt und verwaltet ReplicaSets, die wiederum die Pods kontrollieren.
Merksatz: Deployment = gewünschter Zustand + Update-Strategie + Versionsverwaltung
2) Warum Deployments so wichtig sind
In produktiven Kubernetes-Clustern werden Deployments fast immer eingesetzt, weil sie Probleme lösen, die mit reinen Pods oder ReplicaSets nicht sauber handhabbar sind.
Typische Aufgaben eines Deployments
- automatische Pod-Replikation
- Rolling Updates ohne Downtime
- Rollback auf frühere Versionen
- deklarative Konfiguration („Desired State“)
- Skalierung per YAML oder kubectl
3) Deployment vs Pod vs ReplicaSet
| Objekt | Aufgabe | Update-Fähigkeit |
|---|---|---|
| Pod | Einzelner Laufzeitcontainer | ❌ keine |
| ReplicaSet | Hält eine Anzahl identischer Pods | ❌ keine Rollouts |
| Deployment | Verwaltet ReplicaSets & Updates | ✅ Rolling Update & Rollback |
4) Beispiel: Einfaches Kubernetes Deployment
Das folgende Deployment startet 3 NGINX-Pods und stellt sicher, dass diese dauerhaft laufen.
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
Anwenden
kubectl apply -f nginx-deployment.yaml
kubectl get deploy
kubectl get pods5) Wie ein Deployment intern funktioniert
Nach dem Anwenden passiert im Cluster Folgendes:
- Deployment wird im API-Server gespeichert
- Ein ReplicaSet wird erstellt
- ReplicaSet erzeugt Pods
- Kubelet startet Container auf Nodes
Ändert sich das Deployment (z. B. neues Image), erstellt Kubernetes ein neues ReplicaSet und fährt das alte kontrolliert herunter.
6) Rolling Updates erklärt
Standardmäßig verwendet ein Deployment die Strategie RollingUpdate. Das bedeutet:
- neue Pods werden schrittweise gestartet
- alte Pods werden schrittweise beendet
- keine oder minimale Downtime
Beispiel: Image aktualisieren
kubectl set image deployment/nginx-deployment nginx=nginx:1.26
kubectl rollout status deployment/nginx-deployment7) Rollback auf eine frühere Version
Einer der größten Vorteile von Deployments ist die integrierte Versionshistorie.
kubectl rollout history deployment/nginx-deployment
kubectl rollout undo deployment/nginx-deploymentInnerhalb weniger Sekunden läuft wieder die vorherige, stabile Version.
8) Deployment skalieren
Per Kommando
kubectl scale deployment nginx-deployment --replicas=5Per YAML
Ändere einfach:
spec:
replicas: 59) Deployment und Service
Da Pods dynamisch sind, kombiniert man Deployments fast immer mit einem Service, um eine stabile Netzwerkadresse bereitzustellen.
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
10) Best Practices für Kubernetes Deployments
- Immer Deployments statt nackter Pods nutzen
- Labels konsistent und eindeutig setzen
- RollingUpdate bewusst konfigurieren
- Ressourcen-Limits definieren
- Readiness- & Liveness-Probes verwenden
11) Häufige Fehler & Troubleshooting
- ImagePullBackOff → Image oder Registry prüfen
- CrashLoopBackOff → Container-Logs analysieren
- Pods Pending → Ressourcen oder Node-Selector prüfen
kubectl describe deployment nginx-deployment
kubectl logs <pod-name>12) Fazit
Ein Kubernetes Deployment ist das Fundament moderner Kubernetes-Anwendungen. Es verbindet Replikation, Updates, Rollbacks und Skalierung in einem einzigen, deklarativen Objekt. Wer Deployments beherrscht, versteht Kubernetes auf produktivem Niveau.
Wenn du Kubernetes ernsthaft betreibst, lautet die Faustregel: Keine Anwendung ohne Deployment.