Deploy with Helm
With the infrastructure in place, install the confident-ai Helm chart using the Terraform outputs, then expose it over HTTPS with a Google-managed certificate. The chart pulls its images from Confident AI’s registry and installs the app plus in-cluster ClickHouse.
The recommended setup keeps app secrets in Google Secret Manager (synced by the External Secrets Operator) and runs Redis on Memorystore. Both are provisioned by the Terraform module. In-cluster Redis and a Kubernetes Secret are supported as a simpler alternative, see Simpler option.
Two things come from Confident AI with your Enterprise license:
- Image pull credentials: an AWS access key ID and secret that let the cluster pull the first-party images. The chart uses them to mint and refresh the pull secret automatically.
- License key (
CONFIDENT_LICENSE_KEY): the signed key that enables your plan’s features.
About OPENAI_API_KEY: it backs the built-in Confident AI evaluation provider, which runs on OpenAI. It is optional. Omit it and connect your own model provider or an LLM gateway per project from AI Connections in the app instead.
Set your domain once. You will expose four subdomains on it: app. and api. for the dashboard and API, and evals. and otel. for the evaluation and trace-ingestion endpoints:
Reserve a static IP and point DNS
At your DNS provider, create A records for app.$DOMAIN, api.$DOMAIN, evals.$DOMAIN, and otel.$DOMAIN, all pointing at that IP. The managed certificate only goes Active once these resolve, so set them all now.
Put the secrets in Secret Manager
DATABASE_URL comes straight from Terraform. Each key in this JSON object becomes an app secret:
This uses the secret Terraform created with confident_create_secret_manager = true. If you did not enable it, either turn it on and re-apply, or use the simpler option.
Install the External Secrets Operator
Terraform already Workload-Identity-bound the ESO service account to confident-ai/external-secrets-sa:
Write the values file
Save this as values.gcp.yaml. Fill the bracketed values from your Terraform outputs and the credentials Confident AI gave you. The image.tag is pinned to the chart’s current app version.
Simpler option: in-cluster Redis and a Kubernetes Secret
If you would rather not run a cloud secret store or managed Redis, the chart can hold secrets in a Kubernetes Secret and run Redis in the cluster. This is less production-hardened (secrets live in the cluster, Redis has no managed backups), but it removes the ESO and Memorystore steps. Skip steps 3 and 4 above, and replace the secrets and redis blocks in the values file with:
Back up ClickHouse (recommended)
For production, enable the nightly ClickHouse backup to GCS. It needs the backup bucket and a Secret with GCS HMAC keys; that one-time setup is on the Disaster Recovery page. Once they exist, add this under your existing clickhouse: block and helm upgrade:
Troubleshooting
Updating and tearing down
- Change the app: edit
values.gcp.yaml, thenhelm upgrade confident-ai oci://ghcr.io/confident-ai/charts/confident-ai --version 0.1.0 -n confident-ai -f values.gcp.yaml. - Rotate a secret: write a new version to Secret Manager. ESO re-syncs it, then restart the pods to pick up the change (they hold secrets as env vars until they restart):
kubectl rollout restart deployment -n confident-ai. - Change infrastructure: edit the Terraform config and
terraform apply. - Remove everything:
helm uninstall confident-ai -n confident-ai,helm uninstall external-secrets -n external-secrets, thenterraform destroy, then delete the static IP and (if Terraform did not own it) the network from the Infrastructure page.