Redis auf Kubernetes mit dem Redis Operator betreiben
AI generated
SET
TTL
Redis / Kubernetes / Skalierung & Betriebsmodelle
Redis auf Kubernetes mit dem Redis Operator betreiben
Sentinel-Failover deklarativ abbilden, ohne die Kontrolle zu verlieren

Redis auf Kubernetes zu betreiben klingt zunächst nach einem einfachen Deployment mit einem Image und einem Service. In der Praxis ist Redis jedoch ein zustandsbehafteter Dienst mit Replikation, Failover-Logik und persistenten Daten, und genau das passt nicht ohne Weiteres zum zustandslosen Grundmodell von Kubernetes. Ein Redis Operator schließt diese Lücke, indem er Sentinel-basiertes Failover, Pod-Identität und Speicherverwaltung als deklarative Custom Resources abbildet, statt sie manuell mit YAML-Dateien und Shell-Skripten nachzubauen. Dieser Artikel zeigt, wie ein Operator konkret arbeitet, welche StatefulSet-Eigenheiten dabei relevant werden und wo der Punkt liegt, an dem ein Managed-Service die pragmatischere Wahl ist.

11 Min. Lesezeit Redis Operator Sentinel auf Kubernetes StatefulSet & PVC

1. Warum Redis auf Kubernetes eine andere Kategorie von Betriebsaufgabe ist

Ein zustandsloser Webserver lässt sich auf Kubernetes fast beliebig skalieren, neu starten oder auf einen anderen Knoten verschieben, ohne dass dabei Daten verloren gehen oder eine bestimmte Instanz besonders wichtig wäre. Redis dagegen hält den kompletten Datensatz im Arbeitsspeicher einer bestimmten Instanz, kennt genau eine Primärinstanz für Schreibvorgänge und muss bei einem Ausfall dieser Primärinstanz koordiniert auf eine Replik umschalten, ohne dass zwei Instanzen gleichzeitig glauben, die Primärinstanz zu sein.

Ein einfaches Kubernetes Deployment mit mehreren Replikas reicht dafür nicht aus, weil es keine Vorstellung von Rollen wie Primär und Replik kennt und Pods bei einem Neustart standardmäßig eine neue, zufällige Identität erhalten. Genau diese Lücke zwischen dem generischen Kubernetes-Modell und den spezifischen Anforderungen von Redis füllt ein Operator, der als eigenständige Kontrollinstanz im Cluster mitläuft und die Redis-spezifische Logik kennt, die Kubernetes selbst nicht mitbringt.

2. Was ein Kubernetes Operator konkret übernimmt: Reconciliation statt Klick-Ops

Ein Operator ist im Kern ein Controller, der eine benutzerdefinierte Ressource, eine sogenannte Custom Resource Definition, beobachtet und den tatsächlichen Zustand des Clusters kontinuierlich an den gewünschten Zustand angleicht. Dieses Prinzip heißt Reconciliation Loop: Der Operator vergleicht in kurzen Abständen, was in der Spezifikation der Custom Resource steht, mit dem, was im Cluster tatsächlich läuft, und korrigiert Abweichungen automatisch, etwa indem er einen fehlenden Pod neu erstellt oder eine ausgefallene Replik ersetzt.

Für Redis bedeutet das konkret, dass der Operator Sentinel-Instanzen überwacht, deren Failover-Entscheidungen ausliest und die zugehörigen Kubernetes-Ressourcen wie Services und StatefulSets entsprechend anpasst, wenn eine neue Primärinstanz gewählt wurde. Der Betreiber muss dafür kein eigenes Skript schreiben, das regelmäßig den Redis-Status abfragt, sondern beschreibt lediglich den gewünschten Endzustand, etwa drei Redis-Instanzen mit Sentinel-Überwachung, und überlässt die operative Umsetzung dem Operator.

3. Sentinel-basiertes Failover deklarativ als Custom Resource abbilden

Redis Sentinel übernimmt seit Jahren die Überwachung einer Primär-Replik-Topologie und initiiert bei Ausfall der Primärinstanz automatisch eine Neuwahl. Auf klassischen virtuellen Maschinen wird Sentinel meist manuell konfiguriert und mit systemd-Units verdrahtet. Ein Operator wie der Spotahome Redis Operator kapselt genau dieses Sentinel-Wissen in einer eigenen Ressource vom Typ RedisFailover und übersetzt eine einzige YAML-Spezifikation in Sentinel-Konfiguration, Redis-Instanzen und die notwendige Verdrahtung zwischen beiden.

Dadurch verschwindet nicht die Komplexität von Sentinel selbst, aber sie wird aus der manuellen Betriebsebene in eine wiederholbare, versionierbare Spezifikation verschoben. Ändert sich beispielsweise die gewünschte Anzahl an Repliken, genügt eine Anpassung des replicas-Felds in der Custom Resource, und der Operator kümmert sich um das Hinzufügen oder Entfernen der passenden Pods samt Aktualisierung der Sentinel-Konfiguration, inklusive der Quorum-Berechnung für Failover-Entscheidungen.


apiVersion: databases.spotahome.com/v1
kind: RedisFailover
metadata:
  name: shop-redis-cache
  namespace: magento
spec:
  sentinel:
    replicas: 3
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
  redis:
    replicas: 3
    resources:
      requests:
        cpu: 200m
        memory: 512Mi
      limits:
        memory: 768Mi
    storage:
      persistentVolumeClaim:
        metadata:
          name: redis-data
        spec:
          accessModes: ["ReadWriteOnce"]
          resources:
            requests:
              storage: 5Gi

4. StatefulSet-Besonderheiten: stabile Pod-Identität und Persistent Volumes

Intern erzeugt der Operator für die Redis-Instanzen kein Deployment, sondern ein StatefulSet, denn nur ein StatefulSet garantiert eine stabile, vorhersehbare Pod-Identität nach dem Schema name-0, name-1, name-2. Diese Ordinal-Nummerierung bleibt über Neustarts hinweg erhalten, was für Sentinel wichtig ist, da es Instanzen anhand ihrer DNS-Namen unterscheidet und nicht anhand zufällig vergebener Pod-Namen, wie sie ein Deployment erzeugen würde.

Ebenso wichtig ist, dass jeder Pod eines StatefulSets ein eigenes Persistent Volume Claim erhält, das bei einem Neustart des Pods auf demselben Knoten oder nach einem Rescheduling erneut an genau diesen Pod gebunden wird. Für Redis bedeutet das, dass eine Replik nach einem Neustart ihre zuletzt persistierten Daten aus dem RDB-Snapshot oder dem AOF-Log wiederfindet, statt mit einem leeren Datensatz zu starten und den kompletten Bestand über die Replikation vom Primär neu laden zu müssen.

5. Praxisbeispiel: eine RedisFailover Custom Resource im Detail

Im obigen Beispiel definiert die Ressource shop-redis-cache drei Redis-Instanzen und drei Sentinel-Instanzen, ein für Produktionsbetrieb übliches Minimum, das auch bei Ausfall eines einzelnen Kubernetes-Knotens noch ein Quorum für Failover-Entscheidungen behält. Der Operator übersetzt diese Spezifikation in ein StatefulSet für Redis, ein Deployment für Sentinel, die notwendigen Services für interne Kommunikation sowie ConfigMaps mit der generierten redis.conf und sentinel.conf.

Praktisch beobachtet man den Status über kubectl get redisfailover und die vom Operator geschriebenen Status-Felder, die unter anderem anzeigen, welche Instanz aktuell als Primärinstanz gilt. Für einen Magento-Shop, der Redis als Full-Page-Cache- oder Session-Backend nutzt, lässt sich dieselbe Custom Resource für unterschiedliche Umgebungen mit angepassten resources-Werten wiederverwenden, etwa kleiner dimensioniert für Staging und großzügiger für Produktion.

6. Storage-Klassen und PVC-Verhalten bei Pod-Neustarts und Rescheduling

Die Wahl der StorageClass entscheidet maßgeblich darüber, wie robust der Betrieb tatsächlich ist. Bei einer StorageClass mit ReadWriteOnce und Node-lokalem Storage bleibt ein Persistent Volume an genau einen Kubernetes-Knoten gebunden, was bedeutet, dass ein Pod bei einem Knotenausfall nicht ohne Weiteres auf einem anderen Knoten mit seinen bisherigen Daten neu starten kann, sondern zunächst auf die Verfügbarkeit des ursprünglichen Knotens warten muss oder ohne persistierte Daten neu aufgebaut wird.

Netzwerkbasierte Storage-Lösungen wie EBS-CSI-Treiber in AWS oder Ceph-basierte Lösungen lösen dieses Problem, indem sie das Volume unabhängig vom Knoten bereitstellen, allerdings mit einer zusätzlichen Latenz gegenüber lokalem NVMe-Speicher, die sich insbesondere bei AOF mit appendfsync everysec bemerkbar macht. Für Cache-Workloads, bei denen ein gelegentlicher Kaltstart tolerierbar ist, reicht häufig auch ein einfacher, lokaler Storage mit bewusst in Kauf genommenem Datenverlust im Ausfallfall.

7. Netzwerk und Service Discovery: Headless Services und Sentinel-Endpunkte

Damit Sentinel und Redis-Clients einzelne Pods gezielt adressieren können, statt nur über einen lastverteilenden Service zu gehen, erzeugt der Operator für das StatefulSet einen Headless Service ohne eigene ClusterIP. Über diesen Headless Service erhält jeder Pod einen stabilen DNS-Namen nach dem Schema shop-redis-cache-0.shop-redis-cache.magento.svc.cluster.local, über den Sentinel gezielt eine bestimmte Instanz überwachen und ansprechen kann.

Für Redis-Clients außerhalb des Clusters, etwa aus der Magento-Anwendung heraus, ist meist ein zusätzlicher, sentinel-fähiger Client sinnvoll, der die aktuelle Primärinstanz über die Sentinel-Endpunkte auflöst, statt eine feste IP-Adresse zu verwenden. Ohne diese Sentinel-Anbindung würde ein Client nach einem Failover weiterhin gegen die alte, inzwischen zur Replik gewordene Instanz schreiben wollen, was zu Schreibfehlern führt, bis die Anwendung neu verbindet.

8. Grenzen des Eigenbetriebs: Split-Brain-Risiken und Operator-Reifegrad

Ein Operator nimmt viel manuelle Arbeit ab, beseitigt aber nicht die grundsätzlichen Herausforderungen verteilter Systeme. Bei einem Netzwerk-Partitionsereignis innerhalb des Kubernetes-Clusters, etwa wenn ein Teil der Knoten die Verbindung zum Rest verliert, kann es weiterhin zu Split-Brain-Situationen kommen, bei denen zwei Teilbereiche des Clusters unterschiedliche Vorstellungen davon haben, welche Instanz die aktuelle Primärinstanz ist. Sentinels Quorum-Mechanismus mindert dieses Risiko, beseitigt es aber nicht vollständig.

Hinzu kommt, dass Community-Operatoren wie der Spotahome Redis Operator mit begrenzten Wartungsressourcen gepflegt werden und Updates von Kubernetes selbst, etwa geänderte API-Versionen für StatefulSets, teils verzögert nachgezogen werden. Wer Redis auf Kubernetes betreibt, übernimmt damit implizit auch die Verantwortung, den Operator selbst zu beobachten, dessen Änderungslogs zu verfolgen und bei größeren Kubernetes-Versionssprüngen vorab in einer Staging-Umgebung zu testen.

9. Wann ein Managed-Service die bessere Wahl als Eigenbetrieb ist

Für Teams mit eigener Kubernetes-Expertise und dem Wunsch, Infrastruktur konsequent als Code zu verwalten, ist ein Redis Operator eine sinnvolle, gut integrierbare Lösung, insbesondere wenn ohnehin schon zahlreiche andere Workloads auf demselben Cluster laufen. Für viele Magento-Betreiber überwiegt jedoch der Aufwand, Sentinel-Failover, Storage-Entscheidungen und Operator-Updates dauerhaft selbst zu verantworten, gegenüber dem eingesparten monatlichen Betrag eines Managed-Service.

Ein Managed-Dienst wie AWS ElastiCache, Azure Cache for Redis oder ein spezialisierter Anbieter wie Redis Cloud übernimmt Failover, Patching und Backups vollständig, wodurch das eigene Team sich auf die Magento-Anwendung konzentrieren kann statt auf die Feinheiten von StatefulSets und Sentinel-Quorum. Als Faustregel gilt: Wer bereits eine ausgereifte Kubernetes-Plattform mit dediziertem Platform-Team betreibt, profitiert vom Operator-Ansatz, während kleinere Teams mit einem Managed-Service in der Regel schneller ein stabileres Ergebnis erzielen.

Aspekt Eigenbetrieb mit Operator Managed-Service Praxisrelevanz für Magento-Shops
Failover-Logik Sentinel, vom Operator verwaltet Vollständig vom Anbieter übernommen Managed spart Betriebsaufwand
Pod-Identität StatefulSet mit stabilen Ordinalen Nicht sichtbar für den Betreiber Relevant nur bei Eigenbetrieb
Storage-Verantwortung StorageClass selbst wählen und pflegen Vom Anbieter abstrahiert Eigenbetrieb erfordert Storage-Know-how
Kostenmodell Kubernetes-Ressourcen plus Betriebsaufwand Nutzungsbasierte Abrechnung Eigenbetrieb bei großem Cluster günstiger
Operator-Reifegrad Community-getragen, begrenzte SLAs Vertragliche SLAs möglich Ausschlaggebend für kritische Shops

Mironsoft

Cache-Layer-Setup und Magento-Redis-Integration

Magento-Cache, der nicht richtig greift oder falsch konfiguriert ist?

Wir richten Redis als Cache- und Session-Backend für Magento sauber ein, tunen Speicherverbrauch und Eviction-Strategien und sorgen dafür, dass Full Page Cache und Session-Storage zuverlässig zusammenspielen.

Redis-Setup

Cache-, Session- und FPC-Backend produktionsreif für Magento konfigurieren.

Memory-Tuning

Speicherverbrauch und Eviction-Policies auf die tatsächliche Shop-Last abstimmen.

High-Availability-Setup

Redis Sentinel oder Cluster für ausfallsichere Magento-Umgebungen einrichten.

10. Zusammenfassung

Redis Operator auf Kubernetes: Das Wichtigste auf einen Blick

Operator-Prinzip

Ein Reconciliation Loop gleicht den tatsächlichen Cluster-Zustand kontinuierlich an eine deklarative Custom Resource an und übernimmt dabei Redis-spezifisches Sentinel-Wissen.

StatefulSet-Vorteil

Stabile Pod-Identität und pro Pod gebundene Persistent Volumes erlauben es Redis-Repliken, nach einem Neustart ihre Daten wiederzufinden statt komplett neu zu synchronisieren.

Praktische Grenzen

Netzwerk-Partitionen innerhalb des Clusters können weiterhin Split-Brain-Situationen erzeugen, und Community-Operatoren folgen Kubernetes-Versionssprüngen nicht immer sofort.

Entscheidungsregel

Mit dediziertem Platform-Team und bestehender Kubernetes-Plattform lohnt sich der Operator-Ansatz, kleinere Teams erreichen mit einem Managed-Service meist schneller ein stabileres Ergebnis.

11. FAQ: Redis Operator auf Kubernetes: Das Wichtigste auf einen Blick

1Was macht Redis auf Kubernetes komplizierter als einen zustandslosen Webserver?
Redis hält den gesamten Datensatz im Arbeitsspeicher einer bestimmten Primärinstanz und benötigt bei deren Ausfall ein koordiniertes Failover, während ein zustandsloser Dienst beliebig neu gestartet werden kann, ohne dass eine bestimmte Instanz besonders wichtig wäre.
2Was ist ein Kubernetes Operator im Kern?
Ein Controller, der eine Custom Resource Definition beobachtet und über einen Reconciliation Loop den tatsächlichen Cluster-Zustand kontinuierlich an die gewünschte Spezifikation angleicht, ohne dass der Betreiber manuell eingreifen muss.
3Wie bildet der Spotahome Redis Operator Sentinel-Failover ab?
Er kapselt Sentinel-Konfiguration und -Überwachung in einer eigenen Ressource vom Typ RedisFailover und übersetzt eine einzige YAML-Spezifikation in Redis-Instanzen, Sentinel-Instanzen und die notwendige Verdrahtung zwischen beiden.
4Warum erzeugt der Operator ein StatefulSet statt eines Deployments?
Nur ein StatefulSet garantiert stabile, vorhersehbare Pod-Namen nach dem Schema name-0, name-1, name-2, die über Neustarts hinweg erhalten bleiben und von Sentinel zur Identifikation der Instanzen benötigt werden.
5Was passiert mit den Daten, wenn ein Redis-Pod neu gestartet wird?
Da jeder Pod eines StatefulSets ein eigenes, an ihn gebundenes Persistent Volume Claim erhält, findet die Instanz nach dem Neustart ihre zuletzt persistierten Daten aus RDB oder AOF wieder, statt leer zu starten.
6Wofür wird ein Headless Service bei Redis auf Kubernetes benötigt?
Ein Headless Service ohne eigene ClusterIP vergibt jedem Pod einen stabilen DNS-Namen, über den Sentinel und Clients gezielt eine bestimmte Redis-Instanz ansprechen können, statt nur lastverteilt einen zufälligen Pod zu erreichen.
7Kann es auf Kubernetes trotz Operator zu Split-Brain-Situationen kommen?
Ja, bei einer Netzwerk-Partition innerhalb des Clusters kann es weiterhin vorkommen, dass zwei Teilbereiche unterschiedliche Vorstellungen von der aktuellen Primärinstanz haben. Sentinels Quorum-Mechanismus mindert dieses Risiko, beseitigt es aber nicht vollständig.
8Welche Storage-Entscheidung beeinflusst die Ausfallsicherheit am stärksten?
Die Wahl der StorageClass: Node-lokaler Storage bindet ein Volume an einen bestimmten Knoten, während netzwerkbasierter Storage wie EBS-CSI oder Ceph das Volume unabhängig vom Knoten verfügbar macht, allerdings mit zusätzlicher Latenz.
9Wann lohnt sich ein Managed-Service gegenüber dem Eigenbetrieb mit Operator?
Wenn kein dediziertes Platform-Team vorhanden ist oder das Team sich lieber auf die Magento-Anwendung als auf Sentinel-Quorum und StatefulSet-Feinheiten konzentrieren möchte, liefert ein Managed-Service in der Regel schneller ein stabileres Ergebnis.
10Muss ein Redis-Client für Kubernetes-Sentinel besonders konfiguriert werden?
Ja, ein sentinel-fähiger Client sollte die aktuelle Primärinstanz über die Sentinel-Endpunkte auflösen, statt eine feste IP-Adresse zu verwenden, da diese sich nach einem Failover ändert.