跳转到内容

搜索文档

输入即可搜索文档的所有页面。

文档菜单
操作指南受众 · 运维人员与 DevOps 工程师

部署

从本地 Compose 栈到生产环境 Kubernetes

本页面由英文机器翻译而来。如有出入,以原文为准。阅读英文原文

两种部署模式

模式 你将获得 前往何处
Docker Compose 参考应用 + 完整的依赖组件,在你的机器上几分钟即可就绪 开发者指南——运行应用
Kubernetes(Terraform + Helm) 一套生产级参考部署:Operator、数据库、认证、密钥、可观测性,一应俱全 本页

本地:Docker Compose

框架仓库附带两套完整的技术栈——应用、PostgreSQL(含 pgvector)、Redis、Vault 以及一套可观测性栈:

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

脚手架生成的项目会拥有各自的 compose.yml(app + postgres + redis + vault)——参见你的第一个智能体。

生产环境:基于 Terraform 的 Kubernetes 部署

Agent-Lab 提供了 Terraform 脚本,用于在 Kubernetes 上部署应用及其依赖。本演练出于参考目的使用 Minikube 集群——真实部署请使用可用于生产环境的集群。

前提条件

搭建 Kubernetes 集群

Minikube(Linux)——分配足够的资源(参考技术栈较为庞大):

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

获取集群 IP,并将各服务域名映射到该 IP:

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)——启用其内置的 Kubernetes:

启用 Kubernetes


使用 Docker Desktop 时,域名通过 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

预置依赖

下面的每个模块都位于 terraform/ 中——按以下顺序,在每个目录中执行 terraform init && terraform apply 进行应用:

模块 预置内容
01_traefik/ Traefik ingress 控制器
02_cert-manager/ 用于 TLS 的 cert-manager
03_cert-cluster-issuer/ Let's Encrypt 生产环境 ClusterIssuer
04_redis-operator/ Redis Operator(发布/订阅状态更新)
05_postgres-operator/ PostgreSQL Operator——三个数据库:关系型、pgvector、检查点
06_keycloak-operator/ Keycloak Operator
08_vault-instance/ 用于密钥管理的 Vault

Keycloak 实例(09_keycloak-instance/),然后获取管理员密码:

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

按照使用 Keycloak 进行认证配置 OIDC 连接,或者交由 12_agent-lab-auth-realm/ 模块完成(见下文)。

Vault 初始化(已应用 08_vault-instance/)——初始化并解封:

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

可观测性(可选,但推荐)——供模拟测试套件和追踪后端使用的 LLM 可观测性平台:

模块 预置内容
13_langfuse-instance/ Langfuse——LLM 追踪与模拟实验
14_langwatch-instance/ LangWatch——模拟与仪表盘
07_elastic-operator/ + 10_elastic-instance/ 用于日志和 APM 的 ECK(Elastic)

获取 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/)——应用导出数据的 OTLP 端点(可观测性)。

LiteLLM 网关(17_litellm-instance/)——一个自托管的 OpenAI 兼容 LLM 网关,支持虚拟密钥、费用跟踪,并提供管理界面(/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

由三个模块将所有组件连接起来:

模块 配置内容
12_agent-lab-auth-realm/ 供应用使用的 Keycloak realm、客户端和服务账号
15_agent-lab-dependencies/ 运行时依赖的接入(数据库、消息代理、LANGFUSE_* 密钥等)
16_agent-lab-instance/ Agent-Lab 应用本身
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

部署示例


关于密钥:部署会在启动时从 Vault(secret/app_secrets)读取配置——载荷中的键列在配置参考中。

Helm chart

仓库还附带一个 Helm chart charts/agent-lab,它将应用部署及其边车(sidecar)组件打包在一起:供 Web 智能体使用的无头 Chrome(CDP)、HPA、ingress、配置和服务账号。如果你已经在自行运维各项依赖,只想安装应用本身,就可以使用它。

检查清单

在宣告完成之前,请确认:

  • GET /status/liveness 和 GET /status/readiness 返回 200
  • GET /docs 能正常渲染,且 GET /agents/list 有响应(启用认证时需携带令牌)
  • 追踪数据已到达你的 OTLP 端点(参见可观测性)
  • Vault 中包含 secret/app_secrets,且含有所有载荷键
  • Keycloak realm 中已有一个客户端和一个服务账号