Asiri - stock.adobe.com

So stellen Sie einen Redis-Cluster auf Kubernetes bereit

Redis lässt sich auf Kubernetes flexibel als Datenbank, Cache oder Message Broker betreiben und profitiert dabei von Skalierbarkeit, Ausfallsicherheit und Automatisierung.

Redis ist eine leistungsstarke, vielseitige Open-Source-Plattform, die sich als NoSQL-Datenbank, Message Broker und Cache einsetzen lässt. In Kombination mit Kubernetes kann Redis hochverfügbar und skalierbar betrieben werden, allerdings erfordert die Konfiguration etwas mehr Aufwand. Dieser Leitfaden zeigt, wie Sie Redis in einem Kubernetes-Cluster (beispielsweise mit K3s) bereitstellen.

Was ist Redis?

Redis ist ein Open-Source-In-Memory-Datenspeicher. Sie können Redis für verschiedene Zwecke verwenden:

  • Ausführen einer NoSQL-Datenbank
  • Vermitteln von Nachrichten als Teil einer Daten-Streaming-Pipeline
  • Zwischenspeichern von Daten für Websites zur Verbesserung der Leistung
  • Ausführen einer Reihe von Vorgängen zur Verarbeitung von Daten oder zur Aktivierung einer Transaktion

Da die von Redis gespeicherten Daten im Memory liegen, ist der Zugriff auf diese Daten schneller als bei der Speicherung auf der Festplatte. Dies ist der Hauptvorteil von Redis gegenüber herkömmlichen Datenbanken oder Key-Value-Stores.

Redis bietet einen Cluster-Modus, der Daten auf mehrere Knoten verteilt, um die Zuverlässigkeit zu erhöhen. Nicht alle Redis-Alternativen bieten diese Funktion. In den Fällen, in denen dies der Fall ist, ist das Clustering oft komplexer als bei Redis. Beispielsweise ist es möglich, eine MySQL-Datenbank mit einer Cluster-Architektur zu betreiben. Dies ist jedoch aufwändiger, da MySQL für den Betrieb in einem nicht verteilten Modus konzipiert ist.

Vorteile des Betriebs von Redis auf Kubernetes

Redis kann in einer Vielzahl von Umgebungen ausgeführt werden, darunter direkt auf Windows- und Linux-Servern. Redis kann auch auf Kubernetes bereitgestellt werden, was in einigen Fällen die Zuverlässigkeit und Leistung erhöhen kann.

Kubernetes kann die Bereitstellung von Redis-Knoten (oder einem einzelnen Knoten, wenn Sie Redis im nicht geclusterten Modus ausführen) über einen Cluster von Kubernetes-Knoten hinweg automatisch verwalten. Wenn einer der Knoten (Node), die einen Teil eines Redis-Clusters hosten, ausfällt, startet Kubernetes den Redis-Knoten automatisch auf einem anderen Server neu.

Redis-Knoten sind Einheiten innerhalb eines Redis-Clusters: sie speichern Daten und übernehmen Replikationsrollen. Kubernetes-Knoten hingegen sind physische oder virtuelle Maschinen, auf denen Container-Workloads ausgeführt werden. Redis-Knoten laufen also auf Kubernetes-Knoten. Admins sollten diesen Unterschied kennen, bevor sie Redis installieren.

Um Redis auf Kubernetes zu skalieren, fügen Sie Redis-Instanzen zu einem Kubernetes-Cluster hinzu oder entfernen Sie sie daraus. Sie können das Load Balancing über Kubernetes verwalten, wodurch Sie Anfragen effizient über mehrere Redis-Knoten leiten können. Die Verwaltung der Protokollierung und Überwachung von Redis ist ebenfalls über Kubernetes möglich. Beispielsweise können Sie Überwachungsagenten zusammen mit Redis innerhalb desselben Kubernetes-Clusters bereitstellen.

Der Hauptgrund, warum Sie Redis möglicherweise nicht auf Kubernetes ausführen möchten, ist, dass die Bereitstellung und Konfiguration etwas komplizierter ist. Sie können Redis mit nur wenigen Befehlen direkt auf einem Linux- oder Windows-Server installieren. Wenn Sie es jedoch auf Kubernetes installieren, müssen Sie einige zusätzliche Schritte ausführen.

Voraussetzungen für die Bereitstellung von Redis auf Kubernetes

Bevor Sie mit der Bereitstellung von Redis auf Kubernetes beginnen, benötigen Sie Folgendes:

  • Kubernetes-Cluster: In diesem Beispiel wird K3s verwendet, aber jede moderne Kubernetes-Distribution sollte Redis unterstützen.
  • Helm: In diesem Beispiel wird Redis mit Helm installiert, einem Paketmanager für Kubernetes. Wenn Helm noch nicht auf Ihrem System installiert ist, finden Sie Installationsoptionen in der Helm-Dokumentation.
  • Grundkenntnisse in Kubernetes: Sie müssen kein K8s-Experte sein, um Redis auf Kubernetes zu installieren. Sie sollten jedoch über praktische Kenntnisse in kubectl und Helm-Charts verfügen, wenn Sie Redis mit Helm installieren möchten.

Bereitstellen von Redis auf Kubernetes

In diesem Beispiel wird ein Redis-Helm-Chart von Bitnami verwendet, das auf GitHub gehostet wird. Es sind alternative Installationsmethoden verfügbar.

Hinweis: In produktiven Umgebungen sollte die Redis-Kommunikation verschlüsselt werden (TLS) und durch geeignete Authentifizierungsmechanismen abgesichert sein. Das Bitnami-Helm-Chart unterstützt TLS-Konfigurationen über values.yaml.

Schritt 1

Installieren Sie das Redis-Helm-Chart.

helm install my-release oci://registry-1.docker.io/bitnamicharts/redis-cluster​

Schritt 2

Überprüfen Sie, ob die Redis-Pods ausgeführt werden. Die Redis-Pods werden nach Abschluss der Helm-Chart-Installation automatisch gestartet. Um zu überprüfen, ob dieser Prozess funktioniert hat, führen Sie den folgenden Befehl aus:

kubectl get pods --all-namespaces

Die Ausgabe sollte eine Liste der Redis-Pods wie die folgende enthalten:

NAMESPACE     NAME                                      READY   STATUS              RESTARTS       AGE
 
default       my-release-redis-cluster-2                0/1     ContainerCreating   0              34s
 
default       my-release-redis-cluster-5                0/1     ContainerCreating   0              34s
 
default       my-release-redis-cluster-1                0/1     ContainerCreating   0              34s
 
default       my-release-redis-cluster-0                0/1     ContainerCreating   0              34s
 
default       my-release-redis-cluster-4                0/1     ContainerCreating   0              34s
 
default       my-release-redis-cluster-3                0/1     ContainerCreating   0              34s

In der Ausgabe befinden sich die Pods noch im Status ContainerCreating. Wenn Sie ein oder zwei Minuten warten und die Liste der Pods erneut aufrufen, sollten Sie sehen, dass sie in den Status Running übergegangen sind.

NAMESPACE     NAME                                      READY   STATUS              RESTARTS       AGE
 
default       my-release-redis-cluster-5                1/1     Running             0              3m16s
 
default       my-release-redis-cluster-1                1/1     Running             0              3m16s
 
default       my-release-redis-cluster-4                1/1     Running             0              3m16s
 
default       my-release-redis-cluster-0                1/1     Running             0              3m16s
 
default       my-release-redis-cluster-2                1/1     Running             0              3m16s
 
default       my-release-redis-cluster-3                1/1     Running             0              3m16s

Die Pods müssen sich im Status Running befinden, bevor Sie mit der Verbindung zum Redis-Cluster fortfahren können.

Schritt 3

Exportieren Sie das Cluster-Passwort als Umgebungsvariable, um eine Verbindung zu Ihrem neu installierten Redis-Cluster herzustellen:

export REDIS_PASSWORD=$(kubectl get secret --namespace "default" my-release-redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d)

Schritt 4

Führen Sie diesen Befehl aus, um einen neuen Container zum Hosten des Redis-Clients zu starten. Dadurch wird der Container gestartet und automatisch eine Bash-Shell darin geöffnet:

kubectl run --namespace default my-release-redis-cluster-client --rm --tty -i --restart='Never' \
 
 --env REDIS_PASSWORD=$REDIS_PASSWORD \
 
--image docker.io/bitnami/redis-cluster:7.2.4-debian-12-r11 - bash

Schritt 5

Geben Sie an diesem Speicherort den folgenden Befehl ein, um die Verbindung zum Cluster herzustellen:

redis-cli -c -h my-release-redis-cluster -a $REDIS_PASSWORD

Sie befinden sich nun an einer Eingabeaufforderung, an der Sie mit Ihrem Redis-Cluster interagieren können. Wenn Sie beispielsweise den Befehl ausführen, sollte eine Ausgabe wie die folgende angezeigt werden.

my-release-redis-cluster:6379> CLUSTER INFO

cluster_state:ok

cluster_slots_assigned:16384

cluster_slots_ok:16384

cluster_slots_pfail:0

cluster_slots_fail:0

cluster_known_nodes:6

cluster_size:3

cluster_current_epoch:6

cluster_my_epoch:1

cluster_stats_messages_ping_sent:473

cluster_stats_messages_pong_sent:475

cluster_stats_messages_sent:948

cluster_stats_messages_ping_received:470

cluster_stats_messages_pong_received:473

cluster_stats_messages_meet_received:5

cluster_stats_messages_received:948

total_cluster_links_buffer_limit_exceeded:0

Alternative Redis-Bereitstellungsoptionen für Kubernetes

Die Bereitstellung von Redis mithilfe eines Helm-Charts ist die einfachste Methode, um Redis auf Kubernetes zum Laufen zu bringen, aber es ist nicht der einzige Weg.

Alternative Ansätze sind die Bereitstellung von Redis Enterprise mithilfe eines Kubernetes-Operators oder die Einrichtung von Redis als Kubernetes-Dienst. Diese Techniken bieten mehr Kontrolle über die Konfiguration von Redis. Wenn Sie jedoch unerfahren in der Nutzung von Redis und/oder Kubernetes sind und eine schnelle und einfache Möglichkeit zur Installation eines Clusters suchen, ist die Helm-Chart-Methode am besten geeignet.

Redis auf einen Blick

Redis ist ein schneller In-Memory-Datenspeicher, der sich als NoSQL-Datenbank, Cache oder Message Broker einsetzen lässt. Auf Kubernetes betrieben, bietet Redis hohe Skalierbarkeit und Verfügbarkeit, erfordert aber eine komplexere Einrichtung. Die einfachste Bereitstellung erfolgt über das Bitnami-Helm-Chart. Voraussetzungen sind ein laufender Kubernetes-Cluster, Helm und grundlegende K8s-Kenntnisse. Für produktive Umgebungen sollten Authentifizierung und TLS aktiviert werden.

Erfahren Sie mehr über Containervirtualisierung