Compartir a través de


Implementación de una aplicación que usa OpenAI en Azure Kubernetes Service (AKS)

En este artículo, aprenderá a implementar una aplicación que use Azure OpenAI u OpenAI en AKS. Con OpenAI, puede adaptar fácilmente diferentes modelos de inteligencia artificial, como la generación de contenido, el resumen, la búsqueda semántica y el lenguaje natural a la generación de código, para sus tareas específicas. Para empezar, implementará un clúster de AKS en la suscripción de Azure. Después, implementará el servicio OpenAI y la aplicación de ejemplo.

La aplicación nativa de nube de ejemplo es representativa de las implementaciones del mundo real. La aplicación de varios contenedores consta de aplicaciones escritas en varios lenguajes y marcos, entre los que se incluyen:

  • Golang con Gin
  • Rust con Actix-Web
  • JavaScript con Vue.js y Fastify
  • Python con FastAPI

Estas aplicaciones proporcionan servidores front-end para los clientes y los administradores, las API de REST para enviar datos a la cola de mensajes RabbitMQ y la base de datos de MongoDB y las aplicaciones de consola para simular el tráfico.

Nota

No se recomienda ejecutar contenedores con estado, como MongoDB y Rabbit MQ, sin almacenamiento persistente para producción. Aquí se usan por simplicidad, pero se recomienda usar servicios administrados, como Azure CosmosDB o Azure Service Bus.

Para acceder al código base de GitHub para la aplicación de ejemplo, veaDemostración de la Tienda AKS.

Antes de empezar

Requisitos previos

Crear un grupo de recursos

Un grupo de recursos de Azure es un contenedor lógico en el que se implementan y administran recursos de Azure. Cuando crea un grupo de recursos, se le pide que especifique una ubicación. Esta ubicación es la ubicación de almacenamiento de los metadatos del grupo de recursos y donde se ejecutan los recursos en Azure si no se especifica otra región durante la creación de recursos.

En el ejemplo siguiente, se crea un grupo de recursos denominado myResourceGroup en la ubicación eastus.

  • Cree un grupo de recursos con el comando az group create.

    az group create --name myResourceGroup --location eastus
    

    La salida del ejemplo siguiente es similar a la creación correcta del grupo de recursos:

    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null,
      "type": "Microsoft.Resources/resourceGroups"
    }
    

Creación de un clúster de AKS

En el siguiente ejemplo se crea un clúster denominado myAKSCluster en myResourceGroup.

  • Cree un clúster de AKS con el comando az aks create.

    az aks create --resource-group myResourceGroup --name myAKSCluster --generate-ssh-keys
    

    Transcurridos unos minutos, el comando se completa y devuelve información en formato JSON sobre el clúster.

Conectarse al clúster

Para administrar un clúster de Kubernetes, use kubectl, el cliente de línea de comandos de Kubernetes. Si usa Azure Cloud Shell, kubectl ya está instalado.

  1. Para instalar kubectl localmente, use el comando az aks install-cli.

    az aks install-cli
    

    Nota:

    Si el sistema basado en Linux necesita permisos elevados, puede usar el comando sudo az aks install-cli.

  2. Para configurar kubectl para conectarse a su clúster de Kubernetes, use el comando az aks get-credentials.

    Este comando ejecuta las siguientes operaciones:

    • Descarga las credenciales y configura la CLI de Kubernetes para usarlas.
    • Usa ~/.kube/config, la ubicación predeterminada del archivo de configuración de Kubernetes. Puede especificar otra ubicación para el archivo de configuración de Kubernetes con el argumento --file.
    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. Compruebe la conexión al clúster con el comando kubectl get. Este comando devuelve una lista de los nodos del clúster.

    kubectl get nodes
    

    La salida del siguiente ejemplo muestra los nodos creados en los pasos anteriores. Asegúrese de que el estado del nodo es Listo.

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-31469198-vmss000000   Ready    agent   3h29m   v1.25.6
    aks-nodepool1-31469198-vmss000001   Ready    agent   3h29m   v1.25.6
    aks-nodepool1-31469198-vmss000002   Ready    agent   3h29m   v1.25.6
    

Nota:

En el caso de los clústeres privados, es posible que los nodos no sean accesibles si intenta conectarse a ellos mediante la dirección IP pública. Para corregirlo, debe crear un punto de conexión dentro de la misma red virtual desde la que se va a conectar el clúster. Siga las instrucciones para crear un clúster de AKS privado y, a continuación, conéctese a él.

Implementación de la aplicación

Diagrama de arquitectura de la demostración de IA AKS.

En el manifiesto de Aplicación de tienda de AKS se incluyen las siguientes implementaciones y servicios de Kubernetes:

  • Servicio de producto: muestra información del producto.
  • Servicio de pedidos: realiza pedidos.
  • Makeline service: procesa los pedidos de la cola y completa los pedidos.
  • Escaparate: aplicación web para que los clientes vean productos y realicen pedidos.
  • Administración de la tienda: aplicación web para que los empleados de la tienda puedan ver los pedidos en cola y administrar la información sobre los productos.
  • Cliente virtual: simula la creación de pedidos de forma programada.
  • Trabajo virtual: simula la finalización de pedidos según una programación.
  • Mongo DB: instancia NoSQL para datos persistentes.
  • Rabbit MQ: cola de mensajes para una cola de pedidos.

Nota:

No se recomienda ejecutar contenedores con estado, como MongoDB y Rabbit MQ, sin almacenamiento persistente para producción. Aquí se usan por simplicidad, pero se recomienda usar servicios administrados, como Azure CosmosDB o Azure Service Bus.

  1. Revise el manifiesto de YAML de la aplicación.

  2. Implemente la aplicación mediante el comando kubectl apply y especifique el nombre del manifiesto de YAML.

    kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-all-in-one.yaml
    

    En la salida de ejemplo siguiente se muestran las implementaciones y los servicios creados correctamente:

    deployment.apps/mongodb created
    service/mongodb created
    deployment.apps/rabbitmq created
    service/rabbitmq created
    deployment.apps/order-service created
    service/order-service created
    deployment.apps/makeline-service created
    service/makeline-service created
    deployment.apps/product-service created
    service/product-service created
    deployment.apps/store-front created
    service/store-front created
    deployment.apps/store-admin created
    service/store-admin created
    deployment.apps/virtual-customer created
    deployment.apps/virtual-worker created
    

Implementación de OpenAI

Puede usar Azure OpenAI u OpenAI y ejecutar la aplicación en AKS.

  1. Habilite Azure OpenAI en su suscripción de Azure rellenando el formulario Solicitud de acceso a Azure OpenAI Service.
  2. En Azure Portal, cree una instancia de Azure OpenAI.
  3. Seleccione la instancia de Azure OpenAI que ha creado.
  4. Seleccione Claves y puntos de conexión para generar una clave.
  5. Seleccione Implementaciones de modelos>Implementaciones administradas para abrir el Estudio de Azure OpenAI.
  6. Cree una nueva implementación con el modelo gpt-35-turbo .

Para más información sobre cómo crear una implementación en Azure OpenAI, vea Introducción a la generación de texto mediante Azure OpenAI Service.

Implementación del servicio de IA

Ahora que la aplicación está implementada, puede implementar el microservicio basado en Python que usa OpenAI para generar automáticamente descripciones de los nuevos productos que se agregan al catálogo de la tienda.

  1. Cree un archivo denominado ai-service.yaml y cópielo en el siguiente manifiesto:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ai-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ai-service
      template:
        metadata:
          labels:
            app: ai-service
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: ai-service
            image: ghcr.io/azure-samples/aks-store-demo/ai-service:latest
            ports:
            - containerPort: 5001
            env:
            - name: USE_AZURE_OPENAI 
              value: "True"
            - name: AZURE_OPENAI_DEPLOYMENT_NAME 
              value: ""
            - name: AZURE_OPENAI_ENDPOINT 
              value: ""
            - name: OPENAI_API_KEY 
              value: ""
            resources:
              requests:
                cpu: 20m
                memory: 50Mi
              limits:
                cpu: 50m
                memory: 128Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: ai-service
    spec:
      type: ClusterIP
      ports:
      - name: http
        port: 5001
        targetPort: 5001
      selector:
        app: ai-service
    
  2. Establezca la variable de entorno USE_AZURE_OPENAI en "True".

  3. Obtenga el nombre de la implementación de Azure OpenAI en Estudio de Azure OpenAI y rellene el valor AZURE_OPENAI_DEPLOYMENT_NAME.

  4. Obtenga el punto de conexión de Azure OpenAI y la clave de la API de Azure OpenAI desde Azure Portal; para ello, haga clic en Claves y punto de conexión en el panel izquierdo del recurso. Actualice AZURE_OPENAI_ENDPOINT y OPENAI_API_KEY en YAML en consecuencia.

  5. Implemente la aplicación mediante el comando kubectl apply y especifique el nombre del manifiesto de YAML.

    kubectl apply -f ai-service.yaml
    

    En la salida de ejemplo siguiente se muestran las implementaciones y los servicios creados correctamente:

      deployment.apps/ai-service created
      service/ai-service created
    

Nota:

La adición directa de información confidencial, como las claves de API, a los archivos de manifiesto de Kubernetes no es segura y puede confirmarse accidentalmente en los repositorios de código. Lo agregamos aquí por motivos de simplicidad. En el caso de las cargas de trabajo de producción, use Identidad administrada para autenticarse en el servicio Azure OpenAI en su lugar o almacenar los secretos en Azure Key Vault.

Prueba de la aplicación

  1. Compruebe el estado de los pods implementados con el comando kubectl get pods.

    kubectl get pods
    

    Asegúrese de que todos los pods estén en ejecución antes de continuar con el paso siguiente.

    NAME                                READY   STATUS    RESTARTS   AGE
    makeline-service-7db94dc7d4-8g28l   1/1     Running   0          99s
    mongodb-78f6d95f8-nptbz             1/1     Running   0          99s
    order-service-55cbd784bb-6bmfb      1/1     Running   0          99s
    product-service-6bf4d65f74-7cbvk    1/1     Running   0          99s
    rabbitmq-9855984f9-94nlm            1/1     Running   0          99s
    store-admin-7f7d768c48-9hn8l        1/1     Running   0          99s
    store-front-6786c64d97-xq5s9        1/1     Running   0          99s
    virtual-customer-79498f8667-xzsb7   1/1     Running   0          99s
    virtual-worker-6d77fff4b5-7g7rj     1/1     Running   0          99s
    
  2. Para obtener la dirección IP de la aplicación web de administración de la tienda y la aplicación web de front-end de la tienda, use el comando kubectl get service.

    kubectl get service store-admin
    

    La aplicación expone el sitio de Administración de la tienda a Internet a través de un equilibrador de carga público aprovisionado por el servicio Kubernetes. Este proceso puede tardar unos minutos en completarse. IP EXTERNA muestra inicialmente pendiente, hasta que el servicio se activa y muestra la dirección IP.

    NAME          TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
    store-admin   LoadBalancer   10.0.142.228   40.64.86.161    80:32494/TCP   50m    
    

    Repita el mismo paso para el servicio denominado "escaparate".

  3. Abra un explorador web y vaya a la dirección IP externa del servicio. En el ejemplo que se muestra aquí, abra 40.64.86.161 para ver Administración de la tienda en el navegador. Repita el mismo paso para Escaparate.

  4. En la administración de la tienda, seleccione la pestaña de productos y después Agregar productos.

  5. Cuando "ai-service" se ejecuta correctamente, debería ver el botón Preguntar a OpenAI junto al campo de descripción. Rellene el nombre, el precio y las palabras clave y, después, seleccione Preguntar a OpenAI>Guardar producto para generar una descripción del producto.

    Captura de pantalla de cómo usar openAI para generar la descripción de un producto.

  6. Ahora puede ver el nuevo producto que ha creado en Administración de la tienda usado por los vendedores. En la imagen, se puede ver que se agrega Jungle Monkey Chew Toy.

    Captura de pantalla en la que se ve el nuevo producto en la página de administración de la tienda.

  7. También puede ver el nuevo producto que ha creado en el Escaparate usado por los compradores. En la imagen, se puede ver que se agrega Jungle Monkey Chew Toy. No olvide obtener la dirección IP del escaparate mediante el comandokubectl get service.

    Captura de pantalla en la que se ve el nuevo producto en la página de escaparate de la tienda.

Pasos siguientes

Ahora que ha agregado la funcionalidad de OpenAI a una aplicación de AKS, puede proteger el acceso a Azure OpenAI desde Azure Kubernetes Service (AKS).

Para más información sobre los casos de uso de IA generativa, vea los siguientes recursos: