Der Horizontal Pod Autoscaler (HPA) ist ein eingebauter Kubernetes-Controller, der die Anzahl der Pod-Replikas automatisch an die aktuelle Last anpasst. Horizontale Skalierung bedeutet: Steigt die Auslastung, startet Kubernetes zusätzliche Pods; sinkt sie, werden überflüssige Pods wieder beendet. Der HPA gehört damit zu den zentralen Werkzeugen für elastische Anwendungen im Cluster.
So funktioniert der HPA
Der Controller läuft im kube-controller-manager und prüft in regelmäßigen Abständen (Standard-Sync-Periode 15 Sekunden) die gemeldeten Metriken. Als Ziel dient eine skalierbare Workload wie ein Deployment oder StatefulSet, festgelegt über scaleTargetRef. Aus dem aktuellen und dem gewünschten Messwert berechnet er die neue Replikazahl: desiredReplicas = ceil(currentReplicas * aktuellerWert / Zielwert). Die Grenzen minReplicas und maxReplicas verhindern, dass der HPA auf null oder ins Unendliche skaliert.
Als Metrikquellen stehen CPU- und Speicherauslastung über den Metrics Server bereit; zusätzlich lassen sich eigene Metriken wie Requests pro Sekunde oder Warteschlangenlängen über die APIs custom.metrics.k8s.io und external.metrics.k8s.io anbinden. Die stabile API-Version autoscaling/v2 unterstützt Speicher- und Custom-Metriken; autoscaling/v1 kennt nur CPU.
Stabilisierung gegen Flapping
Damit die Replikazahl nicht bei jedem kleinen Lastschwankung hin- und herspringt, nutzt der HPA Stabilisierungsfenster (Stabilization Windows). Beim Herunterskalieren beträgt das Standardfenster 300 Sekunden, beim Hochskalieren reagiert er meist sofort. Über den Abschnitt behavior lassen sich eigene Richtlinien für scaleUp und scaleDown definieren.
Praxis
kubectl autoscale deployment nginx --cpu-percent=50 --min=1 --max=10
kubectl get hpa
Der erste Befehl legt einen HPA an, der das Deployment nginx zwischen 1 und 10 Replikas hält und ab 50 Prozent CPU-Auslastung hochskaliert. Im Gegensatz zum Vertical Pod Autoscaler, der die Ressourcenanforderungen einzelner Pods anpasst, verändert der HPA nur deren Anzahl. Der Cluster Autoscaler ergänzt ihn auf Node-Ebene, indem er bei Bedarf zusätzliche Maschinen startet.
Verwandte Grundlagen: Kubernetes, Pod, Skalierung, Auto Scaling in der Cloud.