Launch Week 02 wrapped — explore all five launches

Self-Hosted Configuration Reference

Included on the Enterprise plan. Book a demo, opens in a new tab. Not included on the Team plan. Not included on the Starter plan. Not included on the Free plan.

The confident-ai Helm chart is configured through a values file. This page explains the settings you will actually touch, grouped by concern. Each cloud's Deploy page (AWS, GCP, Azure) gives a complete, working values file; this is the reference for what each block means. For the long tail (fine-grained resource tuning, operator internals), read the chart's values.yaml directly.

Images and registry

Each app image is referenced as a full repository plus tag, so every image is traceable directly from values.yaml. All four app images share one tag through a YAML anchor, so the chart's default tag matches its release (appVersion) — installing a chart version gives you the app version it bundles, with no override needed.

ValueDefaultDescription
image.registryConfident AI's ECRRegistry host, used only by the ECR pull-secret refresher.
image.backend.repository (and frontend, evals, otel)Confident AI's ECR reposFull repository per app image. Override to pull from a mirror.
image.backend.tag (and frontend, evals, otel)chart appVersionThe release each image runs. Defaults to the chart's appVersion; set the per-service tag to pin or override.
image.pullPolicyIfNotPresentStandard Kubernetes pull policy.

Pulling the images

The images live in Confident AI's private registry. The chart can mint and refresh the pull secret for you, since ECR tokens expire about every 12 hours.

ValueDefaultDescription
imagePullSecrets[]Pull secrets referenced by every workload, for example [{name: ecr-registry-credentials}].
imagePullSecretRefresh.enabledfalseCreate and refresh the ECR pull secret on a schedule.
imagePullSecretRefresh.region""AWS region of the registry (required when enabled).
imagePullSecretRefresh.awsAccessKeyId / awsSecretAccessKey""ECR credentials from Confident AI, rendered into the refresher Secret.
imagePullSecretRefresh.awsCredentialsSecret""Use an existing Secret with the AWS keys instead of inlining them.
imagePullSecretRefresh.schedule0 */6 * * *Refresh cadence.

Application config

Non-secret settings, rendered into a ConfigMap every workload reads.

ValueDefaultDescription
config.cloudProviderAWSAWS, GCP, or AZURE. Selects the storage backend.
config.frontendUrl""Public dashboard URL, for example https://app.acme.com. Drives the app. ingress host.
config.backendUrl""Public API URL, for example https://api.acme.com. Drives the api. ingress host.
config.subdomain""Cookie domain shared by the frontend and backend, for example acme.com.
config.isAzureEnvironmentfalseSet true on Azure.
config.disableNonSsoLoginfalseRequire SSO and turn off email and password login.
config.disableSignUpfalseTurn off new-account signup; existing users can still log in.
config.enableExperimentalFeaturesfalseEnable experimental and preview features.
config.useWebsocketstrueUse WebSockets for real-time updates in the dashboard.
config.auditLogStdoutfalseMirror audit events to stdout as JSON for log-based metrics (for example, Datadog).
config.regionUSData region label.
config.betterAuthTrustedOrigins""Extra comma-separated trusted origins for auth.
config.pocfalseMarks the environment as a proof of concept.
config.extraEnv{}Extra key and value pairs appended to the ConfigMap.

Identity

How the app authenticates to your cloud. The details differ per cloud.

ValueDefaultDescription
serviceAccount.createtrueCreate the ServiceAccount all workloads share.
serviceAccount.name""Reuse a pre-provisioned ServiceAccount instead.
serviceAccount.annotations{}Cloud workload-identity binding (see below).
podLabels{}Extra pod labels. Azure Workload Identity requires azure.workload.identity/use: "true".

The annotation per cloud:

  • AWS: none. EKS Pod Identity binds the role out of band, so the ServiceAccount carries no annotation.
  • GCP: iam.gke.io/gcp-service-account: <gsa-email>.
  • Azure: none for Blob (a connection string is used); Workload Identity is only needed for the External Secrets Operator.

Object storage

ValueDefaultDescription
storage.testCasesBucket / storage.payloadsBucket""Bucket names (AWS, GCP) or container names (Azure).
storage.aws.regionus-east-1Region for S3.
storage.gcp.projectId / storage.gcp.region""Project and region for GCS.
storage.azure.storageAccountName""Storage account for Blob. The connection string goes in secrets.

Secrets

Application secrets reach the workloads one of two ways. Pick one.

ValueDefaultDescription
secrets.createtrueRender a Kubernetes Secret from secrets.data.
secrets.existingSecret""Use a Secret you created yourself (Vault, SealedSecrets, and so on).
secrets.data.DATABASE_URL""PostgreSQL connection string.
secrets.data.BETTER_AUTH_SECRET""Auth token signing secret (openssl rand -hex 32).
secrets.data.OPENAI_API_KEY""Optional, backs the built-in Confident AI evaluation provider.
secrets.data.CONFIDENT_LICENSE_KEY""Your signed Enterprise license key.
secrets.data.GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET""Optional Google OAuth.
secrets.data.AZURE_STORAGE_CONNECTION_STRING""Blob credential (Azure only).

To pull from a cloud secret store instead, enable the External Secrets Operator. When externalSecrets.enabled is true, secrets.data is ignored and the operator owns the app Secret.

ValueDefaultDescription
secrets.externalSecrets.enabledfalseSync secrets from a cloud store through ESO.
secrets.externalSecrets.providerawsaws (Secrets Manager), gcpsm (Secret Manager), or azurekv (Key Vault).
secrets.externalSecrets.createStorefalseAlso render the (Cluster)SecretStore for the provider.
secrets.externalSecrets.remoteKey""Name of the one JSON secret (aws, gcpsm). Key Vault pulls all secrets instead.
secrets.externalSecrets.serviceAccountRef.nameexternal-secrets-saServiceAccount ESO authenticates as.
secrets.externalSecrets.aws.region / gcp.* / azure.vaultUrl""Provider-specific location.

Code executor

Required for code-based and transformer metrics. The provider selects which block is used; an empty provider disables it.

ValueDefaultDescription
codeExecutor.provider""AWS_LAMBDA, GCP_CLOUD_FUNCTIONS, or AZURE_FUNCTIONS.
codeExecutor.aws.lambdaFunctionName / lambdaRegion""Lambda target.
codeExecutor.gcp.functionUrl""Cloud Run service URL.
codeExecutor.azure.functionUrl""Function URL (append /api/execute).

ClickHouse

Runs in the cluster by default, replicated for high availability. See Scaling and Disaster Recovery.

ValueDefaultDescription
clickhouse.internaltrueRun the bundled cluster. Set false and externalHost to use your own.
clickhouse.password""Admin password, also exposed to the app as CLICKHOUSE_PASSWORD.
clickhouse.clusterTypereplicatedReplication across replicas via Keeper.
clickhouse.replicas / clickhouse.shards2 / 1Cluster size.
clickhouse.storage / clickhouse.storageClass256Gi / ""Data volume. Size for growth.
clickhouse.keeper.replicas / keeper.storage3 / 20GiKeeper quorum. Keep at 3.
clickhouse.backup.enabledfalseNightly backup to object storage (see Disaster Recovery).
clickhouse.extraConfigIPv4 listenPins the pods to listen on 0.0.0.0. Leave as is unless you run dual-stack.

Redis

ValueDefaultDescription
redis.internaltrueRun the bundled Redis. Set false to use managed Redis.
redis.externalUrl""Managed Redis URL when internal: false.
redis.storage / redis.storageClass1Gi / ""Volume for the in-cluster Redis.

Workloads and scaling

Each service (backend, frontend, evals, evalsWorker, ingestionWorker, worker, otel) has the same shape. See Scaling for how to tune them.

ValueDescription
<service>.replicasFixed replica count when autoscaling is off.
<service>.autoscaling.enabledTurn HPA on or off (on by default for most).
<service>.autoscaling.minReplicas / maxReplicas / targetCPUHPA bounds and target.
<service>.resourcesCPU and memory requests and limits.
<service>.readinessProbeHTTP readiness path (drives the cloud load balancer health check).
backend.migrations.enabledRun the database migration job on install and upgrade (leave on).

Ingress

ValueDefaultDescription
ingress.enabledfalseCreate the Ingress.
ingress.classNamealbIngress class (alb, nginx, webapprouting.kubernetes.io, or empty for GKE's annotation-driven controller).
ingress.annotations{}Cloud-specific annotations, see the Deploy pages.
ingress.hosts.evals / ingress.hosts.otel""The evals. and otel. hostnames. app. and api. come from config.
ingress.tls[]TLS blocks (host list plus secret name).

Observability

ValueDefaultDescription
datadog.enabledfalseEmit Datadog APM and metrics.
datadog.env / datadog.versionprod / appVersionTags on the emitted telemetry.

The full list

This page covers the settings most deployments set. The chart's values.yaml is the source of truth and carries inline comments for every option, including operator internals, per-service resource defaults, and the ClickHouse backup providers. When in doubt, read it there.

Find your self-hosting path in < 15 minutesExplore deployment options and get a tailored walkthrough of architecture, security, and rollout for your environment.Book a demo

Last updated on

Built byConfident AI