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

En este artículo, implementará la aplicación de demostración de la Tienda AKS en Azure Kubernetes Service (AKS) y configurará Azure OpenAI o la API de OpenAI para generar descripciones de productos.

La aplicación nativa de nube de ejemplo consta de servicios escritos 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 front-end para compradores y administradores de tiendas, API REST que envían datos a una cola de mensajes rabbitMQ y una base de datos de DocumentDB y aplicaciones de consola que simulan el tráfico.

Nota

No ejecute contenedores con estado, como DocumentDB y RabbitMQ, sin almacenamiento persistente en producción. En este artículo se usan sin almacenamiento persistente por motivos de simplicidad. En el caso de las cargas de trabajo de producción, use servicios administrados como Azure Cosmos DB o Azure Service Bus.

Para acceder al código base de GitHub para la aplicación de ejemplo, consulte AKS Store Demo.

Antes de empezar

Requisitos previos

Crear un grupo de recursos

Un grupo de recursos Azure es un grupo lógico en el que se implementan y administran Azure recursos. 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 dónde se ejecutan los recursos en Azure si no 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 siguiente salida de ejemplo muestra la creación exitosa 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 el cliente de línea de comandos de Kubernetes, kubectl. 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 requiere permisos elevados, use el sudo az aks install-cli comando .

  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. Especifique una ubicación diferente para el archivo de configuración de Kubernetes mediante 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
    

    En la salida de ejemplo siguiente se muestran los nodos creados en los pasos anteriores. Compruebe que cada nodo tiene el estado 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

Para un clúster de AKS privado, conéctese desde un punto de conexión de la misma red virtual que el clúster. Para obtener instrucciones de configuración, consulte Creación de un clúster de AKS privado.

Implementación de la aplicación

El manifiesto AKS Store incluye 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.
  • Tienda virtual: aplicación web en línea 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.
  • DocumentDB: NoSQL instancia de datos persistentes.
  • RabbitMQ: cola de mensajes para una cola de pedidos.

Nota

No ejecute contenedores con estado, como DocumentDB y RabbitMQ, sin almacenamiento persistente en producción. En este artículo se usan sin almacenamiento persistente por motivos de simplicidad. En el caso de las cargas de trabajo de producción, use servicios administrados como Azure Cosmos DB o Azure Service Bus.

  1. Revise el manifiesto YAML para 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
    

Implementación de un servicio OpenAI

Elija Azure OpenAI o openAI API para la aplicación que se ejecuta en AKS.

  1. En el portal de Azure, cree una instancia de OpenAI Azure.
  2. Inicie sesión en Microsoft Foundry.
  3. Desactive el botón de alternancia New Foundry y, a continuación, seleccione Ver todos los recursos en Mantener la compilación con Foundry.
  4. Seleccione el Azure recurso openAI que creó y, a continuación, seleccione Implementaciones en Recursos compartidos.
  5. Seleccione Implementar modelo>Implementar modelo base.
  6. Seleccione el modelo base gpt-4o-mini , escriba un nombre de implementación y, a continuación, implemente el modelo. Guarde el nombre de la implementación para la sección siguiente.

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

Implementación del microservicio de IA

Implemente el microservicio de IA basado en Python que usa OpenAI para generar automáticamente descripciones de productos. Este microservicio se conecta a la aplicación almacén de AKS que implementó en la sección anterior.

Use la Azure implementación de modelos y recursos de OpenAI que creó en la sección Implementación de un servicio OpenAI. Configure las siguientes variables de entorno en el manifiesto del microservicio de IA:

Variable del entorno Value
USE_AZURE_OPENAI Establézcalo en "True" para usar Azure OpenAI.
AZURE_OPENAI_DEPLOYMENT_NAME Nombre de la implementación del gpt-4o-mini modelo en Microsoft Foundry.
AZURE_OPENAI_ENDPOINT Punto de conexión de la página Claves y punto de conexión del recurso Azure OpenAI.
OPENAI_API_KEY Una clave de API de la página Claves y punto de conexión del recurso de Azure OpenAI.
  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:2.2.0
              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. En Microsoft Foundry, copie el Azure nombre de implementación de OpenAI y establezca el AZURE_OPENAI_DEPLOYMENT_NAME valor.

  4. En el portal de Azure, seleccione Claves y punto de conexión en el recurso Azure OpenAI. Copie el punto de conexión y la clave de API y, a continuación, establezca los AZURE_OPENAI_ENDPOINT valores y OPENAI_API_KEY .

  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

El almacenamiento de claves de API directamente en manifiestos de Kubernetes no es seguro y puede exponer secretos en el control de código fuente. En este ejemplo se usan valores de manifiesto para simplificar. En el caso de las cargas de trabajo de producción, autentíquese en Azure OpenAI mediante una identidad administrada o almacene secretos en Azure Key Vault.

Prueba de la aplicación

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

    kubectl get pods
    

    Compruebe que todos los pods tienen el estado En ejecución antes de continuar.

  2. Obtenga la dirección IP externa para el administrador de la Tienda mediante el kubectl get service comando .

    kubectl get service store-admin
    

    Un servicio de Kubernetes expone el administrador del almacén a través de un equilibrador de carga público. El equilibrador de carga puede tardar unos minutos en asignar una dirección. El valor EXTERNAL-IP se muestra pendiente hasta que la dirección esté disponible.

    NAME          TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
    store-admin   LoadBalancer   10.0.142.228   40.64.86.161    80:32494/TCP   50m
    
  3. Repita el paso anterior para el store-front servicio.

  4. En un explorador web, vaya a la dirección IP externa del administrador de la Tienda. En este ejemplo, la dirección es 40.64.86.161.

  5. En Administrador de la Tienda, seleccione Products>Add Product (Agregar producto).

  6. Después ai-service de iniciarse, el botón Preguntar al Asistente para IA aparece junto al campo descripción. Escriba el nombre, el precio y las palabras clave, seleccione Preguntar al Asistente para IA para generar una descripción del producto y, a continuación, seleccione Guardar producto.

  7. Compruebe que el collar inteligente de perro aparece en el administrador de la tienda.

    Captura de pantalla que muestra el nuevo producto en el administrador de la Tienda.

  8. Vaya a la dirección IP externa de Store Front y compruebe que aparece Dog Smart Collar.

    Captura de pantalla que muestra el nuevo producto en Store Front.

Pasos siguientes

Ahora que ha agregado la funcionalidad de OpenAI a una aplicación de AKS, puede asegurar 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: