Das Deployment ist der zentrale Workload-Controller in Kubernetes. Es verwaltet eine Anwendung deklarativ: In einer YAML-Datei beschreibt man den gewünschten Zustand (Container-Image, Anzahl der Replikate, Update-Strategie), und der Deployment-Controller arbeitet kontinuierlich darauf hin, dass der Cluster diesen Zustand erreicht und dauerhaft hält.
Deployment, ReplicaSet und Pods
Ein Deployment legt bei der Erstellung ein ReplicaSet an, das wiederum die gewünschte Anzahl identischer Pods startet. Bei jedem Update entsteht ein neues ReplicaSet mit dem neuen Pod-Template; der Controller fährt es nach der gewählten Strategie hoch und das alte danach herunter.
Update-Strategien
- RollingUpdate (Standard): Neue Pods werden schrittweise gestartet, alte nach und nach beendet. Die Parameter
maxUnavailableundmaxSurge(Standard jeweils 25 Prozent) begrenzen, wie viele Pods gleichzeitig fehlen beziehungsweise zusätzlich laufen dürfen. - Für jeden Container lassen sich CPU- und Speicherwerte über Requests und Limits setzen; Standardwerte und Grenzen pro Namespace definiert eine Kubernetes LimitRange.
- Recreate: Erst werden alle alten Pods beendet, dann die neuen gestartet – einfach, aber mit Ausfallzeit.
Den Fortschritt eines Rollouts prüft man mit kubectl rollout status, zurückrollen geht mit kubectl rollout undo; Updates lassen sich mit kubectl rollout pause anhalten. Schlägt ein Rollout fehl (zum Beispiel wegen eines falschen Image-Namens), stoppt der Controller das Hochskalieren automatisch und lässt den alten Stand laufen. Als einer der Regelkreise wird das Deployment vom kube-controller-manager überwacht.
Für Anwendungen mit stabiler Identität und eigenem Speicher je Instanz gibt es das StatefulSet, für genau einen Pod je Node das DaemonSet. Die Pod-Anzahl lässt sich automatisch an die Last anpassen – dafür ist der Horizontal Pod Autoscaler zuständig. Die Steuerung über die Kommandozeile zeigt der Artikel kubectl-Befehle.