Commencer à utiliser Azure Cache pour Redis Enterprise ou la réplication active de Azure Managed Redis avec une application hébergée dans AKS

Dans ce tutoriel, vous allez héberger une application d’inventaire sur Azure Kubernetes Service (AKS) et découvrir comment utiliser la géoréplication active pour répliquer des données dans votre instance Azure Cache pour Redis Enterprise ou Azure Managed Redis dans les régions Azure.

Conditions préalables

  • Un abonnement Azure. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit.
  • Un cluster Azure Kubernetes Service. Pour plus d’informations sur la création d’un cluster, consultez Démarrage rapide : déployer un cluster AKS (Azure Kubernetes Service) à l’aide du portail Azure. Vous pouvez également héberger deux instances de l’application de démonstration sur deux clusters AKS différents. Dans un environnement de production, vous utiliseriez deux clusters différents situés dans les mêmes régions que vos clusters pour déployer deux versions de l’application. Pour les besoins de ce tutoriel, vous allez déployer les deux instances de l’application sur le même cluster AKS.

Important

Ce tutoriel part du principe que vous connaissez les concepts de base de Kubernetes, notamment les conteneurs, les pods et le service.

Aperçu

Ce tutoriel utilise un exemple de page d’inventaire qui comprend trois options de t-shirt différentes. L’utilisateur peut « acheter » chaque t-shirt et voir l’inventaire baisser. La particularité de cette démonstration est que nous exécutons l’application d’inventaire dans deux régions différentes. En règle générale, vous exécutez la base de données stockant les données d’inventaire dans une seule région afin d’éviter toute incohérence. Avec d’autres back-ends de bases de données et synchronisations, les clients peuvent avoir une expérience désagréable en raison d’une latence plus élevée pour les appels dans différentes régions Azure. Quand vous utilisez Azure Cache pour Redis Enterprise comme back-end, vous pouvez lier deux caches avec la géoréplication active afin que l’inventaire soit cohérent dans les deux régions tout en bénéficiant d’une faible latence de Redis Enterprise dans la même région.

Configurer deux instances Azure Redis

  1. Créez une instance Azure Cache pour Redis Enterprise ou Azure Managed Redis dans la région USA Ouest 2 à l’aide du portail Azure ou de votre outil CLI préféré. Vous pouvez également utiliser une autre région. Utilisez le guide de démarrage rapide pour commencer.

  2. Sous l’onglet Avancé :

    1. Activez Accès non TLS uniquement.
    2. Définissez Stratégie de clustering sur Entreprise.
    3. Configurez un nouveau groupe de géoréplication active en vous reportant à ce guide. Vous finirez par ajouter les deux caches au même groupe de réplication. Créez le nom du groupe avec le premier cache et ajoutez le deuxième cache au même groupe.

    Important

    Ce tutoriel utilise un port non TLS à des fins de démonstration, mais nous vous recommandons vivement d’utiliser un port TLS pour tout ce qui est en production.

  3. Configurez une autre instance d’Azure Cache pour Redis Enterprise dans la région USA Est avec la même configuration que le premier cache. Vous pouvez également utiliser une autre région. Veillez à choisir le même groupe de réplication que celui sélectionné pour le premier cache.

Préparer les fichiers de déploiement Kubernetes

Créez deux fichiers .yml à l’aide de la procédure suivante (un fichier pour chaque cache créé dans les deux régions).

Pour illustrer la réplication des données entre les régions, nous exécutons deux instances de la même application dans différentes régions. Faisons en sorte qu’une instance s’exécute à Seattle (espace de noms west) et que l’autre instance s’exécute à New York (espace de noms east).

Espace de noms west

Modifiez les champs suivants dans le fichier YAML suivant et enregistrez-le sous app_west.yaml.

  1. Définissez la variable REDIS_HOST avec l’URL de Valeur du point de terminaison une fois le suffixe de port (10000) supprimé.
  2. Définissez REDIS_PASSWORD avec la Clé d’accès de votre cache USA Ouest 2.
  3. Modifiez APP_LOCATION pour afficher la région dans laquelle cette instance d’application s’exécute. Pour ce cache, configurez APP_LOCATION sur Seattle pour indiquer que cette instance d’application s’exécute à Seattle.
  4. Vérifiez que la variable namespace a la valeur west aux deux emplacements dans le fichier.

Votre code doit ressembler à ceci :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: shoppingcart-app
  namespace: west
spec:
  replicas: 1 
  selector:
    matchLabels:
      app: shoppingcart
  template:
    metadata:
      labels:
        app: shoppingcart
    spec:
      containers:
      - name: demoapp
        image: mcr.microsoft.com/azure-redis-cache/redisactivereplicationdemo:latest
        resources:
          limits:
            cpu: "0.5"
            memory: "250Mi"
          requests:
            cpu: "0.5"
            memory: "128Mi"
        env:
         - name: REDIS_HOST
           value: "DemoWest.westus2.redisenterprise.cache.azure.net"
         - name: REDIS_PASSWORD
           value: "myaccesskey"
         - name: REDIS_PORT
           value: "10000"   # redis enterprise port
         - name: HTTP_PORT
           value: "8080"
         - name: APP_LOCATION
           value: "Seattle, WA" 
---
apiVersion: v1
kind: Service
metadata:
  name: shoppingcart-svc
  namespace: west
spec:
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  selector:
    app: shoppingcart

Espace de noms east

Enregistrez une autre copie du même fichier YAML sous app_east.yaml. Cette fois, utilisez les valeurs qui correspondent à votre deuxième cache.

  1. Définissez la variable REDIS_HOST avec la Valeur du point de terminaison une fois le suffixe de port (10000) supprimé.
  2. Définissez REDIS_PASSWORD avec la Clé d’accès de votre cache USA Est.
  3. Modifiez APP_LOCATION pour afficher la région dans laquelle cette instance d’application s’exécute. Pour ce cache, configurez APP_LOCATION sur New York pour indiquer que cette instance d’application s’exécute à New York.
  4. Vérifiez que la variable namespace a la valeur east aux deux emplacements dans le fichier.

Votre code doit ressembler à ceci :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: shoppingcart-app
  namespace: east
spec:
  replicas: 1 
  selector:
    matchLabels:
      app: shoppingcart
  template:
    metadata:
      labels:
        app: shoppingcart
    spec:
      containers:
      - name: demoapp
        image: mcr.microsoft.com/azure-redis-cache/redisactivereplicationdemo:latest
        resources:
          limits:
            cpu: "0.5"
            memory: "250Mi"
          requests:
            cpu: "0.5"
            memory: "128Mi"
        env:
         - name: REDIS_HOST
           value: "DemoEast.eastus.redisenterprise.cache.azure.net"
         - name: REDIS_PASSWORD
           value: "myaccesskey"
         - name: REDIS_PORT
           value: "10000"   # redis enterprise port
         - name: HTTP_PORT
           value: "8080"
         - name: APP_LOCATION
           value: "New York, NY" 
---
apiVersion: v1
kind: Service
metadata:
  name: shoppingcart-svc
  namespace: east
spec:
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  selector:
    app: shoppingcart

Installer l’interface CLI Kubernetes et se connecter à votre cluster AKS

Dans cette section, vous allez d’abord installer l’interface CLI Kubernetes, puis vous connecter à un cluster AKS.

Remarque

Un cluster Azure Kubernetes Service est obligatoire pour ce tutoriel. Vous allez déployer les deux instances de l’application sur le même cluster AKS.

Installer l’interface de ligne de commande Kubernetes

Utilisez l’interface CLI Kubernetes, _kubectl, pour vous connecter au cluster Kubernetes à partir de votre ordinateur local. Dans le cadre d’une exécution locale, vous pouvez utiliser la commande suivante pour installer kubectl.

az aks install-cli

Si vous utilisez Azure Cloud Shell, kubectl est déjà installé et vous pouvez ignorer cette étape.

Se connecter à vos clusters AKS dans deux régions

Utilisez le portail pour copier le groupe de ressources et le nom de votre cluster AKS dans la région USA Ouest 2. Pour configurer kubectl pour qu’il se connecte à votre cluster AKS, utilisez la commande suivante avec votre groupe de ressources et le nom de votre cluster :

 az aks get-credentials --resource-group myResourceGroup --name myClusterName

Vérifiez que vous êtes en mesure de vous connecter à votre cluster en exécutant la commande suivante :


kubectl get nodes

Vous devriez voir une sortie similaire affichant la liste des nœuds de votre cluster.

NAME                                STATUS   ROLES   AGE   VERSION
aks-agentpool-21274953-vmss000001   Ready    agent   1d    v1.24.15
aks-agentpool-21274953-vmss000003   Ready    agent   1d    v1.24.15
aks-agentpool-21274953-vmss000006   Ready    agent   1d    v1.24.15

Déployer et tester votre application

Vous avez besoin de deux espaces de noms pour que vos applications s’exécutent sur votre cluster AKS. Créez un espace de noms west, puis déployez l’application.

Exécutez la commande suivante pour déployer l’instance d’application sur votre cluster AKS dans l’espace de noms west :

kubectl create namespace west

kubectl apply -f app_west.yaml

Vous obtenez une réponse indiquant que votre déploiement et votre service ont été créés :

deployment.apps/shoppingcart-app created
service/shoppingcart-svc created

Pour tester l’application, exécutez la commande suivante pour vérifier si le pod est en cours d’exécution :

kubectl get pods -n west

Vous voyez que votre pod s’exécute comme suit :

NAME                                READY   STATUS                       RESTARTS   AGE
shoppingcart-app-5fffdcb5cd-48bl5   1/1     Running                      0          68s

Exécutez la commande suivante pour obtenir le point de terminaison de votre application :

kubectl get service -n west

Vous verrez peut-être qu’EXTERNAL-IP a l’état <pending> pendant quelques minutes. Continuez à réessayer jusqu’à ce que l’état soit remplacé par une adresse IP.

NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
shoppingcart-svc       LoadBalancer   10.0.166.147   20.69.136.105   80:30390/TCP   90s

Une fois EXTERNAL-IP disponible, ouvrez un navigateur web à l’adresse EXTERNAL-IP de votre service. Vous voyez alors l’application.

Exécutez les mêmes étapes de déploiement et déployez une instance de l’application de démonstration à exécuter dans la région USA Est.

kubectl create namespace east

kubectl apply -f app_east.yml

kubectl get pods -n east

kubectl get service -n east

Si vous ouvrez les deux services dans un navigateur, vous voyez qu’une modification de l’inventaire dans une région est presque instantanément répercutée dans l’autre région. Les données d’inventaire sont stockées dans les instances Redis Enterprise qui répliquent les données entre les régions.

Vous avez réussi. Cliquez sur les boutons et explorez la démonstration.

Capture d’écran de deux navigateurs correspondants avec une application shoppingcart s’exécutant dans différentes régions et affichant les mêmes données.

Pour réinitialiser le nombre d’articles, ajoutez /reset après l’URL :

<IP address>/reset

Nettoyer votre déploiement

Pour nettoyer le cluster, exécutez les commandes suivantes :

kubectl delete deployment shoppingcart-app -n west
kubectl delete service shoppingcart-svc -n west

kubectl delete deployment shoppingcart-app -n east
kubectl delete service shoppingcart-svc -n east

Nettoyer les ressources

Si vous souhaitez continuer à utiliser les ressources que vous avez créées dans cet article, conservez le groupe de ressources.

Sinon, si vous avez terminé avec les ressources, vous pouvez supprimer le groupe de ressources Azure que vous avez créé pour éviter les frais.

Important

La suppression d’un groupe de ressources est irréversible. Quand vous supprimez un groupe de ressources, toutes les ressources qu’il contient sont supprimées définitivement. Veillez à ne pas supprimer accidentellement des ressources ou un groupe de ressources incorrects. Si vous avez créé les ressources dans un groupe de ressources existant contenant des ressources que vous souhaitez conserver, vous pouvez supprimer chaque ressource individuellement, au lieu de supprimer l’intégralité du groupe de ressources.

Pour supprimer un groupe de ressources

  1. Connectez-vous au Portail Azure, puis sélectionnez Groupes de ressources.

  2. Recherchez le groupe de ressources à supprimer.

    S’il existe de nombreux groupes de ressources, utilisez la zone Filtrer pour n’importe quel champ..., tapez le nom du groupe de ressources que vous avez créé pour cet article. Sélectionnez le groupe de ressources dans la liste des résultats.

    Capture d’écran montrant une liste de groupes de ressources à supprimer dans le volet de travail.

  3. Sélectionnez Supprimer le groupe de ressources.

  4. Vous êtes invité à confirmer la suppression du groupe de ressources. Saisissez le nom de votre groupe de ressources pour confirmer, puis sélectionnez Supprimer.

    Capture d’écran montrant un formulaire qui demande le nom de la ressource pour confirmer la suppression.

Après quelques instants, le groupe de ressources et toutes ses ressources sont supprimés.