Skip to content

Deploy with Helm

The Helm chart in infra/helm/caracal renders production-shaped Kubernetes resources for API, STS, Gateway, Audit, Coordinator, and optional Control.

ResourcePurpose
DeploymentAPI, Audit, Coordinator, and Control when enabled.
StatefulSetSTS and Gateway when replay persistence is enabled.
JobPre-install/pre-upgrade Postgres migrations.
ServiceClusterIP service per enabled component.
IngressOptional external API and Gateway endpoints.
NetworkPolicyDefault-deny with explicit internal, storage, DNS, OTLP, HTTPS, and custom egress controls.
PDB/HPAAvailability and scaling controls per service.
ServiceMonitor/PrometheusRuleMetrics scraping and built-in alert recipes.

The chart ships three overlays on top of values.yaml. Pick one explicitly — values.production.yaml is the canonical enterprise install path:

Overlayglobal.modePostureUse for
values.production.yamlstableFail-closed; replicas, PDBs, anti-affinity baked inProduction (canonical)
values.rc.yamlrcSame fail-closed trust boundary; release-candidate build may be functionally unstableStaging / pre-release validation
values.dev.yamldevRelaxed, single-host conveniencesLocal evaluation only

Always pass the chosen overlay with --values; never install on bare values.yaml.

Terminal window
helm upgrade --install caracal infra/helm/caracal \
--namespace caracal \
--create-namespace \
--values infra/helm/caracal/values.production.yaml

Before installing, provide the runtime Secret named by secrets.runtimeSecretName or set secrets.create=true with plaintext values only for a controlled evaluation environment.

For a managed-cloud install with the runtime Secret provisioned by the External Secrets Operator, a production overlay, and cert-manager TLS ingress, follow Deploy on Managed Kubernetes.

ComponentPort
API3000
STS8080
Gateway8081
Audit9090
Coordinator4000
Controlin-process in API (3000) when enabled
AreaValues
Imagesglobal.registry, global.tag, global.imagePullPolicy, global.mode
Secretssecrets.runtimeSecretName, secrets.database.*, secrets.redis.*, token secret refs
NetworknetworkPolicy.*, ingress.gateway.*, ingress.api.*
Reliabilityservices.<name>.replicas, pdb, hpa, resource requests/limits
ReplayreplayPersistence.enabled, storageClassName, size
ObservabilityserviceMonitor.enabled, alertRules.enabled, global.otelExporterOtlpEndpoint
Terminal window
helm lint infra/helm/caracal
helm template caracal infra/helm/caracal --values infra/helm/caracal/values.production.yaml >/tmp/caracal.yaml
kubectl -n caracal rollout status deploy/caracal-api
kubectl -n caracal get pods,svc

Run readiness probes through the Service or Ingress endpoints after rollout.

Terminal window
helm -n caracal history caracal
helm -n caracal rollback caracal <revision>

Migrations are forward-only. Rollbacks must use application versions compatible with the already-applied schema.

SymptomCheck
Migration Job failsCheck database host, port, user, database name, password key, and sslMode.
Pods fail readinessInspect dependency readiness, mounted secrets, and service-specific required env vars.
Gateway Ingress works but upstream calls failCheck NetworkPolicy egress and upstream allowlist configuration.
STS or Gateway loses audit replayEnsure replay persistence is enabled and PVCs are not deleted during rollouts.

Use Choose a Cloud Profile when the Helm deployment needs managed storage, ingress, external secrets, or production network policy.