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.