Zum Inhalt

Polycrate API 0.11.16

Release-Datum: 20. Januar 2026
Typ: Bugfixes & UI Improvements

Highlights

  • 🔥 Critical Fix: S3 Buckets bleiben nicht mehr DEGRADED - Reconciliation-Blockade behoben
  • 🔥 Critical Fix: LoadBalancer Traffic-Metriken zeigen jetzt korrekte Werte
  • Fix: Leere Namen bei Backups/Certificates werden automatisch korrigiert
  • UI: S3 Bucket Detail Redesign mit Inline Access Keys
  • UI: Endpoint Monitoring Coverage Chart auf 1h Granularität optimiert

Artefakte

Docker Images

docker pull cargo.ayedo.cloud/polycrate/polycrate-api:0.11.16

Installation

polycrate pull cargo.ayedo.cloud/ayedo/k8s/polycrate-api
polycrate run polycrate-api install

Critical Bugfixes

S3 Bucket Reconciliation Fix

Problem:

S3 Buckets blieben permanent DEGRADED und wurden beim Provider (MinIO) nie erstellt. In den Logs erschien kein Error, nur:

[INFO] No metrics data available for bucket 'None'. Normal for new/empty buckets.

Root Cause:

Bei der Migration zu run_reconciliation() in 0.11.12 wurden early returns im Minio Metrics-Fetching Block eingeführt, die den REPAIRS-Abschnitt komplett überspringen. Für neue Buckets (ohne Metriken) wurde der create_bucket()-Aufruf nie erreicht.

Lösung:

Änderung Beschreibung
Guard für Metrics-Fetch Nur wenn provider_object_created = True
Early Returns entfernt Nur loggen, nicht abbrechen
Exception Handling raise elog + continue
Pre-flight Check Credential-Validierung vor create_bucket()
Besseres Logging Exception-Details in Fehlermeldungen

Nach Deploy:

Betroffene S3 Buckets manuell über den Reconcile-Button anstoßen.

Detaillierte Analyse


LoadBalancer Traffic-Metriken Fix

Problem:

Zwei LoadBalancer, deployed vor 6 und 9 Stunden, zeigten auf "30 Days" bereits 11.4 TB Traffic - und identische Werte obwohl sie unterschiedliche Instanzen sind.

Root Causes:

  1. Fallback ohne Labels - Bei fehlenden Metriken wurde auf alle HAProxy-Metriken im System gefallback
  2. Prometheus Extrapolation - increase(metric[30d]) für eine 6h alte Metrik wird auf 30 Tage hochgerechnet
  3. Range Query für Instant-Daten - increase() sollte als Instant Query laufen

Lösung:

Änderung Beschreibung
Fallbacks entfernt Keine Metriken = 0 (nicht "alle HAProxy-Metriken")
Instant Queries increase() als Instant Query statt Range
Zeitlimit Periode auf LBI-Lebenszeit begrenzt
Label-Validierung Format-Prüfung der Prometheus-Labels

LoadBalancer Dokumentation


Bugfixes

Backup & Certificate Name Validation

Problem:

Backups und Certificates wurden mit leerem Namen erstellt und erschienen im UI als "Unnamed" oder "None".

Root Cause:

  • sync_from_cert_manager_cr() nutzte metadata.get('name', '') - leerer String als Default
  • Model-Validatoren werden bei get_or_create() nicht automatisch aufgerufen

Lösung:

Komponente Änderung
Serializer name als required mit min_length=1
Model _normalize_name_for_api() Helper mit Fallback-Kette
Celery fix_empty_object_names() Task bei Beat-Start

Automatische Korrektur:

Bestehende Einträge ohne Namen werden beim nächsten Celery-Beat-Start automatisch repariert (Fallback auf secret_name oder UUID).


UI Improvements

S3 Bucket Detail Redesign

Das S3 Bucket Detail UI wurde analog zum LoadbalancerInstance UI redesigned:

  • Inline Access Keys - Access Key ID und Secret werden direkt angezeigt (mit Copy-Button)
  • Metrics Dashboard - Usage und Object Count mit Timeline-Graphen
  • Kantige Collapsibles - Konsistente UI-Sprache ohne rounded-* Klassen

S3 Storage Dokumentation

Endpoint Monitoring Coverage Chart

Änderung:

Die Granularität des Coverage Charts wurde von 5-Minuten auf 1-Stunden-Intervalle optimiert.

Grund:

  • Bei 30-Tage-Ansicht waren 8.640 Datenpunkte zu unübersichtlich
  • 1h-Intervalle zeigen sinnvollere Trends (720 Datenpunkte)
  • Bessere Performance bei der Datenabfrage

Migration

Keine Datenbank-Migration erforderlich.

Nach Deploy:

  1. DEGRADED S3 Buckets manuell reconcilen (Reconcile-Button)
  2. fix_empty_object_names Task läuft automatisch beim Celery-Beat-Start

Changelog

Datei Änderung
src/s3/models.py S3Cluster.create_bucket() - Pre-flight Check, Error Logging
src/s3/models.py S3Bucket.run_reconciliation() - Guard + keine early returns
src/loadbalancers/models.py _fetch_metrics_data() komplett überarbeitet
src/backups/serializers.py Name-Validierung hinzugefügt
src/certificates/serializers.py Name-Validierung hinzugefügt
src/polycrate_api/tasks.py fix_empty_object_names() Task
src/polycrate_api/views.py Coverage Chart Step auf 1h
src/s3/templates/s3/bucket_detail_new.html UI Redesign

Block-Version

# block.poly
name: cargo.ayedo.cloud/ayedo/k8s/polycrate-api
version: 0.5.20
app_version: "0.11.16"

Spezifikationen

Die detaillierten Implementierungs-Spezifikationen finden sich in .specs/0.11.16/:

  • s3-bucket-reconciliation-fix.md - S3 Reconciliation Analyse
  • loadbalancer-metrics-fix.md - LoadBalancer Metrics Analyse
  • backup-name-validation.md - Backup Name Validation
  • certificate-name-validation.md - Certificate Name Validation
  • s3-bucket-ui-redesign.md - S3 UI Redesign
  • endpoint-monitoring-coverage-chart-granularity.md - Coverage Chart