Introducción
Redis es una base de datos NoSQL popular y un almacén de datos en memoria que admite múltiples estructuras de datos abstractas. Estos incluyen cadenas, listas, hashes, conjuntos, flujos, etc. Redis proporciona sintaxis para acceder a estructuras de datos mutables, lo que permite que múltiples procesos los lean y escriban de forma compartida.
Un clúster de Redis es un conjunto de instancias de Redis que fragmenta automáticamente los datos en los nodos. El uso de un clúster brinda a los usuarios la capacidad de dividir sus conjuntos de datos entre nodos y seguir ejecutando la base de datos incluso cuando fallan algunos nodos.
Este tutorial le mostrará cómo implementar un clúster de Redis en Kubernetes mediante ConfigMap y Helm.
Requisitos previos
- Un clúster de Kubernetes que consta de dos o más nodos
- Helm 3 instalado
- kubectl 1.14 o superior instalado
Implementación de Redis en Kubernetes con ConfigMap
Los siguientes pasos explican cómo configurar la caché de Redis y un pod que contiene una instancia de Redis.
- Usando un editor de texto, cree un ConfigMap YAML que almacenará la configuración de Redis.
nano redis-conf.yaml
2. Especifique su configuración de Redis en data.redis-config
sección.
apiVersion: v1
kind: ConfigMap
metadata:
name: test-redis-config
data:
redis-config: |
maxmemory 2mb
maxmemory-policy allkeys-lru
La configuración de ejemplo anterior establece la maxmemory
y le dice a Redis que use el máximo de 2 MB de almacenamiento para el conjunto de datos. La maxmemory-policy
La directiva define el procedimiento que se aplicará cuando se alcance el límite de memoria. allkeys-lru
primero elimina las claves usadas menos recientemente (LRU).
3. Guarde el archivo y salga.
4. Cree el ConfigMap aplicando el archivo YAML.
kubectl apply -f redis-conf.yaml
El sistema confirma que la operación fue exitosa.
5. Cree un manifiesto de pod de Redis.
nano redis-pod.yaml
6. Especifique la configuración de su módulo.
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
En el ejemplo anterior, el manifiesto define config
volumen y lo monta en /redis-master
directorio en el pod. spec.volumes.items
luego expone el redis-config
clave del ConfigMap creado previamente como redis.conf
archivo.
7. Guarde el archivo y salga.
8. Aplique el manifiesto del pod con kubectl.
kubectl apply -f redis-pod.yaml
El sistema confirma que la creación del pod fue exitosa.
9. Verifique el estado de la cápsula.
kubectl get pod
10. Ingrese al pod creado con kubectl exec
.
kubectl exec -it redis -- redis-cli
Aparece la consola del servidor Redis:
11. Use el comando PING para verificar si el servidor está en línea.
PING
Si el servidor se comunica con la consola, devuelve PONG
como respuesta.
Implementación de Redis en Kubernetes con Helm Chart
Helm proporciona una forma rápida de configurar un clúster de Redis mediante un gráfico de Helm prefabricado.
1. Agregue el repositorio de Helm que contiene el gráfico de Redis que desea instalar.
helm repo add [repo-name] [repo-address]
Este artículo utiliza el gráfico de Redis disponible en el repositorio de Bitnami.
2. Actualice los repositorios locales de Helm.
helm repo update
3. Usa helm install
para instalar el gráfico. El comando básico es el siguiente:
helm install redis-test bitnami/redis
Importante: Si instala el gráfico en Minikube, no es raro que los pods se atasquen en un CrashLoopBackOff
evento debido a reclamos de volumen no consolidado. Para evitar esto, use el --set
y configure persistence.storageClass
a nfs-client
para ambas vainas.
Dado que Redis se implementa con permisos de volumen no administrativos de forma predeterminada, es posible que el pod de Redis no pueda comunicarse con el servidor. Resuelva este problema configurando volumePermissions
a true
.
La helm install
final El comando debería verse así:
helm install redis-test --set persistence.storageClass=nfs-client,redis.replicas.persistence.storageClass=nfs-client bitnami/redis --set volumePermissions.enabled=true
4. Exporte la contraseña de Redis como una variable de entorno.
export REDIS_PASSWORD=$(kubectl get secret --namespace default redis-test -o jsonpath="{.data.redis-password}" | base64 --decode)
5. Cree un pod de cliente de Redis que usará para acceder a la base de datos.
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
El sistema confirma la creación del redis-client
vaina.
6. Ingrese al pod de cliente con kubectl exec
.
kubectl exec --tty -i redis-client --namespace default -- bash
Aparece la consola del cliente.
7. Utilice el siguiente redis-cli
comando para acceder a la instancia maestra de Redis:
redis-cli -h redis-test-master -a $REDIS_PASSWORD
Se muestra la consola de la instancia maestra.
8. Para acceder a las réplicas, use el mismo comando, pero modifique el destino.
redis-cli -h redis-test-replicas -a $REDIS_PASSWORD
9. Usa el PING
comando para probar la conexión con el servidor.
PING
El PONG
la respuesta confirma que el servidor está escuchando.