了解 GCP Terraform 模块 配置了什么以及各部分如何协同工作,以便在运行 make apply 之前规划、保护和自定义您的 LangSmith 部署。 在规划部署或排查现有部署问题时,可将此页作为参考。内容涵盖:
  • 平台层级和部署层级(轻量级与生产级)。
  • 模块描述及依赖关系。
  • 网络、工作负载标识和流量。
  • 附加组件:LangSmith Deployment、Fleet、Insights 和 Polly。
  • GCP 托管服务与 Secret Manager 集成。
如果您已准备好安装,请从部署指南开始。

平台层级

LangSmith 在 GCP 上的部署最多分为五个阶段。每个阶段在上一个阶段的基础上增加一个能力层。所有层共享同一个 GKE 集群和 langsmith 命名空间。 GCP 上的 LangSmith 部署阶段和服务布局
Fleet(chart v0.15+)是原先称为 Agent Builder 的功能的当前版本。通过 enable_fleet 启用。与已弃用的 enable_agent_builder 路径不同,它不需要 LangSmith Deployment 层。这两个标志互斥且共享相同的加密密钥。详情请参见部署指南中的启用附加组件。

模块描述

部署层级

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

在 terraform.tfvars 中设置:

生产级(外部托管服务)

应用核心服务

集群内的 ClickHouse 仅供开发/POC 使用(单 Pod,无复制,无备份)。对于生产环境,请使用 LangChain 托管的 ClickHouse 或自管理的外部集群。
SmithDB 是 LangSmith 专为可观测性构建的后端,从自托管版本 0.16.0 开始可用于自托管环境(参见自托管支持)。这些 Terraform 模块配置了 ClickHouse,因此前面章节中的指导适用于当前的部署。

一次性任务

LangSmith Deployment 附加组件

在 UI 中创建的每个 LangGraph 部署都会在 langsmith 命名空间中生成一个 Kubernetes Deployment,其 Pod 以 langsmith-ksa ServiceAccount 运行。该 ServiceAccount 必须带有 iam.gke.io/gcp-service-account 注解,deploy.sh 会幂等地应用此注解。

GCP 托管服务

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

Cloud SQL PostgreSQL

  • 默认大小 db-custom-2-8192(2 vCPU, 8 GB),私有 IP,端口 5432。
  • 区域性高可用,支持自动故障转移。
  • 存储组织、用户、项目、API 密钥、设置。
  • Terraform 直接将连接 URL 写入 langsmith-postgres-credentials Kubernetes Secret。

Memorystore Redis

  • 默认 5 GB,STANDARD_HA 层级,私有 IP,端口 6379。
  • 用于 trace 摄取队列、发布/订阅、短期缓存。
  • 无需认证令牌。访问仅通过 VPC 私有 IP 控制。
  • Terraform 直接将连接 URL 写入 langsmith-redis-credentials Kubernetes Secret。

Cloud Storage 存储桶

  • 存储 trace 负载:大型输入和输出、附件。
  • 提供的 Helm 值使用原生 GCS 模式(engine: GCS, apiURL: https://storage.googleapis.com),通过工作负载标识认证,无需 HMAC 密钥。
  • 也支持 S3 兼容模式(engine: S3),在 helm/values/examples/langsmith-values.yaml 中展示。它需要 HMAC 密钥:在 Cloud Storage → 设置 → 互操作性下创建一个,并通过 config.blobStorage.accessKey 和 config.blobStorage.accessKeySecret 传递给 Helm。
  • 生命周期规则:ttl_s/ 前缀(默认 14 天),ttl_l/ 前缀(默认 400 天)。
  • 无论哪个层级,GCS 存储桶始终是必需的。

Secret Manager(可选模块)

  • 当 enable_secret_manager_module = true 时,存储一个 JSON 密钥包(生成的 LangSmith 密钥、Postgres 密码、Redis 密码)。
  • 核心密钥(langsmith-postgres-credentials, langsmith-redis-credentials)无论是否启用此模块,都始终由 k8s-bootstrap 存储在 Kubernetes Secrets 中。Secret Manager 为必须在集群重建后仍然存在的密钥提供了一个额外的持久化存储。

集群基础设施

Gateway 资源由 Terraform 管理;HTTPRoute 由 Helm 管理。请勿手动删除 Gateway 资源。GCP 会在 Gateway 删除时释放外部 IP,然后在重新创建时分配一个新的 IP。

工作负载标识

GKE Pod 通过工作负载标识访问 GCS。Kubernetes ServiceAccount 通过 IAM 绑定与 GCP 服务账户关联;Pod 接收临时凭证,无需在 Secrets 或环境变量中存储静态密钥。
GSA 由 iam 模块定义并输出为 workload_identity_annotation。init-values.sh 会自动将这些注解写入 values-overrides.yaml。 在原生 GCS 模式(默认提供)下,上述 GSA 绑定已足够。可选的 S3 兼容模式(engine: S3)还需要 HMAC 密钥:在 Cloud Storage → 设置 → 互操作性下创建一个,并将其传递给 Helm。

网络拓扑

Cloud SQL 和 Memorystore 仅通过私有 IP 访问。当 postgres_source = "external" 或 redis_source = "external" 时,网络模块会建立专用服务连接(VPC 对等连接到 Google 的托管网络)。

流量走向

组件与存储映射

Secret Manager 集成

不使用 Secret Manager 时:
使用 Secret Manager 时:
在两种情况下,Terraform 都会直接写入 Kubernetes Secrets。启用 Secret Manager 会在集群外部添加一份 Postgres 密码、Redis 密码和生成的密钥的持久化副本。没有任何机制将 Secret Manager 同步回集群,因此 GCP 上不安装 External Secrets Operator(不同于使用 SSM Parameter Store 进行同步的 AWS 模块)。

Terraform 模块依赖图

infra 层不安装 LangSmith chart。应用层通过以下两种方式之一安装它,两者都使用 helm/values/ 下相同的分层值文件:
  • 部署脚本:make init-values && make deploy 运行 helm upgrade --install。
  • Terraform app 层:make init-values && make init-app && make apply-app 将 chart 作为 helm_release 资源管理。make init-app 将 infra 输出(集群、存储桶、工作负载标识注解)拉入 app/infra.auto.tfvars.json,因此 app 层无需远程状态数据源即可读取它们。

验证命令