Présentation
Redis est une base de données NoSQL populaire et un magasin de données en mémoire prenant en charge plusieurs structures de données abstraites. Ceux-ci incluent des chaînes, des listes, des hachages, des ensembles, des flux, etc. Redis fournit une syntaxe pour accéder aux structures de données mutables, permettant à plusieurs processus de les lire et de les écrire de manière partagée.
Un cluster Redis est un ensemble d'instances Redis qui répartit automatiquement les données entre les nœuds. L'utilisation d'un cluster donne aux utilisateurs la possibilité de diviser leurs ensembles de données entre les nœuds et de continuer à exécuter la base de données même lorsque certains nœuds échouent.
Ce didacticiel vous montrera comment déployer un cluster Redis sur Kubernetes à l'aide de ConfigMap et Helm.
Prérequis
- Un cluster Kubernetes composé de deux nœuds ou plus
- Helm 3 installé
- kubectl 1.14 ou supérieur installé
Déployer Redis sur Kubernetes avec ConfigMap
Les étapes suivantes expliquent comment configurer le cache Redis et un pod contenant une instance Redis.
- À l'aide d'un éditeur de texte, créez un YAML ConfigMap qui stockera la configuration Redis.
nano redis-conf.yaml
2. Spécifiez votre configuration Redis dans le data.redis-config
rubrique.
apiVersion: v1
kind: ConfigMap
metadata:
name: test-redis-config
data:
redis-config: |
maxmemory 2mb
maxmemory-policy allkeys-lru
L'exemple de configuration ci-dessus définit la maxmemory
directive et indique à Redis d'utiliser le maximum de 2 Mo de stockage pour l'ensemble de données. La maxmemory-policy
La directive définit la procédure à appliquer lorsque la limite de mémoire est atteinte. allkeys-lru
supprime d'abord les clés les moins récemment utilisées (LRU).
3. Enregistrez le fichier et quittez.
4. Créez le ConfigMap en appliquant le fichier YAML.
kubectl apply -f redis-conf.yaml
Le système confirme que l'opération a réussi.
5. Créez un manifeste de pod Redis.
nano redis-pod.yaml
6. Spécifiez la configuration de votre 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
Dans l'exemple ci-dessus, le manifeste définit config
volume et le monte sur /redis-master
répertoire sur le pod. Les spec.volumes.items
section expose ensuite le redis-config
clé du ConfigMap créé précédemment en tant que redis.conf
fichier.
7. Enregistrez le fichier et quittez.
8. Appliquez le manifeste du pod avec kubectl.
kubectl apply -f redis-pod.yaml
Le système confirme que la création du pod a réussi.
9. Vérifiez l'état du module.
kubectl get pod
10. Entrez le pod créé avec kubectl exec
.
kubectl exec -it redis -- redis-cli
La console du serveur Redis apparaît :
11. Utilisez la commande PING pour vérifier si le serveur est en ligne.
PING
Si le serveur communique avec la console, il renvoie PONG
comme réponse.
Déployer Redis sur Kubernetes avec Helm Chart
Helm fournit un moyen rapide de configurer un cluster Redis à l'aide d'un graphique Helm prédéfini.
1. Ajoutez le référentiel Helm contenant la charte Redis que vous souhaitez installer.
helm repo add [repo-name] [repo-address]
Cet article utilise le graphique Redis disponible dans le dépôt Bitnami.
2. Mettez à jour les référentiels Helm locaux.
helm repo update
3. Utilisez helm install
pour installer le tableau. La commande de base est la suivante :
helm install redis-test bitnami/redis
Important : Si vous installez le graphique sur Minikube, il n'est pas rare que les pods restent bloqués dans un CrashLoopBackOff
événement dû à des réclamations de volume non consolidé. Pour éviter cela, utilisez le --set
option et définissez persistence.storageClass
à nfs-client
pour les deux gousses.
Étant donné que Redis est déployé avec des autorisations de volume non administratives par défaut, le pod Redis peut ne pas être en mesure de communiquer avec le serveur. Résolvez ce problème en définissant volumePermissions
à true
.
L'helm install
la commande devrait ressembler à ceci :
helm install redis-test --set persistence.storageClass=nfs-client,redis.replicas.persistence.storageClass=nfs-client bitnami/redis --set volumePermissions.enabled=true
4. Exportez le mot de passe Redis en tant que variable d'environnement.
export REDIS_PASSWORD=$(kubectl get secret --namespace default redis-test -o jsonpath="{.data.redis-password}" | base64 --decode)
5. Créez un pod client Redis que vous utiliserez pour accéder à la base de données.
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
Le système confirme la création du redis-client
cosse.
6. Entrez le pod client avec kubectl exec
.
kubectl exec --tty -i redis-client --namespace default -- bash
La console client apparaît.
7. Utilisez le redis-cli
suivant commande pour accéder à l'instance maître Redis :
redis-cli -h redis-test-master -a $REDIS_PASSWORD
La console de l'instance maître s'affiche.
8. Pour accéder aux répliques, utilisez la même commande, mais modifiez la cible.
redis-cli -h redis-test-replicas -a $REDIS_PASSWORD
9. Utilisez le PING
commande pour tester la connexion avec le serveur.
PING
Le PONG
la réponse confirme que le serveur écoute.