Zum Inhalt springen

Kubernetes sinnvoll skalieren

Kubernetes-Workloads mit Ressourcen, HPA und passenden Metriken skalieren, ohne Instabilität und unnötige Kosten zu erzeugen.

Transparenter Würfel als Symbol für eine performante Shopware-Architektur
Artikelinhalt
  1. 01 Autoscaling löst keine ineffiziente Anwendung
  2. 02 Requests und Limits als Grundlage
  3. 03 Horizontal Pod Autoscaler verstehen
  4. 04 Die richtige Metrik wählen
  5. 05 Startzeit und Readiness berücksichtigen
  6. 06 Scale-up und Scale-down stabilisieren
  7. 07 Vertikale und Cluster-Skalierung
  8. 08 Kosten und Grenzen sichtbar machen
  9. 09 Fazit
Isometrische Darstellung eines Kubernetes-Clusters mit dynamisch skalierenden Pods und kontrollierter Lastverteilung.

Autoscaling löst keine ineffiziente Anwendung

Kubernetes kann Replikate und Clusterkapazität automatisch anpassen. Das bedeutet jedoch nicht, dass jede Lastspitze zuverlässig abgefangen wird. Skalierung funktioniert nur, wenn Ressourcenanforderungen, Metriken und Startverhalten der Anwendung realistisch konfiguriert sind.

Bevor ein Autoscaler eingesetzt wird, sollte klar sein, welche Komponente tatsächlich limitiert: CPU, Speicher, externe APIs, Datenbankverbindungen oder eine Queue. Mehr Pods helfen nicht, wenn alle Instanzen auf dieselbe gesättigte Datenbank zugreifen.

Requests und Limits als Grundlage

Der Scheduler benötigt Resource Requests, um Pods auf Nodes zu platzieren. Der Horizontal Pod Autoscaler nutzt bei CPU-basierten Regeln das Verhältnis zwischen Nutzung und Request. Unrealistische Werte führen deshalb zu falschen Entscheidungen.

  • Requests anhand gemessener normaler Last setzen.
  • Spitzen und Startphasen getrennt betrachten.
  • Speicherlimits vorsichtig konfigurieren, da Überschreitung Prozesse beendet.
  • CPU-Limits auf mögliche Drosselung prüfen.
  • Werte nach Releases und Lasttests erneut bewerten.

Horizontal Pod Autoscaler verstehen

Der HPA passt die Anzahl der Replikate eines skalierbaren Workloads an beobachtete Metriken an. Typische Grundlagen sind CPU, Speicher oder benutzerdefinierte Metriken. Der Regelkreis arbeitet periodisch und reagiert daher nicht ohne Verzögerung.

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: checkout-api
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: checkout-api
  minReplicas: 3
  maxReplicas: 20
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 65
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 300

Die richtige Metrik wählen

CPU ist einfach verfügbar, aber nicht für jeden Dienst aussagekräftig. Ein I/O-lastiger API-Dienst kann bei niedriger CPU bereits durch Verbindungen oder externe Wartezeiten begrenzt sein. Queue-Worker lassen sich oft besser anhand der ältesten Nachricht oder der erwarteten Abarbeitungszeit skalieren.

WorkloadMögliche MetrikRisiko
HTTP-APIRequests, Latenz oder CPUDatenbank wird zum Engpass
Queue-WorkerQueue-Alter oder Backlog pro Podzu schnelles Scale-down
Batch-Prozessoffene Arbeitseinheitenhohe Startkosten
Websocket-Serviceaktive Verbindungenungleichmäßige Verteilung

Startzeit und Readiness berücksichtigen

Neue Pods helfen erst, wenn sie tatsächlich Traffic verarbeiten können. Große Images, Migrationen beim Start oder langsame Initialisierung verlängern die Reaktionszeit. Readiness-Probes dürfen einen Pod erst freigeben, wenn alle notwendigen Abhängigkeiten verfügbar sind.

Startup-Probes verhindern, dass langsame Anwendungen frühzeitig neu gestartet werden. Liveness-Probes sollten nur echte Deadlocks erkennen und nicht externe Abhängigkeiten prüfen, deren Ausfall ein Neustart nicht behebt.

Scale-up und Scale-down stabilisieren

Ein aggressives Scale-up kann bei plötzlicher Last sinnvoll sein. Scale-down sollte häufig langsamer erfolgen, damit kurzfristige Schwankungen nicht zu ständigem Starten und Stoppen führen. Stabilization Windows und Skalierungsrichtlinien reduzieren dieses Flattern.

Vertikale und Cluster-Skalierung

Der Vertical Pod Autoscaler kann Empfehlungen für Requests liefern oder Ressourcen verändern. Das kann Neustarts erfordern und muss mit dem HPA abgestimmt werden. Der Cluster Autoscaler oder eine vergleichbare Plattformfunktion stellt Nodes bereit, wenn Pods wegen fehlender Kapazität nicht geplant werden können.

Diese Ebenen besitzen unterschiedliche Verzögerungen. Ein Pod kann schnell erstellt werden, ein neuer Node benötigt deutlich länger. Für kritische Dienste ist deshalb eine Mindestkapazität notwendig.

Kosten und Grenzen sichtbar machen

  • Minimale und maximale Replikate bewusst festlegen.
  • Skalierung gegen reale Lastprofile testen.
  • Kosten pro Request oder Auftrag beobachten.
  • Abhängigkeiten und Connection Pools mit skalieren.
  • Fehlende Metriken und Autoscaler-Entscheidungen alarmieren.

Fazit

Kubernetes-Autoscaling ist ein Regelkreis, kein Ersatz für Kapazitätsplanung. Gute Requests, passende Metriken, schnelle Startzeiten und kontrollierte Grenzen machen Skalierung zuverlässig. Entscheidend ist immer, das gesamte System inklusive Datenbanken und externen Diensten zu betrachten.

Lassen Sie uns etwas Großes bauen.

Ob Idee, Herausforderung oder konkretes Projekt – wir freuen uns auf das Gespräch mit Ihnen.

Kontakt aufnehmen