Compartilhar via


Comece a usar o Azure Cache para Redis Enterprise ou a replicação ativa do Azure Managed Redis com um aplicativo hospedado no AKS

Neste tutorial, você hospedará um aplicativo de inventário no AKS (Serviço de Kubernetes do Azure) e descobrirá como usar a replicação geográfica ativa para replicar dados nas suas instâncias do Azure Cache for Redis Enterprise ou Redis Gerenciado do Azure em regiões do Azure.

Pré-requisitos

  • Uma assinatura do Azure. Caso não tenha uma assinatura do Azure, crie uma conta gratuita.
  • Um cluster do Serviço de Kubernetes do Azure — para mais informações sobre como criar um cluster, confira Início rápido: Implantar um cluster do Serviço de Kubernetes do Azure (AKS) usando o portal do Azure. Como alternativa, é possível hospedar duas instâncias do aplicativo de demonstração em dois clusters diferentes do AKS. Em um ambiente de produção, você usaria dois clusters diferentes, localizados nas mesmas regiões dos seus clusters, para implantar duas versões do aplicativo. Neste tutorial, você implanta as duas instâncias do aplicativo no mesmo cluster do AKS.

Importante

Este tutorial pressupõe que você esteja familiarizado com conceitos básicos do Kubernetes, como contêineres, pods e serviço.

Visão geral

Este tutorial usa uma página de inventário de amostra que mostra três opções diferentes de camisetas. O usuário pode “comprar” cada camiseta e ver o inventário diminuir. O diferencial desta demonstração é que executamos o aplicativo de inventário em duas regiões diferentes. Normalmente, seria necessário executar o banco de dados que armazena os dados de inventário em uma única região, para evitar problemas de consistência. Com outros back-ends de banco de dados e sincronização, os clientes podem ter uma experiência ruim devido à latência maior nas chamadas entre diferentes regiões do Azure. Ao usar o Cache do Azure para Redis Enterprise como back-end, é possível vincular dois caches com replicação geográfica ativa, mantendo o inventário consistente entre as regiões e aproveitando o desempenho de baixa latência do Redis Enterprise na mesma região.

Configurar duas instâncias do Azure Redis

  1. Crie uma nova instância do Cache do Azure para Redis Enterprise ou Redis Gerenciado do Azure na região Oeste dos EUA 2 usando o portal do Azure ou sua ferramenta de CLI preferida. Como alternativa, você pode usar qualquer região de sua preferência. Use o guia de início rápido para começar.

  2. Na guia Avançado:

    1. Habilitar Acesso somente sem TLS.
    2. Definir Política de Clustering como Enterprise
    3. Configurar um novo grupo de replicação geográfica ativa usando este guia. Por fim, adicione ambos os caches ao mesmo grupo de replicação. Crie o nome do grupo com o primeiro cache e adicione o segundo cache ao mesmo grupo.

    Importante

    Este tutorial usa uma porta sem TLS para demonstração, mas recomendamos fortemente usar uma porta TLS em qualquer ambiente de produção.

  3. Configurar outro Cache do Azure para Redis Enterprise na região Leste dos EUA, com a mesma configuração do primeiro cache. Como alternativa, você pode usar qualquer região de sua preferência. Certifique-se de escolher o mesmo grupo de replicação do primeiro cache.

Preparar arquivos de implantação do Kubernetes

Criar dois arquivos .yml seguindo o procedimento a seguir. Um arquivo para cada cache criado nas duas regiões.

Para demonstrar a replicação de dados entre regiões, executamos duas instâncias do mesmo aplicativo em regiões diferentes. Vamos fazer uma instância rodar em Seattle, no namespace oeste, e a segunda em Nova York, no namespace leste.

Namespace oeste

Atualizar os seguintes campos no arquivo YAML abaixo e salvá-lo como app_west.yaml.

  1. Atualizar a variável REDIS_HOST com o valor do ponto de extremidade, removendo o sufixo da porta: 10000
  2. Atualizar REDIS_PASSWORD com a chave de acesso do seu cache na região Oeste dos EUA 2.
  3. Atualizar APP_LOCATION para exibir a região onde esta instância do aplicativo está em execução. Para este cache, configure APP_LOCATION como Seattle para indicar que esta instância do aplicativo está em execução em Seattle.
  4. Verificar se o valor da variável namespace é west em ambos os locais do arquivo.

O código deve ficar assim:

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

Namespace leste

Salvar outra cópia do mesmo arquivo YAML como app_east.yaml. Desta vez, use os valores correspondentes ao seu segundo cache.

  1. Atualize a variável REDIS_HOST com o valor do ponto de extremidade, removendo o sufixo da porta: 10000
  2. Atualize REDIS_PASSWORD com a chave de acesso do seu cache na região Leste dos EUA.
  3. Atualizar APP_LOCATION para exibir a região onde esta instância do aplicativo está em execução. Para este cache, configure APP_LOCATION como Nova York para indicar que esta instância do aplicativo está em execução em Nova York.
  4. Verificar se o valor da variável namespace é east em ambos os locais do arquivo.

O código deve ficar assim:

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

Instalar a CLI do Kubernetes e conectar-se ao seu cluster do AKS

Nesta seção, primeiro você instala a CLI do Kubernetes e, em seguida, conecta-se a um cluster do AKS.

Observação

Um cluster do Serviço de Kubernetes do Azure é necessário para este tutorial. Implante as duas instâncias do aplicativo no mesmo cluster do AKS.

Instalar a CLI Kubernetes

Use a CLI do Kubernetes, _kubectl, para conectar-se ao cluster do Kubernetes a partir do seu computador local. Se estiver executando localmente, use o seguinte comando para instalar o kubectl.

az aks install-cli

Se você usar o Azure Cloud Shell, o kubectl já estará instalado, e será possível ignorar essa etapa.

Conectar-se aos clusters do AKS em duas regiões

Usar o portal para copiar o grupo de recursos e o nome do cluster do seu cluster do AKS na região Oeste dos EUA 2. Para configurar o kubectl para conectar-se ao seu cluster do AKS, use o seguinte comando com seu grupo de recursos e nome do cluster:

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

Verifique se você consegue se conectar ao cluster executando o seguinte comando:


kubectl get nodes

Você deverá ver uma saída semelhante mostrando a lista de nós de 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

Implantar e testar o aplicativo

São necessários dois namespaces para que seus aplicativos sejam executados no cluster do AKS. Criar um namespace oeste e, em seguida, implantar o aplicativo.

Executar o seguinte comando para implantar a instância do aplicativo no seu cluster do AKS no namespace oeste:

kubectl create namespace west

kubectl apply -f app_west.yaml

Você obtém uma resposta indicando que sua implantação e serviço foram criados:

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

Para testar o aplicativo, execute o seguinte comando para marcar se o pod estiver em execução:

kubectl get pods -n west

Você verá seu pod em execução com êxito, como:

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

Execute o seguinte comando para obter o ponto de extremidade do seu aplicativo:

kubectl get service -n west

Pode acontecer de EXTERNAL-IP ficar com status <pending> por alguns minutos. Continuar tentando até que o status seja substituído por um endereço 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

Quando External-IP estiver disponível, abra um navegador da Web no endereço IP externo do seu serviço para ver o aplicativo.

Execute as mesmas etapas de implantação e implante uma instância do aplicativo de demonstração para execução na região Leste dos EUA.

kubectl create namespace east

kubectl apply -f app_east.yml

kubectl get pods -n east

kubectl get service -n east

Com cada um dos dois serviços abertos em um navegador, é possível ver que alterar o inventário em uma região se reflete quase instantaneamente na outra. Os dados de inventário são armazenados nas instâncias do Redis Enterprise que replicam os dados entre regiões.

Você conseguiu! Clicar nos botões e explorar a demonstração.

Captura de tela de dois navegadores correspondentes com o aplicativo de carrinho de compras em execução em duas regiões diferentes, exibindo os mesmos dados.

Para redefinir a contagem, adicione /reset após a URL:

<IP address>/reset

Limpar sua implantação

Para limpar o cluster, execute este comando:

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

Limpar os recursos

Se você quiser continuar a usar os recursos criados neste artigo, mantenha o grupo de recursos.

Caso contrário, se tiver terminado de usar os recursos, é possível excluir o grupo de recursos do Azure criado para evitar encargos.

Importante

A exclusão de um grupo de recursos é irreversível. Ao excluir o grupo de recursos, todos os recursos nele são excluídos permanentemente. Certifique-se de que não exclua acidentalmente o grupo de recursos ou os recursos incorretos. Se você criou os recursos dentro de um grupo de recursos existente que contém recursos que você deseja manter, é possível excluir cada recurso individualmente em vez de excluir o grupo de recursos.

Para excluir um grupo de recursos

  1. Entre no portal do Azure e selecione Grupos de recursos.

  2. Selecione o grupo de recursos que você quer excluir.

    Se houver muitos grupos de recursos, use a caixa Filtrar por qualquer campo... digite o nome do grupo de recursos que você criou para este artigo. Selecione o grupo de recursos na lista de resultados.

    Captura de tela mostrando uma lista de grupos de recursos a serem excluídos no painel de trabalho.

  3. Selecione Excluir grupo de recursos.

  4. Você receberá uma solicitação para confirmar a exclusão do grupo de recursos. Digite o nome do grupo de recursos para confirmar e selecione Excluir.

    Captura de tela mostrando um formulário que requer o nome do recurso para confirmar a exclusão.

Após alguns instantes, o grupo de recursos, e todos os recursos nele são excluídos.