Déployer une application qui utilise OpenAI sur Azure Kubernetes Service (AKS)
Dans cet article, vous apprenez à déployer une application qui utilise Azure OpenAI ou OpenAI sur AKS. Avec OpenAI, vous pouvez facilement adapter différents modèles IA, tels que la génération de contenu, la synthèse, la recherche sémantique et le langage naturel à la génération de code, pour vos tâches spécifiques. Vous commencez par déployer un cluster AKS dans votre abonnement Azure. Ensuite, vous déployez votre service OpenAI et l’exemple d’application.
L’exemple d’application native sur le cloud est représentatif des implémentations réelles. La solution multiconteneur est composée d’applications écrites dans plusieurs langages et infrastructures, dont :
- Golang avec Gin
- Rust avec Actix-Web
- JavaScript avec Vue.js et Fastify
- Python avec FastAPI
Ces applications fournissent des serveurs frontaux pour les clients et les administrateurs de magasin, des API REST pour l’envoi de données à la file d’attente de messages RabbitMQ et à la base de données MongoDB, ainsi que des applications console pour simuler le trafic.
Notes
Nous déconseillons l’exécution de conteneurs avec état, tels que MongoDB et Rabbit MQ, sans stockage persistant pour la production. Nous l’utilisons ici par souci de simplicité, mais nous vous recommandons d’utiliser des services gérés, tels qu’Azure CosmosDB ou Azure Service Bus.
Pour accéder au codebase GitHub pour l’exemple d’application, consultez Démonstration d’AKS Store.
Avant de commencer
- Vous devez avoir un compte Azure avec un abonnement actif. Si vous n’en avez pas un, créez un compte gratuitement.
- Pour cette version de démonstration, vous pouvez utiliser le service Azure OpenAI ou le service OpenAI.
- Si vous envisagez d’utiliser le service Azure OpenAI, vous devez demander l’accès pour l’activer pour votre abonnement Azure en remplissant le formulaire Demander l’accès auprès d’Azure OpenAI Service.
- Si vous envisagez d’utiliser OpenAI, inscrivez-vous sur le site web OpenAI.
Prérequis
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour plus d’informations, consultez Démarrage rapide pour Bash dans Azure Cloud Shell.
Si vous préférez exécuter les commandes de référence de l’interface de ligne de commande localement, installez l’interface Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Guide pratique pour exécuter Azure CLI dans un conteneur Docker.
Si vous utilisez une installation locale, connectez-vous à Azure CLI à l’aide de la commande az login. Pour finir le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour connaître les autres options de connexion, consultez Se connecter avec Azure CLI.
Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser des extensions avec Azure CLI.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
Créer un groupe de ressources
Un groupe de ressources Azure est un groupe logique dans lequel vous déployez et gérez des ressources Azure. Lorsque vous créez un groupe de ressources, vous êtes invité à spécifier un emplacement. Cet emplacement est l'emplacement de stockage des métadonnées de votre groupe de ressources et l'endroit où vos ressources s'exécutent dans Azure si vous ne spécifiez pas une autre région lors de la création de la ressource.
L’exemple suivant crée un groupe de ressources nommé myResourceGroup à l’emplacement eastus.
Créez un groupe de ressources avec la commande
az group create
.az group create --name myResourceGroup --location eastus
L’exemple de sortie suivant montre la création réussie du groupe de ressources :
{ "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup", "location": "eastus", "managedBy": null, "name": "myResourceGroup", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": "Microsoft.Resources/resourceGroups" }
Créer un cluster AKS
L’exemple suivant crée un cluster nommé myAKSCluster dans myResourceGroup.
Créez un cluster AKS avec la commande
az aks create
.az aks create --resource-group myResourceGroup --name myAKSCluster --generate-ssh-keys
Au bout de quelques minutes, la commande se termine et retourne des informations au format JSON sur le cluster.
Se connecter au cluster
Pour gérer un cluster Kubernetes, vous utilisez kubectl, le client de ligne de commande Kubernetes. Si vous utilisez Azure Cloud Shell, kubectl
est déjà installé.
Installez
kubectl
localement avec la commandeaz aks install-cli
.az aks install-cli
Remarque
Si votre système Linux nécessite des autorisations élevées, vous pouvez utiliser la commande
sudo az aks install-cli
.Configurez
kubectl
afin de vous connecter à votre cluster Kubernetes avec la commandeaz aks get-credentials
.Cette commande exécute les opérations suivantes :
- Cette étape télécharge les informations d’identification et configure l’interface de ligne de commande Kubernetes pour leur utilisation.
~/.kube/config
, l’emplacement par défaut du fichier de configuration Kubernetes. Spécifiez un autre emplacement pour votre fichier de configuration Kubernetes à l’aide de l’argument --file.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Pour vérifier la connexion à votre cluster, exécutez la commande
kubectl get
. Cette commande renvoie la liste des nœuds de cluster.kubectl get nodes
L’exemple de sortie suivant montre les nœuds créés au cours des étapes précédentes. Assurez-vous que l’état du nœud est Prêt.
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
Remarque
Pour les clusters privés, les nœuds peuvent être inaccessibles si vous essayez de vous y connecter via l’IP publique. Pour résoudre ce problème, vous devez créer un point de terminaison dans le même réseau virtuel que le cluster à partir duquel la connexion doit être établie. Suivez les instructions pour Créer un cluster AKS privé, puis connectez-vous à celui-ci.
Déployer l’application
Le manifeste de l’application AKS Store inclut les déploiements et services Kubernetes suivants :
- Service de produit : affiche les informations sur le produit.
- Service de commande : passe des commandes.
- Service Makeline : traite les commandes de la file d’attente et termine les commandes.
- Vitrine : application web permettant aux clients d’afficher les produits et de passer des commandes.
- Administrateur de magasin : application web permettant aux employés du magasin d’afficher les commandes dans la file d’attente et de gérer les informations sur le produit.
- Client virtuel : simule la création de commandes sur une base planifiée.
- Virtual Worker : simule l’achèvement des commandes sur une base planifiée.
- Mongo DB : instance NoSQL pour les données persistantes.
- Rabbit MQ : file d’attente de messages pour une file d’attente de commandes.
Remarque
Nous déconseillons l’exécution de conteneurs avec état, tels que MongoDB et Rabbit MQ, sans stockage persistant pour la production. Nous l’utilisons ici par souci de simplicité, mais nous vous recommandons d’utiliser des services gérés, tels qu’Azure CosmosDB ou Azure Service Bus.
Passez en revue le manifeste YAML de l’application.
Déployez l’application à l’aide de la commande
kubectl apply
et spécifiez le nom de votre manifeste YAML.kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-all-in-one.yaml
L’exemple de sortie suivant montre les déploiements et services créés :
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
Déployer OpenAI
Vous pouvez utiliser Azure OpenAI ou OpenAI et exécuter votre application sur AKS.
- Activez Azure OpenAI sur votre abonnement Azure en remplissant le formulaire Demander l’accès au service Azure OpenAI.
- Dans le portail Azure, créez un instance Azure OpenAI.
- Sélectionnez l’instance Azure OpenAI que vous avez créée.
- Sélectionnez Clés et points de terminaison pour générer une clé.
- Sélectionnez Déploiements de modèles, puis Déploiements managés pour ouvrir Azure OpenAI Studio.
- Créez un nouveau déploiement à l’aide du modèle gpt-35-turbo.
Pour plus d’informations sur la création d’un déploiement dans Azure OpenAI, consultez Bien démarrer avec la génération de texte à l’aide d’Azure OpenAI Service.
Déployer le service IA
Maintenant que l’application est déployée, vous pouvez déployer le microservice Python qui utilise OpenAI pour générer automatiquement des descriptions des nouveaux produits ajoutés au catalogue du magasin.
Créez un fichier nommé
ai-service.yaml
et copiez-y le manifeste suivant :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
Définissez la variable d’environnement
USE_AZURE_OPENAI
sur"True"
.Obtenez le nom de votre déploiement Azure OpenAI à partir d’Azure OpenAI Studio et renseignez la valeur
AZURE_OPENAI_DEPLOYMENT_NAME
.Obtenez votre point de terminaison Azure OpenAI et votre clé API Azure OpenAI à partir du portail Azure en sélectionnant Clés et point de terminaison dans le panneau gauche de la ressource. Mettez à jour
AZURE_OPENAI_ENDPOINT
etOPENAI_API_KEY
dans le YAML en conséquence.Déployez l’application à l’aide de la commande
kubectl apply
et spécifiez le nom de votre manifeste YAML.kubectl apply -f ai-service.yaml
L’exemple de sortie suivant montre les déploiements et services créés :
deployment.apps/ai-service created service/ai-service created
Remarque
L’ajout direct d’informations sensibles, telles que des clés API, à vos fichiers manifestes Kubernetes n’est pas sécurisé et peut être accidentellement validée dans des référentiels de code. Nous les avons ajoutées ici pour plus de simplicité. Pour les charges de travail de production, utilisez l’identité managée pour vous authentifier auprès du service Azure OpenAI à la place, ou stockez vos secrets dans Azure Key Vault.
Test de l’application
Vérifiez l’état des pods déployés à l’aide de la commande kubectl get pods.
kubectl get pods
Assurez-vous que tous les pods sont en cours d’exécution avant de passer à l’étape suivante.
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
Obtenez l’adresse IP de l’application web d’administration du magasin et de l’application web de vitrine à l’aide de la commande
kubectl get service
.kubectl get service store-admin
L’application expose le site Administrateur de magasin à Internet via un équilibreur de charge public approvisionné par le service Kubernetes. L’exécution de ce processus peut prendre plusieurs minutes. ADRESSE IP EXTERNE affiche initialement en attente, jusqu’à ce que le service arrive et affiche l’adresse 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
Répétez la même étape pour le service nommé store-front.
Ouvrez un navigateur web et accédez à l’adresse IP externe de votre service. Dans l’exemple présenté ici, ouvrez 40.64.86.161 pour afficher l’administrateur de magasin dans le navigateur. Répétez la même étape pour Vitrine.
Dans Administrateur de magasin, sélectionnez l’onglet Produits, puis sélectionnez Ajouter des produits.
Lorsque « ai-service » s’exécute correctement, le bouton Demander à OpenAI doit s’afficher en regard du champ de description. Renseignez le nom, le prix et les mots clés, puis générez une description du produit en sélectionnant Demander à OpenAI>Enregistrer le produit.
Vous pouvez maintenant voir le nouveau produit que vous avez créé dans l’administrateur de magasin utilisé par les vendeurs. Sur l’image, vous pouvez voir que Jungle Monkey Chew Toy est ajouté.
Vous pouvez également voir le nouveau produit que vous avez créé sur la vitrine utilisée par les acheteurs. Sur l’image, vous pouvez voir que Jungle Monkey Chew Toy est ajouté. N’oubliez pas d’obtenir l’adresse IP de la vitrine à l’aide de la commande
kubectl get service
.
Étapes suivantes
Maintenant que vous avez ajouté la fonctionnalité OpenAI à une application AKS, vous pouvez sécuriser l’accès à Azure OpenAI à partir d’Azure Kubernetes Service (AKS).
Pour en savoir plus sur les cas d’usage de l’IA générative, consultez les ressources suivantes :
Azure Kubernetes Service