make targets run from modules/gcp/. Run make help for an inline summary.
Deployment overview
| Stage | What gets deployed | Command |
|---|---|---|
| Infrastructure | VPC + GKE + Cloud SQL + Memorystore + GCS + IAM + cert-manager + KEDA + Envoy Gateway | make apply |
| Cluster credentials | Kubeconfig wired to the new GKE cluster | make kubeconfig |
| LangSmith base | Frontend, backend, ingest, queue, ClickHouse | make init-values && make deploy |
| Fleet add-on (standalone) | standalone-fleet-* API server, tool server, trigger server, queue | make apply && make init-values && make deploy |
| LangSmith Deployment add-on | host-backend, listener, operator | make apply && make init-values && make deploy |
| Agent Builder add-on (deprecated) | tool-server, trigger-server + agent-builder LGP | make init-values && make deploy |
| Insights + Polly add-on | Clio analytics, Polly eval agent | make init-values && make deploy |
First-time setup
make deploy-all chains apply, init-values, and deploy in one command.
To keep the Helm release under Terraform instead of the deploy script, use the app layer:
app layer uses its own variable names: sizing (not sizing_profile) and enable_agent_deploys (not enable_deployments).
Day-2 operations
Add-ons
Set flags interraform.tfvars, then make init-values && make deploy. init-values.sh copies the matching example file into helm/values/ automatically.
init-values.sh, copy manually:
Sizing profiles
Setsizing_profile in terraform.tfvars, then re-run make init-values && make deploy.
| Profile | When to use |
|---|---|
default | Chart defaults — quick tests, no overlay applied |
minimum | Absolute floor; fits e2-standard-4; use for cost parking or CI smoke tests |
dev | Single replica, minimal resources |
production | Multi-replica with HPA; recommended for real workloads |
production-large | High memory and CPU; 50+ users or 1000+ traces/sec |
kubectl
gcloud
Terraform
Key constraints
- Uninstall Helm before
terraform destroy. The Envoy Gateway load balancer references the VPC; leaving it blocks network deletion. Always runmake uninstallfirst. config.deployment.urlmust includehttps://. Without the protocol, operator-spawned agents stay stuck inDEPLOYING.config.deployment.enabled: trueis required for the LangSmith Deployment add-on. Setting only the URL withoutenabled: truesilently skipslistenerandoperator.- Encryption keys must never change after first enable. Rotating
insights_encryption_keyorpolly_encryption_keypermanently breaks existing encrypted data. - Roll the frontend after first Polly enable.
agentBootstrapcreates thelangsmith-polly-configConfigMap after registering; frontend pods started earlier do not pick it up. - Envoy Gateway IP changes on teardown. GCP releases the external IP when the Gateway is deleted. After
terraform destroyand re-apply, update your DNS A record. langsmith-ksaannotation is not permanent. The operator creates the ServiceAccount at runtime and it does not survive namespace deletion.deploy.shre-annotates it idempotently.
Teardown
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

