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
- Necesita una cuenta de Azure con una suscripción activa. Si no tiene ninguna cuenta, cree una gratuita.
- Para esta demostración, puede usar el servicio Azure OpenAI o el servicio OpenAI.
- Si planea usar el servicio Azure OpenAI, debe solicitar acceso para habilitarlo en la suscripción de Azure mediante el formulario Solicitar acceso a Azure OpenAI Service.
- Si planea usar OpenAI, regístrese en el sitio web de OpenAI.
Requisitos previos
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio rápido para Bash en Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
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.
Para instalar
kubectl
localmente, use el comandoaz 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
.Para configurar
kubectl
para conectarse a su clúster de Kubernetes, use el comandoaz 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
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
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.
Revise el manifiesto de YAML de la aplicación.
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.
- Habilite Azure OpenAI en su suscripción de Azure rellenando el formulario Solicitud de acceso a Azure OpenAI Service.
- En Azure Portal, cree una instancia de Azure OpenAI.
- Seleccione la instancia de Azure OpenAI que ha creado.
- Seleccione Claves y puntos de conexión para generar una clave.
- Seleccione Implementaciones de modelos>Implementaciones administradas para abrir el Estudio de Azure OpenAI.
- 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.
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
Establezca la variable de entorno
USE_AZURE_OPENAI
en"True"
.Obtenga el nombre de la implementación de Azure OpenAI en Estudio de Azure OpenAI y rellene el valor
AZURE_OPENAI_DEPLOYMENT_NAME
.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
yOPENAI_API_KEY
en YAML en consecuencia.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
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
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".
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.
En la administración de la tienda, seleccione la pestaña de productos y después Agregar productos.
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.
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.
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 comando
kubectl get service
.
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:
Azure Kubernetes Service