The Tracecat Helm chart is distributed as an OCI artifact hosted in AWS ECR.
Contact the Tracecat team at founders@tracecat.com or via Discord for access to the registry for evaluations and internal use.
Prerequisites
- Kubernetes 1.27+
- Helm 3.12+ (with OCI support)
kubectlconfigured 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 Secrets Operator (recommended)
- Existing Kubernetes secret
- Chart-managed secret templates
The chart creates Expected secret formats in AWS Secrets Manager:
The chart refreshes secrets every
ExternalSecret resources that sync from AWS Secrets Manager into Kubernetes secrets via a ClusterSecretStore.
You need External Secrets Operator installed and a ClusterSecretStore configured with IRSA.| Secret | Format |
|---|---|
| Core | JSON: { "dbEncryptionKey": "...", "serviceKey": "...", "signingSecret": "...", "userAuthSecret": "..." } |
| PostgreSQL | JSON: { "username": "...", "password": "..." } |
| Redis | Raw URL string, e.g. rediss://:password@host:6379 |
| Temporal | Raw API key string |
1m by default. Override with externalSecrets.refreshInterval.External services
The Helm chart does not bundle databases. You must provide connection details for PostgreSQL, Redis, S3, and Temporal.PostgreSQL
Redis
url key should be a full Redis connection string, e.g. rediss://:password@host:6379. Use rediss:// (double s) for TLS.
S3
auth.existingSecret and annotate the service account instead (see Service accounts).
Temporal
- Self-hosted (bundled)
- Temporal Cloud
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 sharedtracecat-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).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.- Ingress
- Istio VirtualService
The chart creates a single Ingress resource with path-based routing. Set Default path routing:
MCP routes (
ingress.split: true to generate separate Ingress resources per service (useful when the API requires different annotations than the UI, such as longer timeouts).| Path | Service | Port |
|---|---|---|
/api | api | 8000 |
/mcp | mcp | 8099 |
/ | ui | 3000 |
/mcp, /.well-known/oauth-*, /authorize, /token, /register, /consent, /auth/callback) are included automatically when mcp.enabled: true.Installation
Create your values file
Combine secrets, external services, networking, and URL configuration from the sections above into a single
values.yaml.Access Tracecat
Once deployed, access your instance at:- UI:
https://<your-domain> - API docs:
https://<your-domain>/api/docs - MCP:
https://<your-domain>/mcp
Upgrading
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.
SYS_ADMIN capability and an Unconfined seccomp profile. The chart sets these automatically on executor and agent-executor containers.
See Security for backend choices (pool, ephemeral, direct) and isolation tradeoffs.
Authentication
Settracecat.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)
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.| Component | CPU request | Memory request | CPU limit | Memory limit | Default replicas |
|---|---|---|---|---|---|
| UI | 500m | 512Mi | 500m | 1024Mi | 1 |
| API | 2000m | 4096Mi | 2000m | 4096Mi | 2 |
| Worker | 2000m | 2048Mi | 2000m | 2048Mi | 4 |
| Executor | 4000m | 8192Mi | 4000m | 8192Mi | 4 |
| Agent executor | 2000m | 4096Mi | 4000m | 16384Mi | 2 |
| Agent worker | 2000m | 2048Mi | 2000m | 2048Mi | 2 |
| LiteLLM | 4000m | 8192Mi | 4000m | 8192Mi | 2 |
| MCP | 1000m | 1024Mi | 1000m | 1024Mi | 2 |
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).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
Can executors assume cross-account AWS roles?
Can executors assume cross-account AWS roles?
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.I'm seeing 'No hosts available' errors from Temporal
I'm seeing 'No hosts available' errors from Temporal
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.
Does the chart support autoscaling?
Does the chart support autoscaling?
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.Can I use non-AWS infrastructure?
Can I use non-AWS infrastructure?
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.
How do I pin workloads to a specific CPU architecture?
How do I pin workloads to a specific CPU architecture?
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.