Aller au contenu

Rechercher dans la documentation

Saisissez votre recherche pour parcourir toutes les pages de la documentation.

Menu de la documentation
Guide pratiquePublic · Opérateurs et DevOps

Déploiement

D'une stack Compose locale à Kubernetes en production

Cette page a été traduite automatiquement depuis l'anglais. En cas de divergence, la version originale fait foi.Lire l'original en anglais

Deux modèles de déploiement

Modèle Ce que vous obtenez Où aller
Docker Compose L'application de référence et l'ensemble de ses dépendances, sur votre machine, en quelques minutes Guide du développeur — Exécuter l'application
Kubernetes (Terraform + Helm) Un déploiement de référence pour la production : opérateurs, bases de données, authentification, secrets, observabilité, tout y est Cette page

En local : Docker Compose

Le dépôt du framework fournit deux stacks complètes — application, PostgreSQL (avec pgvector), Redis, Vault et une stack d'observabilité :

docker compose -f compose-grafana.yml up --build      # Grafana stack
docker compose -f compose-opensearch.yml up --build   # OpenSearch Dashboards stack

Les projets générés disposent de leur propre compose.yml (app + postgres + redis + vault) — voir Votre premier agent.

En production : Kubernetes avec Terraform

Agent-Lab fournit des scripts Terraform qui déploient l'application et ses dépendances sur Kubernetes. Ce pas-à-pas utilise un cluster Minikube à titre de référence — utilisez un cluster prêt pour la production pour les déploiements réels.

Prérequis

Mettre en place un cluster Kubernetes

Minikube (Linux) — allouez suffisamment de ressources (la stack de référence est gourmande) :

minikube start --memory=20g --cpus=4

Récupérez l'adresse IP du cluster et faites-y pointer les domaines des services :

minikube ip
# 192.168.49.2
192.168.49.2 vault.my-domain.com kibana.my-domain.com elasticsearch.my-domain.com agent-lab.my-domain.com litellm.my-domain.com

Docker Desktop (Mac / Windows) — activez le Kubernetes intégré :

Activer Kubernetes


Avec Docker Desktop, les domaines sont résolus via localhost :

127.0.0.1 vault.my-domain.com kibana.my-domain.com elasticsearch.my-domain.com agent-lab.my-domain.com litellm.my-domain.com

Provisionner les dépendances

Chacun des modules ci-dessous se trouve dans terraform/ — appliquez-les avec terraform init && terraform apply dans chaque répertoire, dans cet ordre :

Module Ce qu'il provisionne
01_traefik/ Contrôleur d'ingress Traefik
02_cert-manager/ cert-manager pour le TLS
03_cert-cluster-issuer/ ClusterIssuer Let's Encrypt de production
04_redis-operator/ Opérateur Redis (mises à jour d'état pub/sub)
05_postgres-operator/ Opérateur PostgreSQL — trois bases de données : relationnelle, pgvector, checkpoints
06_keycloak-operator/ Opérateur Keycloak
08_vault-instance/ Vault pour les secrets

Instance Keycloak (09_keycloak-instance/), puis récupérez le mot de passe administrateur :

echo "$(kubectl --namespace keycloak get secret/keycloak-initial-admin -o go-template='{{index .data "password" | base64decode}}')"

Configurez la connexion OIDC comme décrit dans Authentification avec Keycloak, ou laissez le module 12_agent-lab-auth-realm/ s'en charger (voir ci-dessous).

Initialisation de Vault (une fois 08_vault-instance/ appliqué) — initialisez et descellez :

kubectl --namespace vault exec vault-0 -- vault operator init \
    -key-shares=1 \
    -key-threshold=1 \
    -format=json > cluster-keys.json

export VAULT_UNSEAL_KEY=$(jq -r ".unseal_keys_b64[]" cluster-keys.json)
kubectl --namespace vault exec vault-0 -- vault operator unseal $VAULT_UNSEAL_KEY

Observabilité (facultative mais recommandée) — les plateformes d'observabilité LLM utilisées par la suite de simulation et les backends de traçage :

Module Ce qu'il provisionne
13_langfuse-instance/ Langfuse — traces LLM et expériences de simulation
14_langwatch-instance/ LangWatch — simulations et tableaux de bord
07_elastic-operator/ + 10_elastic-instance/ ECK (Elastic) pour les logs et l'APM

Récupérez les identifiants Elastic :

echo "$(kubectl --namespace elastic get secret elasticsearch-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode)"

echo "$(kubectl --namespace elastic get secret/elastic-eck-apm-server-apm-token \
    -o go-template='{{index .data "secret-token" | base64decode}}')"

OpenTelemetry Collector (11_otel-instance/) — le point de terminaison OTLP vers lequel l'application exporte (Observabilité).

Passerelle LiteLLM (17_litellm-instance/) — une passerelle LLM auto-hébergée compatible OpenAI, avec clés virtuelles, suivi des dépenses et interface d'administration (/ui) :

echo "$(kubectl --namespace litellm get secret/litellm-masterkey -o go-template='{{index .data "masterkey" | base64decode}}')"

curl -s https://<litellm_fqdn>/health/readiness

Déployer Agent-Lab

Trois modules assemblent l'ensemble :

Module Ce qu'il configure
12_agent-lab-auth-realm/ Le realm Keycloak, le client et le compte de service de l'application
15_agent-lab-dependencies/ Le câblage des dépendances d'exécution (bases de données, broker, clés LANGFUSE_*, …)
16_agent-lab-instance/ L'application Agent-Lab elle-même
cd terraform/12_agent-lab-auth-realm/ && terraform init && terraform apply
cd terraform/15_agent-lab-dependencies/ && terraform init && terraform apply
cd terraform/16_agent-lab-instance/ && terraform init && terraform apply

Exemple de déploiement


Remarque sur les secrets : le déploiement lit sa configuration depuis Vault au démarrage (secret/app_secrets) — les clés de la charge utile sont répertoriées dans la Référence de configuration.

Chart Helm

Le dépôt fournit également un chart Helm, charts/agent-lab, qui package le déploiement de l'application avec ses sidecars : Chrome headless (CDP) pour les agents web, un HPA, l'ingress, la configuration et le compte de service. Utilisez-le si vous exploitez déjà vos propres dépendances et souhaitez uniquement installer l'application.

Liste de contrôle

Avant de considérer le travail comme terminé, vérifiez que :

  • GET /status/liveness et GET /status/readiness renvoient 200
  • GET /docs s'affiche et GET /agents/list répond (avec un jeton lorsque l'authentification est activée)
  • Les traces arrivent sur votre point de terminaison OTLP (voir Observabilité)
  • Vault contient secret/app_secrets avec toutes les clés de la charge utile
  • Le realm Keycloak dispose d'un client et d'un compte de service