Compartir a través de


Introducción al uso de la replicación activa de Azure Cache for Redis Enterprise o Azure Managed Redis con una aplicación hospedada en AKS

En este tutorial, hospedará una aplicación de inventario en Azure Kubernetes Service (AKS) y averiguará cómo puede usar la replicación geográfica activa para replicar datos en las instancias de Azure Cache for Redis Enterprise o Azure Managed Redis entre regiones de Azure.

Prerrequisitos

  • Una suscripción de Azure. Si no tiene una suscripción a Azure, cree una cuenta gratuita.
  • Un clúster de Azure Kubernetes Service: para más información sobre cómo crear un clúster, consulte Inicio rápido: Implementación de un clúster de Azure Kubernetes Service (AKS) mediante Azure Portal. Como alternativa, puede hospedar dos instancias de la aplicación de demostración en los dos clústeres de AKS diferentes. En un entorno de producción, usaría dos clústeres diferentes ubicados en las mismas regiones que sus clústeres para implementar dos versiones de la aplicación. En este tutorial, implementará ambas instancias de la aplicación en el mismo clúster de AKS.

Importante

En este tutorial se supone que está familiarizado con conceptos básicos de Kubernetes, como contenedores, pods y servicio.

Información general

En este tutorial se usa una página de inventario de ejemplo que muestra tres opciones de camiseta diferentes. El usuario puede "comprar" cada camiseta y ver la eliminación del inventario. Lo singular de esta demostración es que ejecutamos la aplicación de inventario en dos regiones diferentes. Normalmente, tendría que ejecutar la base de datos que almacena los datos de inventario en una sola región para que no haya problemas de coherencia. Con otros back-end de base de datos y sincronización, es posible que los clientes tengan una experiencia desagradable debido a una mayor latencia para las llamadas en diferentes regiones de Azure. Al usar Azure Cache for Redis Enterprise como back-end, puede vincular dos cachés junto con la replicación geográfica activa para que el inventario siga siendo coherente en ambas regiones mientras disfruta del rendimiento de baja latencia de Redis Enterprise en la misma región.

Configure dos instancias de Azure Redis

  1. Cree una nueva instancia de Azure Cache for Redis Enterprise o Azure Managed Redis en la región Oeste de EE. UU. 2 mediante Azure Portal o la herramienta de la CLI preferida. Como alternativa, puede usar cualquier región de su elección. Use la guía de inicio rápido para empezar.

  2. En la pestaña Avanzado:

    1. Habilitar Solo acceso sin TLS.
    2. Establezca Directivas de clúster en Enterprise
    3. Configure un nuevo grupo de replicación geográfica activa mediante esta guía. Finalmente, agregará ambas memorias caché al mismo grupo de replicación. Cree el nombre del grupo con la primera caché y agregue la segunda caché al mismo grupo.

    Importante

    En este tutorial se usa un puerto que no es TLS para la demostración, pero se recomienda encarecidamente usar un puerto TLS para cualquier cosa en producción.

  3. Configure otra Azure Cache for Redis Enterprise en la región Este de EE. UU. con la misma configuración que la primera caché. Como alternativa, puede usar cualquier región de su elección. Asegúrese de elegir el mismo grupo de replicación que la primera caché.

Preparación de archivos de implementación de Kubernetes

Cree dos archivos .yml mediante el procedimiento siguiente. Un archivo para cada caché que creó en las dos regiones.

Para demostrar la replicación de datos entre regiones, ejecutamos dos instancias de la misma aplicación en regiones diferentes. Vamos a hacer que una instancia se ejecute en Seattle, espacio de nombres oeste, mientras que la segunda se ejecuta en Nueva York, espacio de nombres este.

Espacio de nombres oeste

Actualice los siguientes campos en el siguiente archivo YAML y guárdelo como app_west.yaml.

  1. Actualice la variable REDIS_HOST con la dirección URL del valor del punto de conexión después de quitar el sufijo de puerto: 10000
  2. Actualice REDIS_PASSWORD con la clave de acceso de la caché Oeste de EE. UU. 2.
  3. Actualice APP_LOCATION para mostrar la región en la que se está ejecutando esta instancia de aplicación. Para esta caché, configure APP_LOCATION en Seattle para indicar que esta instancia de aplicación se está ejecutando en Seattle.
  4. Compruebe que el valor de la variable namespace es west en ambos lugares del archivo.

Debería ser similar al código siguiente:

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

Espacio de nombres este

Guarde otra copia del mismo archivo YAML como app_east.yaml. Esta vez, use los valores correspondientes a la segunda memoria caché.

  1. Actualice la variable REDIS_HOST con el valor del punto de conexión después de quitar el sufijo de puerto: 10000
  2. Actualice REDIS_PASSWORD con la clave de acceso de la caché Este de EE. UU. 2.
  3. Actualice APP_LOCATION para mostrar la región en la que se está ejecutando esta instancia de aplicación. Para esta caché, configure APP_LOCATION en Nueva York para indicar que esta instancia de aplicación se ejecuta en Nueva York.
  4. Compruebe que el valor de la variable namespace es east en ambos lugares del archivo.

Debería ser similar al código siguiente:

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

Instalación de la CLI de Kubernetes y conexión al clúster de AKS

En esta sección, primero instalará la CLI de Kubernetes y, después, se conectará a un clúster de AKS.

Nota:

Se requiere un clúster de Azure Kubernetes Service para este tutorial. Las dos instancias de la aplicación se implementan en el mismo clúster de AKS.

Instalación de la CLI de Kubernetes

Use la CLI de Kubernetes, _kubectl, para conectarse al clúster de Kubernetes desde la máquina local. Si se ejecuta localmente, puede usar el siguiente comando para instalar kubectl.

az aks install-cli

Si usa Azure Cloud Shell, kubectl ya está instalado y puede omitir este paso.

Conexión a los clústeres de AKS en dos regiones

Use el portal para copiar el grupo de recursos y el nombre del clúster de AKS en la región Oeste de EE. UU. 2. Para configurar kubectl para que se conecte a su clúster AKS, use el siguiente comando con su grupo de recursos y nombre de clúster:

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

Para comprobar que puede conectarse al clúster, ejecute el siguiente comando:


kubectl get nodes

Debería ver una salida similar en la que se muestra la lista de los nodos del clúster.

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

Implementación y prueba de la aplicación

Necesita dos espacios de nombres para que las aplicaciones se ejecuten en el clúster de AKS. Cree un oeste y, a continuación, implemente la aplicación.

Ejecute el siguiente comando para implementar la instancia de aplicación en el clúster de AKS en el espacio de nombres oeste :

kubectl create namespace west

kubectl apply -f app_west.yaml

Recibirá una respuesta que indica que se ha creado la implementación y el servicio:

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

Para probar la aplicación, ejecute el siguiente comando para comprobar si el pod se está ejecutando:

kubectl get pods -n west

Verá que el pod se ejecuta correctamente como:

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

Ejecute el siguiente comando para obtener el punto de conexión de la aplicación:

kubectl get service -n west

Es posible que vea que EXTERNAL-IP tiene el estado <pending> durante unos minutos. Siga reintentando hasta que el estado sea reemplazado por una dirección 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

Una vez que la IP externa esté disponible, abra un explorador web en la dirección IP externa de su servicio y verá la aplicación.

Ejecute los mismos pasos de implementación e implemente una instancia de la aplicación de demostración para que se ejecute en la región Este de EE. UU.

kubectl create namespace east

kubectl apply -f app_east.yml

kubectl get pods -n east

kubectl get service -n east

Con cada uno de los dos servicios abiertos en un explorador, verá que el cambio del inventario en una región se refleja casi al instante en la otra región. Los datos de inventario se almacenan en las instancias de Redis Enterprise que replican datos entre regiones.

Lo ha conseguido. Haga clic en los botones y explore la demostración.

Captura de pantalla de dos navegadores coincidentes con una aplicación de carrito de la compra que se ejecutan en regiones diferentes y muestran los mismos datos.

Para restablecer el recuento, agregue /reset después de la dirección URL:

<IP address>/reset

Limpieza de la implementación

Para limpiar el clúster, ejecute el comando siguiente:

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

Limpieza de recursos

Si desea seguir usando los recursos que creó en este artículo, mantenga el grupo de recursos.

De lo contrario, si ya ha terminado con los recursos, puede eliminar el grupo de recursos de Azure que ha creado para evitar cargos.

Importante

La eliminación de un grupo de recursos es irreversible. Cuando elimine un grupo de recursos, todos los recursos contenidos en él se eliminan permanentemente. Asegúrese de no eliminar por accidente el grupo de recursos o los recursos equivocados. Si ha creado los recursos en un grupo de recursos existente que contiene recursos que desea conservar, puede eliminar cada recurso individualmente en lugar de eliminar el grupo de recursos.

Para eliminar un grupo de recursos

  1. Inicie sesión en Azure Portal y después seleccione Grupos de recursos.

  2. Seleccione el grupo de recursos que desea eliminar.

    Si hay muchos grupos de recursos, use el cuadro Filtro para cualquier campo... y escriba el nombre del grupo de recursos que creó para este artículo. Seleccione el grupo de recursos en la lista de resultados.

    Captura de pantalla que muestra una lista de grupos de recursos para eliminar en el panel de trabajo.

  3. Seleccione Eliminar grupo de recursos.

  4. Se le pedirá que confirme la eliminación del grupo de recursos. Escriba el nombre del grupo de recursos para confirmar y, después, seleccione Eliminar.

    Captura de pantalla que muestra un formulario que requiera el nombre del recurso para confirmar la eliminación.

Transcurridos unos instantes, el grupo de recursos y todos sus recursos se eliminan.