Inicio rápido: Implementación de una aplicación mediante la extensión de clúster de Dapr para Azure Kubernetes Service (AKS) o para Kubernetes habilitado para Arc

En este inicio rápido, usa la extensión de clúster de Dapr en un clúster de AKS o de Kubernetes habilitado para Arc. Se implementa un ejemplo de hello world, que consta de una aplicación de Python que genera mensajes y una aplicación de nodo que consume y conserva los mensajes.

Requisitos previos

Clonación del repositorio

  1. Clone el repositorio de inicios rápidos de Dapr mediante el comando git clone.

    git clone https://github.com/dapr/quickstarts.git
    
  2. Cambie al directorio hello-kubernetes mediante cd.

    cd quickstarts/tutorials/hello-kubernetes/
    

Creación y configuración de un almacén de estado

Dapr puede usar varios almacenes de estado, como Redis, Azure Cosmos DB, DynamoDB y Cassandra, para conservar y recuperar el estado. En este ejemplo, se usa Redis.

Creación de un almacén de Redis

  1. Abra Azure Portal para iniciar el flujo de creación de Azure Cache for Redis.

  2. Rellene la información necesaria.

  3. Seleccione Crear para iniciar la implementación de la instancia de Redis.

  4. Anote el nombre de host de la instancia de Redis; dicho nombre se puede recuperar de la sección Información general de Azure. El nombre de host podría ser similar al ejemplo siguiente: xxxxxx.redis.cache.windows.net:6380.

  5. En Configuración, vaya a Claves de acceso para obtener las claves de acceso.

  6. Cree un secreto de Kubernetes para almacenar la contraseña de Redis mediante el comando kubectl create secret generic redis.

    kubectl create secret generic redis --from-literal=redis-password=<your-redis-password>
    

Configuración de los componentes de Dapr

Después de crear el almacén, debe agregar las claves al archivo redis.yaml del directorio de implementación del repositorio Hola mundo. Puede obtener más información aquí.

  1. Reemplace el valor redisHost por su propia dirección maestra de Redis.

  2. Reemplace el redisPassword por su propio secreto.

  3. Agregar las dos líneas siguientes después de redisPassword para habilitar la conexión a través de TLS

    - name: redisPassword
        secretKeyRef:
          name: redis
          key: redis-password
    - name: enableTLS
      value: true
    

Aplicación de la configuración

  1. Aplique el archivo redis.yaml mediante el comando kubectl apply.

    kubectl apply -f ./deploy/redis.yaml
    
  2. Compruebe que el almacén de estado se configuró correctamente mediante el comando kubectl get components.redis.

    kubectl get components.redis -o yaml
    

    Debería ver una salida similar a la del siguiente ejemplo:

    component.dapr.io/statestore created
    

Implementación de la aplicación de Node.js con el sidecar de Dapr

  1. Aplique la implementación de la aplicación de Node.js al clúster mediante el comando kubectl apply.

    kubectl apply -f ./deploy/node.yaml
    

    Nota:

    Las implementaciones de Kubernetes son asíncronas, lo que significa que antes de continuar con el paso siguiente hay que esperar a que se complete la implementación. Para ello, use el siguiente comando:

    kubectl rollout status deploy/nodeapp
    

    De esta forma, se implementa la aplicación de Node.js en Kubernetes. El plano de control de Dapr inyecta automáticamente el sidecar de Dapr en el pod. Si echa un vistazo al archivo node.yaml, verá que Dapr está habilitado para esa implementación:

    • dapr.io/enabled: true: indica al plano de control de Dapr que inyecte un sidecar a esta implementación.
    • dapr.io/app-id: nodeapp: asigna un identificador o nombre únicos a la aplicación de Dapr, con el fin de que se puedan enviar mensajes a otras aplicaciones de Dapr y comunicarse con ellas.
  2. Acceda al servicio mediante el comando kubectl get svc.

    kubectl get svc nodeapp
    
  3. Anote el EXTERNAL-IP en la salida.

Comprobación del servicio

  1. Llame al servicio mediante curl con EXTERNAL-IP.

    curl $EXTERNAL_IP/ports
    

    Debería ver una salida similar a la del siguiente ejemplo:

    {"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}
    
  2. Envíe una orden a la aplicación mediante con curl.

    curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
    
  3. Confirme que la orden es persistente; para ello, solicítelo usando curl.

    curl $EXTERNAL_IP/order
    

    Debería ver una salida similar a la del siguiente ejemplo:

    { "orderId": "42" }
    

Implementación de la aplicación de Python con el sidecar de Dapr

  1. Vaya al directorio de aplicaciones de Python en el inicio rápido de hello-kubernetes y abra app.py.

    Este ejemplo es una aplicación básica de Python que publica mensajes JSON en localhost:3500, que es el puerto de escucha predeterminado para Dapr. Puede invocar el punto de conexión neworder de la aplicación de Node.js mediante la publicación en v1.0/invoke/nodeapp/method/neworder. El mensaje contiene algunos datos con un orderId que se incrementa una vez por segundo:

    n = 0
    while True:
        n += 1
        message = {"data": {"orderId": n}}
    
        try:
            response = requests.post(dapr_url, json=message)
        except Exception as e:
            print(e)
    
        time.sleep(1)
    
  2. Implemente la aplicación de Python en el clúster de Kubernetes usando el comando kubectl apply.

    kubectl apply -f ./deploy/python.yaml
    

    Nota:

    Al igual que con el comando anterior, es necesario esperar a que se complete la implantación antes de pasar a los siguientes pasos. Para ello, use el siguiente comando:

    kubectl rollout status deploy/pythonapp
    

Observación de mensajes y confirmación de persistencia

Ahora que se han implementado las aplicaciones de Node.js y Python, vea cómo llegan los mensajes.

  1. Obtenga los registros de la aplicación de Node.js mediante el comando kubectl logs.

    kubectl logs --selector=app=node -c node --tail=-1
    

    Si las implementaciones se han realizado correctamente, debería ver registros como los siguientes:

    Got a new order! Order ID: 1
    Successfully persisted state
    Got a new order! Order ID: 2
    Successfully persisted state
    Got a new order! Order ID: 3
    Successfully persisted state
    
  2. Llame al punto de conexión de la orden de la aplicación de Node.js para obtener la orden más reciente mediante curl.

    curl $EXTERNAL_IP/order
    {"orderID":"42"}
    

    Debería ver el JSON más reciente en la respuesta.

Limpieza de recursos

  • Quite el grupo de recursos, el clúster, el espacio de nombres y todos los recursos relacionados mediante el comando az group delete.

    az group delete --name MyResourceGroup
    

Pasos siguientes