Skip to main content
The Tracecat Helm chart is distributed as a private OCI artifact hosted in AWS ECR. Please contact customer success for access for evaluations or internal enterprise use.

Prerequisites

  • Kubernetes 1.27+
  • Helm 3.12+ (with OCI support)
  • kubectl configured for your target cluster
  • Access to the Tracecat OCI Helm chart (see above)
  • External PostgreSQL instance (e.g., Amazon RDS, Cloud SQL)
  • External Redis instance (e.g., Amazon ElastiCache, Memorystore)
  • S3-compatible object storage (e.g., Amazon S3, MinIO)
  • openssl (for generating secrets)

Core secrets

Tracecat requires four cryptographic secrets.

Secrets management

The Helm chart supports three strategies for providing secrets to Tracecat pods.

External services

The Helm chart does not bundle databases. You must provide connection details for PostgreSQL, Redis, S3, and Temporal.

PostgreSQL

For Amazon RDS, download the global CA bundle from the AWS trust store.

Redis

The url key should be a full Redis connection string, e.g. rediss://:password@host:6379. Use rediss:// (double s) for TLS.

S3

When using IRSA for S3 access, omit auth.existingSecret and annotate the service account instead (see Service accounts).

Temporal

The chart includes a Temporal subchart. Point it at your external PostgreSQL instance for persistence.
The Temporal schema setup job runs automatically and creates the temporal and temporal_visibility databases if they do not exist.

Service accounts

The chart creates a shared tracecat-app service account for most workloads (API, worker, migrations). Optionally create dedicated service accounts for executor, agent-executor, and litellm.

IRSA (EKS)

Annotate service accounts with an IAM role ARN for AWS API access (S3, Secrets Manager, Bedrock).
Dedicated executor service accounts let you scope S3 and secret permissions separately from the main application role.
Cross-account role assumption is supported. Set tracecat.aws.assumeRoleAccountId and tracecat.aws.assumeRolePrincipalArn to assume roles in other AWS accounts from the executor.

Networking

The chart supports Kubernetes Ingress and Istio VirtualService for external traffic routing.
The chart creates a single Ingress resource with path-based routing. Set ingress.split: true to generate separate Ingress resources per service (useful when the API requires different annotations than the UI, such as longer timeouts).
Default path routing:MCP routes (/mcp, /.well-known/oauth-*, /authorize, /token, /register, /consent, /auth/callback) are included automatically when mcp.enabled: true.

Installation

1

Add the OCI registry

Use the credentials provided by the Tracecat team.
2

Create your values file

Combine secrets, external services, networking, and URL configuration from the sections above into a single values.yaml.
3

Install the chart

Replace <chart-version> with the version provided by the Tracecat team (e.g. 0.4.5). The --wait flag blocks until all pods are ready. Initial provisioning takes a few minutes depending on Temporal schema setup.

Access Tracecat

Once deployed, access your instance at:
  • UI: https://<your-domain>
  • API docs: https://<your-domain>/api/docs
  • MCP: https://<your-domain>/mcp

Upgrade the Helm chart

--version selects the chart version. If you set image tags in values.yaml, a chart upgrade keeps using those tags. Otherwise, it uses the new chart’s appVersion and may also update Tracecat.
Do not change or lose your dbEncryptionKey, serviceKey, signingSecret, or userAuthSecret values between upgrades. Losing these secrets makes encrypted credentials unrecoverable and invalidates existing webhook URLs.

Update Tracecat

The chart version and Tracecat version are independent. You can use the chart’s appVersion or set image tags explicitly.

Use the chart appVersion

Each chart version includes an appVersion. When image tags are unset, the chart uses appVersion for both the backend and UI images.
Choose a chart with the required appVersion, then run the chart upgrade command above. This updates the chart and Tracecat together.

Set image tags

To update Tracecat without changing the chart version, keep --version unchanged and set both image tags in values.yaml:
image.tag sets the backend image and the default migrations image. uiImage.tag sets the UI image. Both override the chart’s appVersion; keep them on the same compatible release. Run the chart upgrade command after updating values.yaml. If you set migrations.image.tag separately, it continues to override image.tag for migrations.

Security

Execution sandboxing

The chart enables nsjail by default (tracecat.sandbox.disableNsjail: false). nsjail isolates user-defined Python scripts and custom actions inside the executor.
nsjail requires privileged pods with SYS_ADMIN capability and an Unconfined seccomp profile. The chart sets these automatically on executor and agent-executor containers. See Security for backend choices (ephemeral, direct) and isolation tradeoffs.

Authentication

Set tracecat.auth.types to oidc or saml for production deployments. See OIDC and SAML for configuration details.

Autoscaling

The chart uses KEDA with a Temporal queue-based scaler to auto-scale worker, executor, and agent-executor deployments. Prerequisites:
  • keda.enabled: true (installs the KEDA subchart)
  • metricsserver.enabled: true (or an existing metrics-server in the cluster)
When autoscaling is enabled, the static replicas value is ignored. KEDA polls the Temporal task queue and scales based on queue depth.

Minimum resources

These are the default resource requests and limits from the chart.
The agent executor uses burstable limits (requests 2000m/4096Mi, limits 4000m/16384Mi) to handle variable LLM response sizes. All other services use guaranteed QoS where requests equal limits.

Observability

The chart bundles optional subcharts for Prometheus, Grafana, and Grafana Alloy (k8s-monitoring).
For Grafana Cloud or other external providers, enable only tracecat.temporal.metrics.enabled and configure your own scraping. See values-eks-grafana-cloud.yaml in the chart examples directory.
For production observability with custom dashboards, OpenTelemetry export, and alerting, contact the Tracecat team for enterprise support.

FAQ

Yes. Set tracecat.aws.assumeRoleAccountId and tracecat.aws.assumeRolePrincipalArn in your values. The executor uses STS AssumeRole to access resources in other AWS accounts. Ensure the target account’s trust policy allows the executor’s IRSA role.
Undersized Temporal clusters cause this error. Ensure the Temporal server pods have at least 4 CPU cores and 8 GB of memory.If using self-hosted Temporal with an external PostgreSQL, verify the database can handle the query throughput. Managed services like Amazon Aurora Serverless are recommended for production workloads.
Yes. The chart includes KEDA ScaledObject resources for worker, executor, and agent-executor. Set keda.enabled: true and <component>.autoscaling.enabled: true. Scaling is driven by Temporal task queue depth, not CPU or memory utilization.
Yes. The chart requires PostgreSQL, Redis, and S3-compatible storage but does not require AWS. Use any provider for these services. For secrets management without AWS Secrets Manager, use the existing Kubernetes secret or chart-managed secret template strategies instead of External Secrets Operator.
Set scheduling.architecture to arm64 or amd64. The chart adds a kubernetes.io/arch node selector to all pods. Set it to an empty string to disable architecture pinning.