Déploiement d'un cluster Redis avec Helm : 1 maître, 2 esclaves et 3 sentinelles

Prérequis et environnement

Ce guide suppose que vous disposez déjà d’un cluster Kubernetes fonctionnel ainsi que de Helm installé en version 3. Les composants suivants sont utilisés dans cet exemple :

Composant Version
Chart Helm 16.11.2
Redis 6.2.7
Kubernetes v1.19.3
Helm v3.8.1

Assurez-vous également qu’un StorageClass est disponible (ex: NFS, OpenEBS, Ceph) pour la persistance des données.

Ajout du dépôt Bitnami et installation du chart Redis

1. Ajouter le dépôt Helm Bitnami

helm repo add bitnami https://charts.bitnami.com/bitnami

2. Synchronsier les charts disponibles

helm repo update

3. Télécharger le chart Redis localement

mkdir -p /opt/redis-deploy && cd /opt/redis-deploy
helm pull bitnami/redis --version 16.11.2
tar -xzf redis-16.11.2.tgz
cp redis/values.yaml custom-values.yaml

4. Configuration personnalisée du cluster Redis

Le fichier custom-values.yaml doit être ajusté pour activer l’architecture de réplication avec Sentinel. Voici les sections clés à modifier :

global:
  storageClass: "openebs-jiva-default"
  redis:
    password: "secureRedisPass123"

fullnameOverride: "redis-cluster"

architecture: replication

commonConfiguration: |-
  appendonly yes
  save ""

master:
  persistence:
    enabled: true
    size: 8Gi
  service:
    type: ClusterIP
    ports:
      redis: 6379

replica:
  replicaCount: 2
  persistence:
    enabled: true
    size: 8Gi
  service:
    type: ClusterIP
    ports:
      redis: 6379

sentinel:
  enabled: true
  containerPorts:
    sentinel: 26379
  persistence:
    enabled: true
    size: 100Mi
  service:
    type: ClusterIP
    ports:
      redis: 6379
      sentinel: 26379

5. Déploiement du cluster dans un namespace dédié

kubectl create namespace redis-prod

helm install redis-cluster bitnami/redis \
  --namespace redis-prod \
  --values custom-values.yaml

6. Vérification du déploiement

Lister les releases Helm dans le namespace :

helm -n redis-prod list

Vérifier les pods déployés :

kubectl get pods -n redis-prod
# Sortie attendue :
# redis-node-0     2/2 Running
# redis-node-1     2/2 Running
# redis-node-2     2/2 Running

Consulter les PersistentVolumeClaims :

kubectl get pvc -n redis-prod

7. Validation du fonctionnement du cluster

Récupérer le mot de passe depuis le secret Kubernetes :

export REDIS_PASSWORD=$(kubectl get secret -n redis-prod redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d)

Lancer un conteneur temporaire pour tester la connexion :

kubectl run -n redis-prod redis-client --rm -it --restart='Never' \
  --env REDIS_PASSWORD=$REDIS_PASSWORD \
  --image=bitnami/redis:6.2.7 --command -- bash

Dans le shell du client, vérifier la configuration de réplication :

REDISCLI_AUTH=$REDIS_PASSWORD redis-cli -h redis-cluster -p 6379 info replication

Exemple de sortie attendue :

role:master
connected_slaves:2
slave0:ip=redis-node-1.redis-headless.redis-prod.svc.cluster.local,port=6379,...

Interroger les sentinelles :

REDISCLI_AUTH=$REDIS_PASSWORD redis-cli -h redis-cluster -p 26379 info sentinel

Sortie typique :

# Sentinel
sentinel_masters:1
master0:name=mymaster,status=ok,address=redis-node-0.redis-headless.redis-prod.svc.cluster.local:6379,slaves=2,sentinels=3

Le cluster est opérationnel si une seule instance maîtresse est détectée avec deux esclaves connectés, et que les trois senitnelles surveillent correctement le groupe.

Étiquettes: Redis kubernetes Helm High-Availability Sentinel

Publié le 29 juillet à 07h36