Inhaltsverzeichnis

  • Neue Superkräfte: Monitoring, Ressourcen-Kontrolle und feines Tuning
  • Besseres Monitoring und Logging mit structlog & Prometheus (v1.5.0)
  • Intelligentes Ressourcenmanagement (v1.5.0)
  • Mehr Flexibilität und Kontrolle (v1.6.0)
  • Deep Dive: API-Skalierung mit HPA und Prometheus-Metriken
  • Fazit: Django und Kubernetes – Ein echtes Dream-Team

Michael Schilonka

DjangoBetrieb

22.08.2025

Baue skalierbare Django-Anwendungen mit Django Hurricane und KubernetesDjango Hurricane: Deine Django-Anwendung auf Kubernetes-Kurs

Mit Django Hurricane entwickelst du skalierbare Anwendungen, die perfekt zu Kubernetes passen. Erfahre, wie du deine Workflows optimierst und die volle Power moderner Container-Orchestrierung für dich nutzt.

Wer Django liebt, weiß seine Stärken zu schätzen: schnelle Entwicklung, ein robustes ORM und eine riesige Community. Doch wenn es um den Einsatz in modernen, cloud-nativen Umgebungen wie Kubernetes geht, stößt das traditionelle Django-Setup an seine Grenzen. Hier kommt Django Hurricane ins Spiel – ein Projekt, das deine Django-Anwendung fit für die Orchestrierung macht.

Django Hurricane

Django Hurricane integriert Konzepte wie Liveness- und Readiness-Probes direkt in den Django-Management-Kontext. Das bedeutet, Kubernetes kann jederzeit den Zustand deiner Anwendung verstehen und intelligent darauf reagieren – zum Beispiel, indem es Traffic erst dann an einen neuen Pod sendet, wenn dieser wirklich bereit ist.

Doch das ist nur der Anfang. Die letzten Updates (Version 1.5.0 und 1.6.0) haben eine Reihe mächtiger neuer Funktionen mitgebracht, die das Entwicklerleben noch einfacher machen. Schauen wir uns die Highlights genauer an.

Neue Superkräfte: Monitoring, Ressourcen-Kontrolle und feines Tuning

Die jüngsten Versionen von Hurricane haben sich darauf konzentriert, dir mehr Kontrolle und bessere Einblicke in deine Anwendung zu geben – genau das, was man in einer dynamischen Kubernetes-Umgebung braucht.

Besseres Monitoring und Logging mit structlog & Prometheus (v1.5.0)

Gute Observability ist das A und O für stabile Systeme. Hurricane macht hier einen großen Schritt nach vorne.

Prometheus-Metriken out-of-the-box

Mit dem Start des Servers via $ python manage.py serve wird standardmäßig ein Metrik-Endpunkt unter /metrics auf dem internen Port bereitgestellt. Diese Metriken sind im Prometheus-Format und können von deinem Monitoring-System einfach ausgelesen werden. Das ist die Grundlage für Alarme und Dashboards. Falls du das nicht benötigst, kannst du es einfach mit der Option --no-metrics deaktivieren. 📈

Strukturiertes Logging

Sobald du structlog zu deinem Projekt hinzufügst, integriert sich Hurricane automatisch. Strukturiertes Logging ist ein Game-Changer, weil Logs nicht mehr nur Textwüsten, sondern maschinenlesbare Daten sind. Das erleichtert die Analyse und Fehlersuche ungemein. Tipp: Für Nutzer der Google Kubernetes Engine (GKE) empfiehlt sich zusätzlich structlog-gcp, um die Logs perfekt für das Google Cloud Logging aufzubereiten.

Intelligentes Ressourcenmanagement (v1.5.0)

In einer Container-Welt sind Ressourcen wie Speicher kostbar und müssen gut verwaltet werden.

Speicherlimit setzen

Speicherlimit setzen: Mit --max-memory kannst du eine Obergrenze für den Arbeitsspeicher festlegen (z. B. --max-memory 512M). Überschreitet deine Anwendung dieses Limit, wird sie kontrolliert neu gestartet. Das verhindert unkontrollierte Abstürze durch "Out of Memory"-Fehler und überlässt Kubernetes die Steuerung über den Neustart des Pods.

Worker-Threads anpassen

Die Option --workers gibt dir die Kontrolle über die Anzahl der Threads im ThreadPoolExecutor. Damit kannst du die Performance für I/O-intensive Aufgaben gezielt optimieren.


Mehr Flexibilität und Kontrolle (v1.6.0)

Version 1.6.0 legt den Fokus auf Konfiguration und die Handhabung spezieller Anwendungsfälle.

Umgang mit großen Datenmengen

Deine App verarbeitet große Datei-Uploads oder riesige JSON-Payloads? Mit --max-body-size und --max-buffer-size kannst du das Verhalten des zugrundeliegenden Tornado-Servers präzise steuern. Damit verhinderst du Pufferüberläufe und sorgst auch bei hohem Datenaufkommen für Stabilität.

Konfiguration auf deine Art

Flexibilität ist Trumpf. Hurricane lässt sich nun über drei Wege konfigurieren: klassische CLI-Argumente, Einträge in den Django Settings oder – und das ist besonders für Kubernetes-Deployments ideal - über Umgebungsvariablen. Dies folgt dem bewährten "12-Factor App"-Prinzip und ermöglicht saubere, umgebungsspezifische Konfigurationen ohne Code-Änderungen.


Deep Dive: API-Skalierung mit HPA und Prometheus-Metriken

Eine der größten Stärken von Kubernetes ist die Fähigkeit zur automatischen Skalierung. Aber die Standardskalierung nach CPU- oder Speicherauslastung ist für I/O-intensive Anwendungen wie Django-APIs oft nicht ideal. Eine API kann unter Volllast stehen (z.B. durch viele langsame Datenbankabfragen), ohne dass die CPU-Last signifikant ansteigt.

Eine viel bessere Metrik ist der request backlog – also die Anzahl der Anfragen, die gerade aktiv von einem Pod bearbeitet werden. Wenn diese Zahl steigt, bedeutet das, dass die Anwendung an ihre Belastungsgrenze kommt und wir mehr Instanzen benötigen.

Im Folgenden zeige ich dir, wie man genau das mit Django Hurricane auf der Google Kubernetes Engine (GKE) umsetzt.

Schritt 1: Die richtige Metrik identifizieren

Django Hurricane stellt über seinen Prometheus-Endpunkt /metrics eine Vielzahl von Messwerten bereit. Für unseren Anwendungsfall ist eine Metrik wie request_queue_length ideal. Sie zeigt uns die Anzahl der gleichzeitig verarbeiteten Anfragen pro Pod. Unser Ziel ist es, zu sagen: "Wenn im Durchschnitt mehr als 5 Anfragen pro Pod aktiv sind, starte einen neuen Pod."

GKE Metrics

Schritt 2: Prometheus-Metriken in GKE sammeln

Der einfachste Weg, Prometheus-Metriken in GKE zu nutzen, ist der Google Cloud Managed Service for Prometheus. Wenn dieser in deinem Cluster aktiviert ist, musst du Kubernetes nur noch sagen, wo es die Metriken deiner Anwendung finden kann.

Wir weisen Kubernetes an, den Port 8081 (den internen Port von Django Hurricane) nach Metriken abzusuchen. Hier ein Beispiel für ein Deployment-Manifest:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-django-api
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-django-api
  template:
    metadata:
      labels:
        app: my-django-api
    spec:
      containers:
      - args:
        - python /app/manage.py serve --req-queue-len 100 --command "collectstatic
          --no-input" --port 8080 --static --max-memory 950
        name: django-hurricane
        image: your-django-app-image:latest
        ports:
        - containerPort: 8080
          name: http
          protocol: TCP
        - containerPort: 8081
          name: metrics
          protocol: TCP

Dann brauchen wir noch ein PodMonitoring:

apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
  name: my-django-api
spec:
  endpoints:
  - interval: 5s  # Interval um den Metrics-Endpunkt abzufragen
    metricRelabeling:
    - action: keep
      regex: request_queue_.+  # Wir exportieren nur diese eine Metrik
      sourceLabels:
      - __name__
    port: metrics  # Das ist der Name des Ports (siehe oben am Deployment)
  selector:
    matchLabels:
      name: my-django-api  # Der Pod Selector
  targetLabels:
    metadata:
    - pod
    - container

Damit landen die Daten auch schon in der Google Cloud Console.

Schritt 3: Den Horizontal Pod Autoscaler (HPA) anlegen

Jetzt kommt der spannendste Teil. Wir definieren einen Horizontal Pod Autoscaler (HPA), der die Metrik aus dem Managed Prometheus Service ausliest und darauf reagiert.

Die von Google Cloud Managed Prometheus gesammelten Metriken erhalten ein spezielles Präfix. Unsere Metrik request_queue_length wird in Google Cloud Monitoring als prometheus.googleapis.com|request_queue_length|gauge verfügbar sein.

Das HPA-Manifest sieht dann so aus:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-django-api-hpa
spec:
  # Beschreibung des Scaling-Verhaltens
  behavior:
    scaleDown:
      policies:
      - periodSeconds: 15
        type: Percent
        value: 100
      selectPolicy: Max
      stabilizationWindowSeconds: 300
    scaleUp:
      policies:
      - periodSeconds: 15
        type: Pods
        value: 4
      - periodSeconds: 15
        type: Percent
        value: 100
      selectPolicy: Max
      stabilizationWindowSeconds: 0
  # Ziel-Deployment, das skaliert werden soll
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-django-api
  
  # Skalierungsgrenzen
  minReplicas: 2
  maxReplicas: 20
  
  # Metriken, die zur Skalierung verwendet werden
  metrics:
  - type: Pods # Wir messen einen Wert pro Pod
    pods:
      metric:
        # Der vollständige Name der Metrik in Google Cloud Monitoring
        name: "prometheus.googleapis.com|request_queue_length|gauge"
      target:
        type: AverageValue # Wir zielen auf einen Durchschnittswert
        averageValue: "5" # Skaliere hoch, wenn der Durchschnitt über 5 liegt

Was passiert hier genau?

  1. Django Hurricane liefert's: Jeder Pod deiner Django-Anwendung stellt unter :8081/metrics die Anzahl der aktiven Anfragen bereit.
  2. Prometheus sammelt's: Der Managed Prometheus Collector in GKE sieht die Annotationen, liest die Metriken regelmäßig aus und speichert sie.
  3. HPA beobachtet's: Der HPA fragt kontinuierlich den Wert für prometheus.googleapis.com|request_queue_length|gauge ab.
  4. HPA reagiert: Er berechnet den Durchschnittswert über alle laufenden Pods. Liegt dieser Wert über unserem Ziel von 5, weist der HPA das Deployment an, die Anzahl der Replicas zu erhöhen (bis zum Maximum von 20). Fällt der Wert wieder, werden Pods elegant heruntergefahren (bis zum Minimum von 2).

Mit diesem Setup schaffst du eine hocheffiziente und reaktionsschnelle API, die sich perfekt an die tatsächliche Last anpasst – und das alles mit Bordmitteln von Django Hurricane, Kubernetes und GKE.

Fazit: Django und Kubernetes – Ein echtes Dream-Team

Django Hurricane schließt die Lücke zwischen der Entwicklungsfreundlichkeit von Django und den betrieblichen Anforderungen von Kubernetes. Die neuen Features für Monitoring, Ressourcenmanagement und flexible Konfiguration machen es zu einem unverzichtbaren Werkzeug für alle, die skalierbare und robuste Webanwendungen in der Cloud betreiben wollen.

Wenn du deine Django-Projekte auf das nächste Level heben möchtest, gib Django Hurricane eine Chance. Deine Anwendung – und dein DevOps-Team – werden es dir danken.


Hast du noch Fragen oder eine Meinung? Mit deinem GitHub Account kannst Du es uns wissen lassen...


Was unsere Kunden über uns sagen

/img/homepage/testimonial_bg.svg
Ofa Bamberg GmbHRainer Kliewe
Ludwig-Maximilians-Universität MünchenProf. Dr. Mario Haim
Deutsches MuseumGeorg Hohmann
Fonds Finanz Maklerservice GmbHNorbert Porazik
Technische Universität HamburgSören Schütt-Sayed
  • Ofa Bamberg GmbH
    Ofa Bamberg GmbH
    B2B Online-Shop | B2C Website | Hosting | Betreuung | Security
    Rainer Kliewe
    © Ofa Bamberg GmbH
    Blueshoe betreut uns und unsere Webapplikationen seit vielen Jahren. Vom Online-Shop bis hin zu großen Teilen unseres Web-Umfelds hat sich das Unternehmen stets kompetent, verlässlich und vorausschauend gezeigt. Wir sind sehr zufrieden mit Blueshoe als Partner.
    Rainer KlieweGeschäftsführer
  • Ludwig-Maximilians-Universität München
    Ludwig-Maximilians-Universität München
    Plattformentwicklung | Hosting | Betreuung | APIs | Website
    Prof. Dr. Mario Haim
    Blueshoe hat unsere Forschungsdatenplattform Munich Media Monitoring (M3) entwickelt und uns hervorragend dabei beraten. Das Team hat unsere Anforderungen genau verstanden und sich aktiv in die Ausgestaltung der Software und der Betriebsumgebung eingebracht. Wir sind froh, dass auch Wartung und weiterführender Support in Blueshoes Händen liegen.
    Prof. Dr. Mario HaimLehrstuhlinhaber, Institut für Kommunikationswissenschaft und Medienforschung
  • Deutsches Museum
    Deutsches Museum
    Digitalisierung | Beratung | Datenbank-Optimierung | GraphQL | CMS
    Georg Hohmann
    Foto: Anne Göttlicher
    Im Rahmen eines komplexen Digitalisierungsprojekts für unsere Exponate-Datenbank war Blueshoe ein äußerst verlässlicher Partner. Sie haben uns nicht nur während des gesamten Projekts hervorragend beraten, sondern unsere Anforderungen perfekt umgesetzt. Dank ihrer Arbeit ist unsere Datenbank nun ein bedeutender Mehrwert für die weltweite wissenschaftliche Forschung.
    Georg HohmannLeiter Deutsches Museum Digital
  • Fonds Finanz Maklerservice GmbH
    Fonds Finanz Maklerservice GmbH
    Plattformentwicklung | Prozess-Systeme | Hosting | Betreuung | Zertifikate | Website
    Norbert Porazik
    © Fonds Finanz Maklerservice GmbH
    Blueshoe ist unsere verlängerte Werkbank für Entwicklung, Wartung und Support unserer Weiterbildungs- und Zertifizierungsplattformen. Das Team hat sich gründlich in unsere Abläufe eingearbeitet, und wir freuen uns, Blueshoe als zuverlässigen Partner an unserer Seite zu haben.
    Norbert PorazikGründer und Geschäftsführer
  • Technische Universität Hamburg
    Technische Universität Hamburg
    Plattformentwicklung | Beratung | Prozess-Systeme | Hosting | Website
    Sören Schütt-Sayed
    Seit 2019 unterstützt uns die Blueshoe GmbH tatkräftig bei der Entwicklung und Weiterentwicklung des "Digital Learning Lab" und der "Digital Learning Tools". Dank ihrer Beratung konnten wir von Anfang an auf eine zukunftssichere, moderne technische Struktur setzen. Die Zusammenarbeit ist reibungslos, und wir fühlen uns rundum gut betreut. Und davon profitieren dann auch die Lehrkräfte in Hamburg.
    Sören Schütt-SayedOberingenieur