Zum Inhalt springen

Redis-kompatible Caches

Eine ManagedValkey ist eine Valkey-Instanz — ein Redis-kompatibler, BSD-lizenzierter Key/Value-Speicher — für einen Cache oder einen Celery-artigen Queue-Broker. Sie rendert direkt, ohne separaten Operator: ein StatefulSet, ein Headless Service, ein Credentials-Secret.

apiVersion: paas.paasbox.com/v1alpha1
kind: ManagedValkey
metadata: { name: broker, namespace: shop }
spec:
plan: s
persistence: true
maxmemoryPolicy: noeviction
status:
conditions: [Reconciled, Ready, Degraded]
phase: Ready
endpoint: { host: broker.shop.svc, port: 6379 }
secretName: broker-credentials

ManagedValkey hat keine Backups, keine Point-in-Time-Recovery und keine Wiederherstellung. Als Cache ist das der Sinn: die Daten zu verlieren kostet ein paar langsame Anfragen, während er sich wieder füllt. Als Queue-Broker setze persistence: true, um die Append-only-Datei über Neustarts hinweg auf einem Volume zu behalten, und entwirf Consumer idempotent — ein Task kann im Prinzip mehr als einmal zugestellt werden. Wenn die Daten selbst überleben müssen, gehören sie in PostgreSQL, nicht hierher.

  • planxs, s, m oder l, dimensioniert CPU, Speicher und die Speicher-Untergrenze:

    PlanCPUSpeicherSpeicher-Untergrenze (Persistenz an)
    xs100m128Mi1Gi
    s250m256Mi1Gi
    m500m512Mi2Gi
    l11Gi4Gi
  • version8, heute die einzige unterstützte Major-Version.

  • persistence — standardmäßig false (ein Cache: neu erstellt, nicht wiederhergestellt, falls er je verloren geht). Nur beim Erstellen des Objekts gesetzt — später ändern bedeutet eine neue Instanz.

  • storage — die Volume-Größe bei persistence: true; die Untergrenze des Plans gilt, wenn du weniger einstellst. Auch nur beim Erstellen gesetzt.

  • maxmemoryPolicynoeviction (Standard: bei maxmemory schlagen Schreibvorgänge fehl, statt dass ein Key verworfen wird — die richtige Wahl für einen Broker) oder allkeys-lru (den am längsten nicht genutzten Key verwerfen — die richtige Wahl für einen Cache). maxmemory selbst wird automatisch auf 80 % des Speichers des Plans gesetzt.

  • hibernatedtrue skaliert die Instanz auf null und behält ihr Volume, falls vorhanden.

Das Credentials-Secret und die Nutzung aus einer App

Abschnitt betitelt „Das Credentials-Secret und die Nutzung aus einer App“

status.secretName trägt die servicebinding.io-Schlüssel type, provider, host, port, password, uri — die uri ist eine einfache redis://…-URL, sodass jede Redis-Client-Bibliothek unverändert funktioniert.

# an der App
uses: [{ name: broker, kind: ManagedValkey, prefix: REDIS_ }]

injiziert REDIS_HOST, REDIS_PORT, REDIS_PASSWORD und REDIS_URI als Referenzen auf broker-credentials. Siehe eine App deployen für eine Worker-App, die einen Broker so nutzt.