30 Skalierung von Anwendungen

Anwendungsskalierung in OpenShift implementiert adaptive Kapazitätsmanagement-Mechanismen für dynamische Workload-Anpassung durch automatisierte und manuelle Skalierungsstrategien. Diese Frameworks ermöglichen Performance-Optimierung und Kosteneffizienz durch bedarfsgerechte Ressourcenallokation basierend auf Anwendungsload, System-Metriken und Business-Anforderungen.

30.1 Skalierungsmodelle und -ansätze

Die Skalierung von Anwendungen in OpenShift folgt verschiedenen Strategien, die je nach Anwendungsarchitektur und Performance-Anforderungen eingesetzt werden können.

30.1.1 Horizontale Skalierung (Scale-Out)

Horizontale Skalierung erhöht die Anzahl der Pod-Replikas für Load-Distribution über multiple Container-Instanzen. Diese Strategie unterstützt verteilte Anwendungsarchitekturen und ermöglicht nahezu unbegrenzte Kapazitätserweiterung innerhalb der Cluster-Grenzen.

Vorteile der horizontalen Skalierung: - Bessere Ausfallsicherheit durch Redundanz - Lineare Performance-Steigerung bei gut designten Anwendungen - Verteilung der Last auf mehrere Nodes

Geeignet für: Stateless Anwendungen, Web-Services, API-Server

30.1.2 Vertikale Skalierung (Scale-Up)

Vertikale Skalierung modifiziert CPU- und Memory-Ressourcenallokationen für individuelle Container-Instanzen zur Performance-Optimierung ohne Architektur-Änderungen. Dieser Ansatz eignet sich für Anwendungen mit begrenzter horizontaler Skalierbarkeit.

Anwendungsfälle für vertikale Skalierung: - Legacy-Anwendungen ohne Multi-Threading - Datenbanken mit komplexen Transaktionen - Anwendungen mit hohem Memory-Bedarf

30.1.3 Cluster-Auto-Skalierung

Cluster-Auto-Skalierung erweitert die verfügbare Infrastruktur-Kapazität durch automatisches Hinzufügen oder Entfernen von Nodes. Diese Infrastructure-Elastizität unterstützt dynamische Kapazitätsplanung und Kostenoptimierung.

30.2 Horizontal Pod Autoscaler (HPA)

Der Horizontal Pod Autoscaler ist OpenShifts primärer Mechanismus für automatische horizontale Skalierung basierend auf verschiedenen Metriken.

30.2.1 Metriken-basierte Skalierung

HPA nutzt verschiedene Metriken für automatische Replica-Anpassungen:

CPU-Utilization: Standard-Metrik für CPU-basierte Skalierung

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: webapp-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: webapp
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70

Memory-Consumption: Memory-basierte Skalierung für speicher-intensive Anwendungen

Custom Application Metrics: Anwendungsspezifische Metriken wie Request-Queues oder Datenbankverbindungen

30.2.2 Skalierungs-Policies

Skalierungs-Policies implementieren Kontrollemechanismen für stabiles Skalierungsverhalten:

Scale-Up Policy: - Maximale Anzahl neuer Pods pro Skalierungsintervall - Prozentuale Erhöhung der aktuellen Replica-Anzahl

Scale-Down Policy: - Verzögerung vor Scale-Down-Operationen - Maximale Anzahl zu entfernender Pods pro Interval

behavior:
  scaleUp:
    stabilizationWindowSeconds: 60
    policies:
    - type: Percent
      value: 100
      periodSeconds: 60
  scaleDown:
    stabilizationWindowSeconds: 300
    policies:
    - type: Percent
      value: 10
      periodSeconds: 60

30.2.3 Multi-Metriken Skalierung

Komplexe Skalierungsentscheidungen basieren auf mehreren Performance-Indikatoren mit gewichteter Bewertung oder logischen Verknüpfungen. Diese Mechanismen unterstützen komplexe Anwendungscharakteristika und spezifische Performance-Anforderungen.

30.3 Vertical Pod Autoscaler (VPA)

Der Vertical Pod Autoscaler analysiert historische Ressourcennutzungsmuster für optimale Ressourcen-Empfehlungen und automatische Anpassungen.

30.3.1 Ressourcen-Empfehlungen

VPA-Empfehlungs-Engines nutzen Machine Learning-basierte Ansätze zur Analyse von Resource-Usage-Patterns:

Target-Empfehlungen: Optimale CPU- und Memory-Requests basierend auf typischer Nutzung

Lower Bound: Minimale Ressourcen für funktionsfähige Anwendung

Upper Bound: Maximale sinnvolle Ressourcenallokation

Uncapped Target: Empfehlung ohne Upper-Bound-Beschränkungen

30.3.2 VPA-Modi

Modus Beschreibung Anwendungsfall
Off Nur Empfehlungen, keine Änderungen Analyse und Monitoring
Initial Setzt Ressourcen nur bei Pod-Erstellung Neue Deployments
Recreation Pod-Neustart für Ressourcen-Updates Nicht-kritische Anwendungen
Auto In-Place Updates ohne Neustart Kritische Services

30.3.3 Quality of Service Integration

VPA berücksichtigt QoS-Klassen bei Skalierungsentscheidungen:

30.4 Custom Metrics und External Metrics

OpenShift ermöglicht Skalierung basierend auf anwendungsspezifischen und externen Metriken für domänen-spezifische Skalierungsstrategien.

30.4.1 Application-Level Metrics

Anwendungsspezifische Metriken für Business-Logic-getriebene Skalierung:

Message Queue Depth: Skalierung basierend auf Warteschlangenlänge

metrics:
- type: Object
  object:
    metric:
      name: queue_depth
    target:
      type: AverageValue
      averageValue: "50"

Database Connections: Skalierung basierend auf aktiven Datenbankverbindungen

Response Time: Skalierung basierend auf Antwortzeiten

30.4.2 External Metrics Integration

Integration externer Monitoring-Systeme für umfassende metriken-basierte Skalierung:

Prometheus-Integration:

metrics:
- type: External
  external:
    metric:
      name: prometheus_custom_metric
      selector:
        matchLabels:
          app: webapp
    target:
      type: AverageValue
      averageValue: "100"

Cloud-Provider Metrics: AWS CloudWatch, Azure Monitor, Google Cloud Monitoring

APM-Tools: New Relic, Datadog, AppDynamics

30.4.3 Scheduled Scaling

Zeitbasierte oder ereignisgesteuerte Skalierung für vorhersagbare Workload-Muster:

Cron-basierte Skalierung:

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: scheduled-scaler
  annotations:
    scheduler.alpha.kubernetes.io/cron: "0 9 * * 1-5"
    scheduler.alpha.kubernetes.io/replicas: "10"

Business Hours Scaling: Automatische Erhöhung während Geschäftszeiten

Seasonal Patterns: Skalierung für wiederkehrende Lastmuster

30.5 Skalierungs-Performance und -Optimierung

Effektive Skalierung erfordert Optimierungen zur Minimierung der Latenz zwischen Skalierungstrigger und verfügbarer Kapazität.

30.5.1 Scale-Up Optimierung

Pod Startup Beschleunigung: - Image-Pre-Pulling auf Nodes - Init Container für Abhängigkeiten - Resource Pre-Allocation

Readiness und Liveness Probes:

readinessProbe:
  httpGet:
    path: /health/ready
    port: 8080
  initialDelaySeconds: 10
  periodSeconds: 5
livenessProbe:
  httpGet:
    path: /health/live
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10

30.5.2 Scale-Down Safety

Graceful Pod Termination für unterbrechungsfreie Skalierungsoperationen:

PreStop Hooks:

lifecycle:
  preStop:
    exec:
      command:
      - /bin/sh
      - -c
      - "nginx -s quit; while killall -0 nginx; do sleep 1; done"

Termination Grace Period: Ausreichend Zeit für sauberes Herunterfahren

Pod Disruption Budgets: Schutz vor gleichzeitigem Ausfall mehrerer Pods

30.6 Multi-Tier Application Skalierung

Koordinierte Skalierung über Anwendungsschichten hinweg für ausgewogene Performance und Ressourcennutzung.

30.6.1 Dependency-Aware Scaling

Skalierungskoordination zwischen abhängigen Services zur Vermeidung von Engpässen:

Frontend-Backend Koordination: Proportionale Skalierung von Web- und API-Schichten

Database Scaling: Koordination zwischen Anwendungs- und Datenbankkapazität

Cache Layer Scaling: Skalierung von Caching-Schichten entsprechend der Anwendungslast

30.6.2 Service Mesh Integration

Traffic-bewusste Skalierung basierend auf Service-to-Service Kommunikationsmustern:

Istio Integration: Skalierung basierend auf Service Mesh Metriken - Request Rate pro Service - Latenz zwischen Services - Error Rate Patterns

Load Balancing Koordination: Abstimmung zwischen Skalierung und Traffic-Verteilung

30.7 Ressourcen-Constraints und Limits

Sicherheitsmechanismen für automatisierte Skalierungssysteme zur Vermeidung von Ressourcenerschöpfung.

30.7.1 Skalierungs-Grenzen

Replica-Limits: Minimum- und Maximum-Anzahl von Pod-Replikas

spec:
  minReplicas: 2
  maxReplicas: 50

Resource-Budget Integration: Berücksichtigung von Projekt-Ressourcenquotas

apiVersion: v1
kind: ResourceQuota
metadata:
  name: project-quota
spec:
  hard:
    requests.cpu: "20"
    requests.memory: 40Gi
    pods: "50"

30.7.2 Node-Capacity Awareness

Integration der Cluster-Node-Verfügbarkeit in Skalierungsentscheidungen:

Node Selector Constraints: Skalierung nur auf kompatible Nodes

Taints und Tolerations: Berücksichtigung von Node-Beschränkungen

Resource Pressure: Vermeidung von Skalierung bei Node-Ressourcenmangel

30.7.3 Priority-based Scaling

Priorisierung kritischer Workloads bei Ressourcenkonflikten:

apiVersion: v1
kind: Pod
metadata:
  name: critical-app
spec:
  priorityClassName: high-priority
  containers:
  - name: app
    image: myapp:latest
    resources:
      requests:
        cpu: "1"
        memory: "2Gi"

Priority Classes: Definition von Anwendungsprioritäten

Preemption: Verdrängung niedrigprioriger Pods für kritische Anwendungen

30.8 Cost-Optimization und Efficiency

Kostenoptimierte Skalierungsstrategien für wirtschaftlichen Ressourceneinsatz.

30.8.1 Cost-Aware Scaling

Berücksichtigung von Infrastrukturkosten bei Skalierungsentscheidungen:

Spot Instance Integration: Nutzung günstiger Spot-Instanzen für Scale-Out - Automatischer Fallback bei Spot-Instance-Verlust - Gemischte Instance-Typen für Kostenoptimierung

Right-Sizing Analytics: Analyse von Skalierungsmustern für Langzeit-Kapazitätsplanung

30.8.2 Predictive Scaling

Vorhersagebasierte Skalierung zur Reduzierung reaktiver Skalierungsverzögerungen:

Historical Data Analysis: Machine Learning basiert auf vergangenen Lastmustern

Trend Prediction: Erkennung von Saisonalität und Wachstumstrends

Proactive Scale-Up: Vorskalierung vor erwarteten Lastspitzen

30.8.3 Resource Efficiency Metrics

Überwachung der Skalierungseffizienz für kontinuierliche Optimierung:

Utilization Rates: Tatsächliche vs. allokierte Ressourcen

Scaling Frequency: Häufigkeit von Scale-Up/Scale-Down-Operationen

Cost per Transaction: Infrastrukturkosten pro Anwendungstransaktion

Waste Metrics: Ungenutzte Ressourcenkapazitäten