Naar de inhoud springen

Zoek in de documentatie

Typ om elke pagina van de documentatie te doorzoeken.

Documentatiemenu
How-toDoelgroep · Beheerders & DevOps

Deployment

Van een lokale Compose-stack tot Kubernetes in productie

Deze pagina is automatisch vanuit het Engels vertaald. Bij verschillen geldt het origineel.Het origineel in het Engels lezen

Twee deploymentmodellen

Model Wat je krijgt Waar je heen gaat
Docker Compose De referentie-app + de volledige set afhankelijkheden, op je eigen machine, binnen enkele minuten Handleiding voor ontwikkelaars — De applicatie uitvoeren
Kubernetes (Terraform + Helm) Een referentiedeployment voor productie: operators, databases, authenticatie, secrets, observability, alles erop en eraan Deze pagina

Lokaal: Docker Compose

De repository van het framework bevat twee complete stacks — applicatie, PostgreSQL (met pgvector), Redis, Vault en een observability-stack:

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

Gescaffolde projecten krijgen een eigen compose.yml (app + postgres + redis + vault) — zie Je eerste agent.

Productie: Kubernetes met Terraform

Agent-Lab biedt Terraform-scripts die de applicatie en haar afhankelijkheden op Kubernetes deployen. Deze walkthrough gebruikt ter referentie een Minikube-cluster — gebruik voor echte deployments een productieklaar cluster.

Vereisten

Een Kubernetes-cluster opzetten

Minikube (Linux) — wijs voldoende resources toe (de referentiestack is zwaar):

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

Bepaal het IP-adres van het cluster en koppel de servicedomeinen eraan:

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) — schakel de meegeleverde Kubernetes in:

Kubernetes inschakelen


Met Docker Desktop worden domeinen via localhost geresolved:

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

Afhankelijkheden provisionen

Elke module hieronder staat in terraform/ — pas ze toe met terraform init && terraform apply in elke directory, in deze volgorde:

Module Wat het provisiont
01_traefik/ Traefik-ingresscontroller
02_cert-manager/ cert-manager voor TLS
03_cert-cluster-issuer/ Let's Encrypt-ClusterIssuer voor productie
04_redis-operator/ Redis-operator (pub/sub-statusupdates)
05_postgres-operator/ PostgreSQL-operator — drie databases: relationeel, pgvector, checkpoints
06_keycloak-operator/ Keycloak-operator
08_vault-instance/ Vault voor secrets

Keycloak-instantie (09_keycloak-instance/), haal daarna het beheerderswachtwoord op:

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

Configureer de OIDC-verbinding volgens Authenticatie met Keycloak, of laat de module 12_agent-lab-auth-realm/ dat doen (zie hieronder).

Vault initialiseren (08_vault-instance/ toegepast) — initialiseer en unseal:

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

Observability (optioneel maar aanbevolen) — de platforms voor LLM-observability die worden gebruikt door de simulatiesuite en de tracing-backends:

Module Wat het provisiont
13_langfuse-instance/ Langfuse — LLM-traces & simulatie-experimenten
14_langwatch-instance/ LangWatch — simulaties & dashboards
07_elastic-operator/ + 10_elastic-instance/ ECK (Elastic) voor logs & APM

Haal de Elastic-inloggegevens op:

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/) — het OTLP-endpoint waarnaar de app exporteert (Observability).

LiteLLM-gateway (17_litellm-instance/) — een zelf gehoste, OpenAI-compatibele LLM-gateway met virtuele sleutels, bijhouden van uitgaven en een beheer-UI (/ui):

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

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

Agent-Lab deployen

Drie modules verbinden alles met elkaar:

Module Wat het configureert
12_agent-lab-auth-realm/ De Keycloak-realm, client en het serviceaccount voor de app
15_agent-lab-dependencies/ Koppeling van runtime-afhankelijkheden (databases, broker, LANGFUSE_*-sleutels, …)
16_agent-lab-instance/ De Agent-Lab-applicatie zelf
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

Voorbeeld van een deployment


Opmerking over secrets: de deployment leest bij het opstarten zijn configuratie uit Vault (secret/app_secrets) — de sleutels van de payload staan in de Configuratiereferentie.

Helm-chart

De repository bevat ook een Helm-chart, charts/agent-lab, die de deployment van de applicatie verpakt met haar sidecars: headless Chrome (CDP) voor webagents, een HPA, ingress, configuratie en serviceaccount. Gebruik deze als je je eigen afhankelijkheden al beheert en alleen de app wilt installeren.

Checklist

Controleer het volgende voordat je het als afgerond beschouwt:

  • GET /status/liveness en GET /status/readiness geven 200 terug
  • GET /docs wordt weergegeven en GET /agents/list reageert (met een token als authenticatie aan staat)
  • Traces komen aan bij je OTLP-endpoint (zie Observability)
  • Vault bevat secret/app_secrets met alle payloadsleutels
  • Keycloak-realm heeft een client en een serviceaccount