make apply 之前对 LangSmith 部署进行规模规划、安全设置和自定义。
在规划推出或排查现有部署问题时,请将此页作为参考。它涵盖:
- 平台层和部署层级(轻量版与生产版)。
- 应用程序部署路径(Helm 与 Terraform)。
- 网络、工作负载标识和密钥流转。
- 附加组件:LangSmith Deployment、Agent Builder、Insights 和 Polly。
- 入口控制器、资源规模调整和可选模块。
平台层
LangSmith 在 Azure 上分阶段部署。每个阶段在上一阶段的基础上添加一个功能层。所有层共享同一个 AKS 集群和langsmith 命名空间。
应用程序部署路径
Terraform 路径使用
app/ 模块。make init-app 调用 app/scripts/pull-infra-outputs.sh 来读取所有基础设施输出,并将它们写入 app/infra.auto.tfvars.json。
部署层级
轻量版部署(全部在集群内)
terraform.tfvars 中设置:
BUILDING_LIGHT_LANGSMITH.md。
生产版(使用外部托管服务)
网络
轻量版部署
生产版
应用程序核心服务
一次性任务
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-bootstrapTerraform 模块创建。
Azure 托管 Redis
- 跟踪摄入队列、发布/订阅、短期缓存。
- Azure 托管 Redis 管理引擎版本;没有版本变量可设置。
- 每个 LangSmith 安装必须使用自己的专用 Redis。共享实例会导致部署任务路由错误。
- 仅限私有 VNet(
subnet-redis),TLS 端口 10000。 - Secret:
langsmith-redis-secret,由k8s-bootstrapTerraform 模块创建。
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 必须具备:- 在 Terraform 中注册的联合凭据(
modules/k8s-cluster/main.tf)。 - Deployment 上的标签
azure.workload.identity/use: "true"。 - 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 遍)无需它们即可工作。
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

