Horizontal Pod Autoscaling
Horizontal Pod Autoscaling (HPA) passt die Anzahl der Pods einer Anwendung automatisch an die Auslastung an. Steigt die Last, werden zusätzliche Pods gestartet; sinkt sie, werden Pods wieder entfernt.
Abgrenzung zum Cluster Autoscaling
Beide Mechanismen wirken auf unterschiedlichen Ebenen und ergänzen sich:
| Mechanismus | Skaliert | Konfiguration |
|---|---|---|
| Horizontal Pod Autoscaling (HPA) | Anzahl der Pods | Über ein HorizontalPodAutoscaler-Objekt im Cluster |
| Cluster Autoscaling (CA) | Anzahl der Nodes | Je Node Pool im Control Panel |
HPA startet zusätzliche Pods – reicht die Kapazität der vorhandenen Nodes dafür nicht aus, bleiben diese im Status Pending. Erst der Cluster Autoscaler stellt dann zusätzliche Nodes bereit. Für lastabhängige Skalierung sollten daher beide aktiv sein.
Siehe Autoscaling aktivieren.
Voraussetzungen
- Ein laufender
metrics-serverim Cluster - Definierte
resources.requestsin Ihrem Deployment – ohne diese kann HPA die prozentuale Auslastung nicht berechnen
Prüfen Sie den metrics-server:
kubectl top pods
Erhalten Sie eine Fehlermeldung, installieren Sie ihn zunächst, siehe Erweiterte Metriken.
Deployment vorbereiten
Das Deployment muss requests definieren:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: nginx:stable
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 256Mi
HorizontalPodAutoscaler anlegen
Per Manifest
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
Anwenden:
kubectl apply -f hpa.yaml
Die Konfiguration bedeutet: Liegt die durchschnittliche CPU-Auslastung der Pods über 70 % der angeforderten requests, werden zusätzliche Pods gestartet – bis maximal 10. Sinkt sie deutlich darunter, wird bis auf minimal 2 Pods reduziert.
Per Befehl
kubectl autoscale deployment web --cpu-percent=70 --min=2 --max=10
Status prüfen
kubectl get hpa
Beispielausgabe:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
web-hpa Deployment/web 45%/70% 2 10 3 5m
Details und Skalierungsereignisse:
kubectl describe hpa web-hpa
Zeigt die Spalte TARGETS den Wert <unknown>, liefert der metrics-server keine Daten – oder im Deployment fehlen die requests.
Skalierung nach Arbeitsspeicher
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
Bei mehreren Metriken skaliert HPA anhand derjenigen, die die höchste Replica-Anzahl erfordert.
Schwankungen dämpfen
Skaliert die Anwendung zu häufig auf und ab, begrenzen Sie das Verhalten über behavior:
spec:
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 50
periodSeconds: 60
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 100
periodSeconds: 30
Das Hochskalieren erfolgt damit sofort, das Herunterskalieren erst nach fünf Minuten stabiler Auslastung.
Hinweise
- HPA und ein fest gesetztes
replicasim Deployment widersprechen sich. Sobald ein HPA aktiv ist, verwaltet dieser die Replica-Anzahl. - Setzen Sie
minReplicasfür produktive Dienste auf mindestens 2, damit die Anwendung auch bei Node-Ausfällen erreichbar bleibt. - Definieren Sie Readiness Probes, damit neu gestartete Pods erst nach vollständigem Start Datenverkehr erhalten.