Introduzione
Redis è un popolare database NoSQL e un archivio dati in memoria che supporta più strutture dati astratte. Questi includono stringhe, elenchi, hash, set, flussi, ecc. Redis fornisce la sintassi per l'accesso a strutture di dati mutabili, consentendo a più processi di leggerle e scriverle in modo condiviso.
Un cluster Redis è un insieme di istanze Redis che suddivide automaticamente i dati tra i nodi. L'utilizzo di un cluster offre agli utenti la possibilità di dividere i propri set di dati tra i nodi e continuare a eseguire il database anche quando alcuni nodi si guastano.
Questo tutorial ti mostrerà come distribuire un cluster Redis su Kubernetes usando ConfigMap e Helm.
Prerequisiti
- Un cluster Kubernetes composto da due o più nodi
- Timone 3 installato
- kubectl 1.14 o successivo installato
Distribuzione di Redis su Kubernetes con ConfigMap
I passaggi seguenti spiegano come configurare la cache Redis e un pod contenente un'istanza Redis.
- Utilizzando un editor di testo, crea un YAML ConfigMap che memorizzerà la configurazione Redis.
nano redis-conf.yaml
2. Specifica la tua configurazione Redis in data.redis-config
sezione.
apiVersion: v1
kind: ConfigMap
metadata:
name: test-redis-config
data:
redis-config: |
maxmemory 2mb
maxmemory-policy allkeys-lru
La configurazione di esempio sopra imposta la maxmemory
direttiva e indica a Redis di utilizzare il massimo di 2 MB di spazio di archiviazione per il set di dati. La maxmemory-policy
definisce la procedura da applicare al raggiungimento del limite di memoria. allkeys-lru
rimuove prima le chiavi usate meno di recente (LRU).
3. Salva il file ed esci.
4. Crea la ConfigMap applicando il file YAML.
kubectl apply -f redis-conf.yaml
Il sistema conferma che l'operazione è andata a buon fine.
5. Crea un manifest del pod Redis.
nano redis-pod.yaml
6. Specifica la configurazione del pod.
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
Nell'esempio sopra, il manifest definisce config
volume e lo monta su /redis-master
directory sul pod. Il spec.volumes.items
la sezione espone quindi il redis-config
chiave dalla ConfigMap precedentemente creata come redis.conf
file.
7. Salva il file ed esci.
8. Applica il manifest del pod con kubectl.
kubectl apply -f redis-pod.yaml
Il sistema conferma che la creazione del pod è andata a buon fine.
9. Controlla lo stato del pod.
kubectl get pod
10. Inserisci il pod creato con kubectl exec
.
kubectl exec -it redis -- redis-cli
Viene visualizzata la console del server Redis:
11. Utilizzare il comando PING per verificare se il server è online.
PING
Se il server comunica con la console, restituisce PONG
come risposta.
Distribuzione di Redis su Kubernetes con Helm Chart
Helm fornisce un modo rapido per configurare un cluster Redis utilizzando un grafico Helm predefinito.
1. Aggiungi il repository Helm contenente il grafico Redis che desideri installare.
helm repo add [repo-name] [repo-address]
Questo articolo utilizza il grafico Redis disponibile nel repository Bitnami.
2. Aggiorna i repository Helm locali.
helm repo update
3. Usa helm install
per installare il grafico. Il comando di base è il seguente:
helm install redis-test bitnami/redis
Importante: Se installi il grafico su Minikube, non è insolito che i pod si blocchino in un CrashLoopBackOff
evento dovuto a richieste di volume non vincolate. Per evitarlo, usa il --set
opzione e imposta persistence.storageClass
a nfs-client
per entrambi i baccelli.
Poiché Redis viene distribuito con autorizzazioni di volume non amministrative per impostazione predefinita, il pod Redis potrebbe non essere in grado di comunicare con il server. Risolvi questo problema impostando volumePermissions
a true
.
L'ultima helm install
il comando dovrebbe assomigliare a questo:
helm install redis-test --set persistence.storageClass=nfs-client,redis.replicas.persistence.storageClass=nfs-client bitnami/redis --set volumePermissions.enabled=true
4. Esporta la password Redis come variabile di ambiente.
export REDIS_PASSWORD=$(kubectl get secret --namespace default redis-test -o jsonpath="{.data.redis-password}" | base64 --decode)
5. Crea un client pod Redis che utilizzerai per accedere al database.
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
Il sistema conferma la creazione del redis-client
pod.
6. Inserisci il client pod con kubectl exec
.
kubectl exec --tty -i redis-client --namespace default -- bash
Viene visualizzata la console del client.
7. Usa il seguente redis-cli
comando per accedere all'istanza master Redis:
redis-cli -h redis-test-master -a $REDIS_PASSWORD
Viene visualizzata la console per l'istanza master.
8. Per accedere alle repliche, utilizzare lo stesso comando, ma modificare la destinazione.
redis-cli -h redis-test-replicas -a $REDIS_PASSWORD
9. Usa il PING
comando per testare la connessione con il server.
PING
Il PONG
la risposta conferma che il server è in ascolto.