Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Smarteres Autoscaling in GKE – jenseits von CPU und Speicher

By Chimbu ChinnaduraiMar 19, 20265 min read

Diese Seite ist auch in English, Español, Français, Italiano, 日本語 und Português verfügbar.

Moderne cloud-native Anwendungen skalieren selten sauber, wenn man sich allein auf CPU- oder Speicher-Metriken stützt. Viele Workloads werden von Signalen wie Anfragerate, Queue-Tiefe, GPU-Auslastung oder Anwendungslatenz getrieben. Klassische Autoscaling-Ansätze tun sich schwer damit, diese Signale abzubilden – das Ergebnis sind häufig ineffiziente Skalierungsentscheidungen.

Google Kubernetes Engine (GKE) bietet seit Kurzem nativen Support für Custom Metrics. Damit können Anwendungen ihre Metriken einfacher bereitstellen und das Autoscaling trifft präzisere Entscheidungen – ganz ohne komplexe Adapter oder zusätzliche Infrastruktur.

In diesem Artikel beleuchten wir:

  • Die Schwächen klassischer Autoscaling-Ansätze
  • Wie der native Custom-Metrics-Support in GKE diese Schwächen behebt
  • Wie das neue Feature unter der Haube funktioniert
  • Ein praktisches Beispiel für Autoscaling auf Basis von Custom Metrics

⚠️ Hinweis: Dieses Feature befindet sich derzeit in der Preview und ist ausschließlich auf GKE 1.35.1-gke.1396000 oder höher im Rapid Channel verfügbar. Prüfen Sie vor dem Produktiveinsatz den aktuellen GA-Status in der offiziellen Dokumentation.

Wo klassisches Autoscaling an seine Grenzen stößt

Autoscaling in Kubernetes basiert in der Regel auf dem Horizontal Pod Autoscaler (HPA). Standardmäßig skaliert der HPA Workloads anhand der Ressourcenauslastung – also CPU oder Speicher. Für viele Workloads funktioniert das gut, doch es spiegelt nicht immer den tatsächlichen Bedarf einer Anwendung wider.

Beispiele:

  • Eine Web-API kann unter hoher Anfragelast stehen, ohne dass die CPU-Auslastung ansteigt.
  • Ein Queue-Processing-Service braucht mehr Worker, sobald der Backlog wächst.
  • KI-Inferenz-Workloads hängen oft stärker von der GPU- als von der CPU-Auslastung ab.
  • Streaming-Dienste müssen anhand der Requests pro Sekunde skalieren.

Solche Szenarien verlangen nach Skalierung auf Basis von Anwendungs-Metriken statt Infrastruktur-Metriken.

Kubernetes unterstützt zwar Autoscaling über Custom Metrics, doch in der Vergangenheit waren dafür zusätzliche Komponenten nötig:

  • Prometheus-Adapter – ein separates Deployment, das Prometheus-Metriken an die Kubernetes Metrics API anbindet
  • Custom-Metric-Pipelines – Ingestion-, Storage- und Query-Schichten zwischen Anwendung und HPA
  • Komplexe IAM- und Service-Account-Konfiguration – insbesondere in Managed-Umgebungen wie GKE

Quelle: Gemini Nano Banana Pro

Der operative Aufwand für diese Komponenten war erheblich: Teams mussten die Adapter-Kompatibilität über Kubernetes-Versionen hinweg pflegen, mehrstufige Metrik-Pipelines debuggen und Latenzen aus den Infrastrukturschichten kompensieren. Diese Reibungsverluste bremsten die Adoption – viele Teams kehrten am Ende zur CPU-basierten Skalierung zurück.

Nativer Custom-Metrics-Support in GKE

GKE bietet jetzt eine native Integration zur Bereitstellung von Custom Metrics und vereinfacht damit, wie Anwendungen Metriken an das Autoscaling-System übergeben. Statt Metriken über externe Adapter und Monitoring-Systeme zu leiten, werden sie nun direkt aus den Pods erfasst und an den HPA weitergegeben.

So kann das Autoscaling-System auf das tatsächliche Anwendungsverhalten reagieren – etwa auf Request-Durchsatz oder Ressourcennutzung. Anwendungs-Metriken in Skalierungsstrategien einzubinden, wird damit deutlich einfacher.

Quelle: Gemini Nano Banana Pro

So funktioniert die Lösung

Das neue Feature basiert auf einer Ressource namens AutoscalingMetric.

Diese Ressource definiert:

  • welche Pods die Metriken bereitstellen (über Label-Selektoren)
  • wo der Metrik-Endpoint liegt (Port und Pfad)
  • welche konkrete Metrik erfasst werden soll
  • wie die Metrik an das Autoscaling-System exportiert wird

Sobald sie definiert ist, erfasst GKE die Metriken und stellt sie Komponenten wie dem Load Balancer oder dem Autoscaler zur Verfügung.

Wesentliche Voraussetzungen:

  • Metriken müssen über einen HTTP-Endpoint verfügbar sein.
  • Das Format muss dem Prometheus-Standard entsprechen.
  • Es werden ausschließlich Gauge-Metriken unterstützt.
  • Pro Cluster lassen sich maximal 20 eindeutige Metriken bereitstellen.

Gauge vs. andere Metriktypen: Eine Gauge bildet einen Wert ab, der jederzeit steigen oder fallen kann (z. B. aktuelle Queue-Länge = 45). Counter steigen ausschließlich (z. B. insgesamt verarbeitete Requests = 10.432) und eignen sich daher nicht direkt als Autoscaling-Ziel. Wenn Ihre Anwendung aktuell Counter bereitstellt, müssen Sie daraus eine Gauge ableiten (z. B. eine berechnete Request-Rate), bevor Sie sie mit diesem Feature nutzen können.

Sobald die Metrik registriert ist, liest GKE sie kontinuierlich aus und speist den Wert in die Skalierungslogik ein.

Beispiel: Autoscaling anhand der Queue-Länge

Gehen wir ein vollständiges, in sich geschlossenes Beispiel durch.

Szenario: Ein Background-Worker-Service verarbeitet Jobs aus einer Queue. Wir wollen die Anzahl der Worker-Pods anhand der aktuellen Queue-Länge skalieren – nicht anhand der CPU-Auslastung.

Schritt 1: Metrik aus der Anwendung bereitstellen

Deployen Sie Ihre Anwendung so, dass sie am Endpoint /metrics eine Gauge-Metrik im Prometheus-Format bereitstellt:

# HELP job_queue_length Current number of jobs waiting in the queue
# TYPE job_queue_length gauge
job_queue_length 45

Wir gehen davon aus, dass die Metriken unter http://worker-service:9090/metrics verfügbar sind.

Schritt 2: AutoscalingMetric-Ressource anlegen

Definieren Sie eine AutoscalingMetric-Ressource, die GKE mitteilt, wo die Metrik zu finden ist und wie sie exportiert werden soll:

apiVersion: autoscaling.gke.io/v1beta1
kind: AutoscalingMetric
metadata:
  name: worker-queue-metric
  namespace: default
spec:
  selector:
    matchLabels:
      app: job-worker #The label name and value matching the Pods
  endpoints:
  - port: 9090 #The metrics port number
    path: /metrics #The path to the metric
    metrics:
    - gauge:
      name: job_queue_length #The name of the metric that you are exposing.
      prometheusMetricName: job_queue_length #optional: The Prometheus metric name as exposed by the Pod.

Nach dem Anwenden steht die Metrik dem Autoscaling-System zur Verfügung.

Schritt 3: Horizontal Pod Autoscaler konfigurieren

Jetzt legen wir einen HPA an, der die Custom Metric verwendet.

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: worker-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: job-worker
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Pods
    pods:
      metric:
        name: autoscaling.gke.io|worker-queue-metric|queue_utilization
      target:
        type: AverageValue
        averageValue: 20

Diese Konfiguration bedeutet:

  • Übersteigt die durchschnittliche Queue-Größe 20 Jobs pro Pod, skaliert das System hoch.
  • Schrumpft die Queue, skaliert das System herunter.

Vorteile nativer Custom Metrics

Dieses Feature bringt mehrere zentrale Vorteile mit sich.

  • Anwendungsorientiertes Skalieren: Skalierungsentscheidungen orientieren sich am tatsächlichen Bedarf statt an Infrastruktur-Hilfsgrößen.
  • Geringere operative Komplexität: Keine externen Adapter und keine aufwendigen Metrik-Pipelines mehr.
  • Bessere Performance: Anwendungen skalieren präziser und reagieren schneller auf Lastspitzen.
  • Effizientere Ressourcennutzung: Die Infrastrukturkosten sinken, weil die Skalierung dem realen Bedarf folgt.
  • Flexible Autoscaling-Strategien: Teams können Policies rund um jede Gauge-Metrik bauen, die ihre Anwendung bereitstellt – Queue-Tiefe, aktive Sessions, ausstehende Renderings und vieles mehr.

Mit dem nativen Support für Custom Metrics räumt GKE eine zentrale Hürde aus dem Weg, die anwendungsorientiertes Autoscaling bislang erschwert hat. Da externe Adapter und Prometheus-Pipelines entfallen, lässt sich die Skalierung jetzt direkt an die Metriken koppeln, auf die es wirklich ankommt – Queue-Tiefe, Request-Rate, GPU-Auslastung oder jede andere Gauge-Metrik, die Ihre Anwendung bereitstellt.

Wenn Ihre Workloads regelmäßig an die Grenzen der CPU- oder Speicher-basierten Skalierung stoßen, lohnt sich ein Blick auf dieses Feature. Sie evaluieren bereits einen Proof of Concept oder möchten mehr darüber erfahren? DoiT unterstützt Sie dabei. Unser Team aus über 100 Expertinnen und Experten ist auf maßgeschneiderte Cloud-Lösungen spezialisiert und begleitet Sie durch den gesamten Prozess – von der Optimierung Ihrer Infrastruktur bis hin zu Compliance-Anforderungen und künftigen Skalierungszielen. Kontaktieren Sie uns noch heute.

Nützliche Links: