理解 Azure Terraform 模块 提供的功能以及各部分如何协同工作,这样您就可以在运行 make apply 之前对 LangSmith 部署进行规模规划、安全设置和自定义。 在规划推出或排查现有部署问题时,请将此页作为参考。它涵盖:
  • 平台层和部署层级(轻量版与生产版)。
  • 应用程序部署路径(Helm 与 Terraform)。
  • 网络、工作负载标识和密钥流转。
  • 附加组件:LangSmith Deployment、Agent Builder、Insights 和 Polly。
  • 入口控制器、资源规模调整和可选模块。
如果您准备开始安装,请从部署指南开始。

平台层

LangSmith 在 Azure 上分阶段部署。每个阶段在上一阶段的基础上添加一个功能层。所有层共享同一个 AKS 集群和 langsmith 命名空间。 LangSmith on Azure 服务布局

应用程序部署路径

Terraform 路径使用 app/ 模块。make init-app 调用 app/scripts/pull-infra-outputs.sh 来读取所有基础设施输出,并将它们写入 app/infra.auto.tfvars.json。

部署层级

轻量版部署(全部在集群内)

在 terraform.tfvars 中设置:
要了解完整的全集群内部署指南(使用 NGINX 和 Let’s Encrypt HTTP-01 TLS,所有数据库均在集群内),请参阅 Azure 模块仓库 中的 BUILDING_LIGHT_LANGSMITH.md。

生产版(使用外部托管服务)

网络

轻量版部署

生产版

所有子网均为私有。Postgres 和 Redis 没有公共端点;两者仅可通过 VNet 内的私有 DNS 解析进行访问。

应用程序核心服务

集群内 ClickHouse 仅适用于开发/概念验证(单 Pod,无复制,无备份)。生产环境请使用 LangChain 托管 ClickHouse 或自行管理的外部集群。
SmithDB 是 LangSmith 专为可观测性打造的后端,自托管版本从 0.16.0 起开始支持(请参阅自托管支持)。这些 Terraform 模块会配置 ClickHouse,因此前述章节的指南适用于当前部署。

一次性任务

LangSmith Deployment 附加组件

Agent Builder 附加组件

Insights 和 Polly 附加组件

Insights/Clio: 无静态 Pod。在首次 UI 调用时,通过 operator 惰性部署为动态 LangGraph 部署。从 langsmith-config-secret 读取 insights_encryption_key。绝对不要轮换此密钥:这会永久破坏现有的 Insights 数据。 Polly: 作为动态 LangGraph 部署运行,由 operator 管理。从 langsmith-config-secret 读取 polly_encryption_key。轮换警告与 Insights 相同。

Azure 托管服务

当 postgres_source = "external" 且 redis_source = "external"(推荐的生产设置)时,Terraform 会配置:

Azure DB for PostgreSQL 灵活服务器

  • 存储组织、用户、项目、API 密钥、设置。
  • 需要 PostgreSQL ≥ 14。postgres 模块默认将 postgres_version 设置为 14。
  • 由 postgres 模块自动启用的扩展:btree_gin、btree_gist、pgcrypto、citext、pg_trgm。
  • 仅限私有 VNet(subnet-postgres),SSL 端口 5432。
  • Secret:langsmith-postgres-secret,由 k8s-bootstrap Terraform 模块创建。

Azure 托管 Redis

  • 跟踪摄入队列、发布/订阅、短期缓存。
  • Azure 托管 Redis 管理引擎版本;没有版本变量可设置。
  • 每个 LangSmith 安装必须使用自己的专用 Redis。共享实例会导致部署任务路由错误。
  • 仅限私有 VNet(subnet-redis),TLS 端口 10000。
  • Secret:langsmith-redis-secret,由 k8s-bootstrap Terraform 模块创建。

Azure Blob 存储

  • 跟踪有效载荷:大型输入和输出、附件。
  • 通过 k8s-app-identity 托管身份实现工作负载标识(无静态密钥)。
  • 始终必需。禁用 Blob 存储会在大型有效载荷导致集群崩溃。
  • 前缀:ttl_s/(14 天 TTL),ttl_l/(400 天 TTL)。

Azure Key Vault

  • 所有 LangSmith 密钥的集中式密钥存储。
  • 密钥流转:az keyvault secret show → kubectl create secret generic langsmith-config-secret。

工作负载标识

Azure AD 令牌交换通过 AKS OIDC 颁发者进行。Pod 无需静态密钥即可访问 Blob 存储。
工作负载标识在 modules/k8s-cluster/ 中与托管身份和 OIDC 颁发者一起集中管理,这避免了循环依赖并简化了添加新 ServiceAccount 的过程。

哪些 Pod 需要工作负载标识

每个读取 Blob 存储环境变量的 Pod 必须具备:
  1. 在 Terraform 中注册的联合凭据(modules/k8s-cluster/main.tf)。
  2. Deployment 上的标签 azure.workload.identity/use: "true"。
  3. ServiceAccount 上的注解 azure.workload.identity/client-id。
所有联合凭据都在 modules/k8s-cluster/main.tf 的 service_accounts_for_workload_identity 下注册。添加访问 Blob 存储的新 Pod 需要将其 ServiceAccount 名称添加到该列表中,然后运行 terraform apply -target=module.aks。 如果一个 Pod 的 ServiceAccount 没有注册的联合凭据,Azure AD 将拒绝令牌交换,该 Pod 会在启动时崩溃:

密钥流转

关键规则: secrets.auto.tfvars 永远不会被提交。在任何机器上运行 ./setup-env.sh 都可以恢复它:生成的密钥来自 Key Vault,而用户提供的密钥会重新提示输入,除非通过 LANGSMITH_* 环境变量提供。Terraform 是 Key Vault 的唯一写入者;setup-env.sh 仅在首次应用后从其读取。

入口选项

Azure 公共 IP DNS 标签 (dns_label) 适用于所有控制器。deploy.sh 根据所选控制器将 service.beta.kubernetes.io/azure-dns-label-name 注解应用到正确的 LoadBalancer 服务。 有关完整的 TLS 兼容性矩阵和每个控制器的设置,请参阅 Azure 模块仓库 中的 INGRESS_CONTROLLERS.md。

资源规模调整

提供四种规模配置文件。

AKS 节点池

ClickHouse(当在集群内时)根据配置文件请求 1 到 4 个 CPU 和 2 到 16 GB RAM。使用 LangChain 托管 ClickHouse 时,large 池仅用于 LGP operator 生成的代理 Pod。

可选模块

每个模块由计数控制(0 禁用,1 启用)。启用任意组合;核心部署(第 1 至 5 遍)无需它们即可工作。