Zum Inhalt springen

Dokumentation durchsuchen

Tippe, um alle Seiten der Dokumentation zu durchsuchen.

Dokumentationsmenü
AnleitungZielgruppe · Betreiber & DevOps

Deployment

Vom lokalen Compose-Stack bis zum produktiven Kubernetes

Diese Seite wurde maschinell aus dem Englischen übersetzt. Bei Abweichungen gilt das Original.Original auf Englisch lesen

Zwei Deployment-Modelle

Modell Was Sie erhalten Wo es weitergeht
Docker Compose Die Referenzanwendung + alle Abhängigkeiten, auf Ihrem Rechner, in wenigen Minuten Entwicklerhandbuch – Die Anwendung ausführen
Kubernetes (Terraform + Helm) Ein produktives Referenz-Deployment: Operatoren, Datenbanken, Authentifizierung, Secrets, Observability – das volle Programm Diese Seite

Lokal: Docker Compose

Das Framework-Repository enthält zwei vollständige Stacks – Anwendung, PostgreSQL (mit pgvector), Redis, Vault und einen Observability-Stack:

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

Per Scaffolding erzeugte Projekte erhalten ihre eigene compose.yml (App + postgres + redis + vault) – siehe Ihr erster Agent.

Produktion: Kubernetes mit Terraform

Agent-Lab stellt Terraform-Skripte bereit, die die Anwendung und ihre Abhängigkeiten auf Kubernetes deployen. Diese Anleitung verwendet zu Referenzzwecken einen Minikube-Cluster – verwenden Sie für echte Deployments einen produktionsreifen Cluster.

Voraussetzungen

Einen Kubernetes-Cluster einrichten

Minikube (Linux) – weisen Sie ausreichend Ressourcen zu (der Referenz-Stack ist ressourcenintensiv):

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

Ermitteln Sie die Cluster-IP und ordnen Sie ihr die Service-Domains zu:

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) – aktivieren Sie das mitgelieferte Kubernetes:

Kubernetes aktivieren


Mit Docker Desktop werden die Domains über localhost aufgelöst:

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

Abhängigkeiten bereitstellen

Alle folgenden Module befinden sich in terraform/ – wenden Sie sie mit terraform init && terraform apply im jeweiligen Verzeichnis an, und zwar in dieser Reihenfolge:

Modul Was es bereitstellt
01_traefik/ Traefik-Ingress-Controller
02_cert-manager/ cert-manager für TLS
03_cert-cluster-issuer/ Produktiver Let's-Encrypt-ClusterIssuer
04_redis-operator/ Redis-Operator (Pub/Sub-Statusupdates)
05_postgres-operator/ PostgreSQL-Operator – drei Datenbanken: relational, pgvector, Checkpoints
06_keycloak-operator/ Keycloak-Operator
08_vault-instance/ Vault für Secrets

Keycloak-Instanz (09_keycloak-instance/), anschließend das Admin-Passwort auslesen:

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

Konfigurieren Sie die OIDC-Verbindung gemäß Authentifizierung mit Keycloak oder überlassen Sie dies dem Modul 12_agent-lab-auth-realm/ (siehe unten).

Vault-Initialisierung (nachdem 08_vault-instance/ angewendet wurde) – initialisieren und entsiegeln:

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 (optional, aber empfohlen) – die LLM-Observability-Plattformen, die von der Simulations-Suite und den Tracing-Backends verwendet werden:

Modul Was es bereitstellt
13_langfuse-instance/ Langfuse – LLM-Traces & Simulationsexperimente
14_langwatch-instance/ LangWatch – Simulationen & Dashboards
07_elastic-operator/ + 10_elastic-instance/ ECK (Elastic) für Logs & APM

Rufen Sie die Elastic-Zugangsdaten ab:

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/) – der OTLP-Endpoint, an den die Anwendung exportiert (Observability).

LiteLLM-Gateway (17_litellm-instance/) – ein selbst gehostetes, OpenAI-kompatibles LLM-Gateway mit virtuellen Schlüsseln, Kostenverfolgung und einer Admin-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

Drei Module verbinden alles miteinander:

Modul Was es konfiguriert
12_agent-lab-auth-realm/ Keycloak-Realm, Client und Service-Account für die Anwendung
15_agent-lab-dependencies/ Verdrahtung der Laufzeitabhängigkeiten (Datenbanken, Broker, LANGFUSE_*-Schlüssel, …)
16_agent-lab-instance/ Die Agent-Lab-Anwendung selbst
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

Deployment-Beispiel


Hinweis zu Secrets: Das Deployment liest seine Konfiguration beim Start aus Vault (secret/app_secrets) – die Payload-Schlüssel sind in der Konfigurationsreferenz aufgeführt.

Helm-Chart

Das Repository enthält außerdem ein Helm-Chart, charts/agent-lab, das das Deployment der Anwendung mit ihren Sidecars paketiert: Headless Chrome (CDP) für Web-Agenten, einen HPA, Ingress, Konfiguration und Service-Account. Verwenden Sie es, wenn Sie Ihre Abhängigkeiten bereits selbst betreiben und nur die Anwendung installieren möchten.

Checkliste

Prüfen Sie vor dem Abschluss:

  • GET /status/liveness und GET /status/readiness liefern 200
  • GET /docs wird gerendert und GET /agents/list antwortet (mit Token, wenn die Authentifizierung aktiv ist)
  • Traces kommen an Ihrem OTLP-Endpoint an (siehe Observability)
  • Vault enthält secret/app_secrets mit allen Payload-Schlüsseln
  • Der Keycloak-Realm hat einen Client und einen Service-Account