Einführung
Redis ist eine beliebte NoSQL-Datenbank und ein In-Memory-Datenspeicher, der mehrere abstrakte Datenstrukturen unterstützt. Dazu gehören Strings, Listen, Hashes, Sets, Streams usw. Redis bietet eine Syntax für den Zugriff auf veränderliche Datenstrukturen, sodass mehrere Prozesse sie gemeinsam lesen und schreiben können.
Ein Redis-Cluster ist eine Reihe von Redis-Instanzen, die Daten automatisch über Knoten verteilen. Die Verwendung eines Clusters gibt Benutzern die Möglichkeit, ihre Datensätze auf Knoten aufzuteilen und die Datenbank weiter auszuführen, selbst wenn einige Knoten ausfallen.
Dieses Tutorial zeigt Ihnen, wie Sie mit ConfigMap und Helm einen Redis-Cluster auf Kubernetes bereitstellen.
Voraussetzungen
- Ein Kubernetes-Cluster, der aus zwei oder mehr Knoten besteht
- Helm 3 installiert
- kubectl 1.14 oder höher installiert
Bereitstellen von Redis auf Kubernetes mit ConfigMap
In den folgenden Schritten wird erläutert, wie Sie den Redis-Cache und einen Pod mit einer Redis-Instanz konfigurieren.
- Erstellen Sie mit einem Texteditor eine ConfigMap-YAML-Datei, in der die Redis-Konfiguration gespeichert wird.
nano redis-conf.yaml
2. Geben Sie Ihre Redis-Konfiguration in data.redis-config
an Abschnitt.
apiVersion: v1
kind: ConfigMap
metadata:
name: test-redis-config
data:
redis-config: |
maxmemory 2mb
maxmemory-policy allkeys-lru
Die obige Beispielkonfiguration legt maxmemory
fest Direktive und weist Redis an, maximal 2 MB Speicherplatz für den Datensatz zu verwenden. Die maxmemory-policy
Die Direktive definiert das anzuwendende Verfahren, wenn die Speichergrenze erreicht ist. allkeys-lru
entfernt zuerst die weniger kürzlich verwendeten (LRU) Schlüssel.
3. Speichern Sie die Datei und beenden Sie sie.
4. Erstellen Sie die ConfigMap, indem Sie die YAML-Datei anwenden.
kubectl apply -f redis-conf.yaml
Das System bestätigt, dass der Vorgang erfolgreich war.
5. Erstellen Sie ein Redis-Pod-Manifest.
nano redis-pod.yaml
6. Geben Sie Ihre Pod-Konfiguration an.
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis:5.0.4
command:
- redis-server
- "/redis-master/redis.conf"
env:
- name: MASTER
value: "true"
ports:
- containerPort: 6379
resources:
limits:
cpu: "0.1"
volumeMounts:
- mountPath: /redis-master-data
name: data
- mountPath: /redis-master
name: config
volumes:
- name: data
emptyDir: {}
- name: config
configMap:
name: test-redis-config
items:
- key: redis-config
path: redis.conf
Im obigen Beispiel definiert das Manifest config
Volume und mountet es unter /redis-master
Verzeichnis auf dem Pod. Die spec.volumes.items
Abschnitt macht dann die redis-config
verfügbar key aus der zuvor erstellten ConfigMap als redis.conf
Datei.
7. Speichern Sie die Datei und beenden Sie.
8. Wenden Sie das Pod-Manifest mit kubectl an.
kubectl apply -f redis-pod.yaml
Das System bestätigt, dass die Pod-Erstellung erfolgreich war.
9. Pod-Status prüfen.
kubectl get pod
10. Geben Sie den erstellten Pod mit kubectl exec
ein .
kubectl exec -it redis -- redis-cli
Die Redis-Serverkonsole wird angezeigt:
11. Prüfen Sie mit dem PING-Befehl, ob der Server online ist.
PING
Wenn der Server mit der Konsole kommuniziert, gibt er PONG
zurück als Antwort.
Bereitstellen von Redis auf Kubernetes mit Helm Chart
Helm bietet eine schnelle Möglichkeit zum Einrichten eines Redis-Clusters mithilfe eines vorgefertigten Helm-Diagramms.
1. Fügen Sie das Helm-Repository hinzu, das das Redis-Diagramm enthält, das Sie installieren möchten.
helm repo add [repo-name] [repo-address]
Dieser Artikel verwendet das im Bitnami-Repository verfügbare Redis-Diagramm.
2. Lokale Helm-Repositories aktualisieren.
helm repo update
3. Verwenden Sie helm install
um das Diagramm zu installieren. Der grundlegende Befehl lautet wie folgt:
helm install redis-test bitnami/redis
Wichtig: Wenn Sie das Diagramm auf Minikube installieren, ist es nicht ungewöhnlich, dass Pods in einem CrashLoopBackOff
stecken bleiben Ereignis aufgrund ungebundener Volumenansprüche. Um dies zu verhindern, verwenden Sie --set
Option und legen Sie persistence.storageClass
fest zu nfs-client
für beide Hülsen.
Da Redis standardmäßig mit nicht-administrativen Volume-Berechtigungen bereitgestellt wird, kann der Redis-Pod möglicherweise nicht mit dem Server kommunizieren. Beheben Sie dieses Problem, indem Sie volumePermissions
festlegen zu true
.
Die letzte helm install
Befehl sollte so aussehen:
helm install redis-test --set persistence.storageClass=nfs-client,redis.replicas.persistence.storageClass=nfs-client bitnami/redis --set volumePermissions.enabled=true
4. Exportieren Sie das Redis-Passwort als Umgebungsvariable.
export REDIS_PASSWORD=$(kubectl get secret --namespace default redis-test -o jsonpath="{.data.redis-password}" | base64 --decode)
5. Erstellen Sie einen Redis-Client-Pod, den Sie für den Zugriff auf die Datenbank verwenden.
kubectl run --namespace default redis-client --restart='Never' --env REDIS_PASSWORD=$REDIS_PASSWORD --image docker.io/bitnami/redis:6.2.5-debian-10-r63 --command -- sleep infinity
Das System bestätigt die Erstellung des redis-client
Pod.
6. Rufen Sie den Client-Pod mit kubectl exec
auf .
kubectl exec --tty -i redis-client --namespace default -- bash
Die Client-Konsole wird angezeigt.
7. Verwenden Sie das folgende redis-cli
Befehl zum Zugriff auf die Redis-Masterinstanz:
redis-cli -h redis-test-master -a $REDIS_PASSWORD
Die Konsole für die Masterinstanz wird angezeigt.
8. Um auf die Reproduktionen zuzugreifen, verwenden Sie denselben Befehl, aber ändern Sie das Ziel.
redis-cli -h redis-test-replicas -a $REDIS_PASSWORD
9. Verwenden Sie den PING
Befehl zum Testen der Verbindung mit dem Server.
PING
Das PONG
Antwort bestätigt, dass der Server zuhört.