Skip to main content
Multi-tenant EKS? For shared clusters reconciling RunlayerInstance + MCPServer CRs, use the Runlayer Operator chart instead of anysource-chart.
For AWS production deployments, use the Terraform EKS module to provision infrastructure, then deploy the application with Helm. This provides better separation of concerns and security.
New to EKS deployment? See the comprehensive EKS + Terraform deployment guide for detailed instructions on provisioning EKS infrastructure.

Quick Start: EKS + Helm

Step 1: Provision EKS Infrastructure
Step 2: Deploy Application with Helm
This approach provides:
  • Managed Infrastructure: RDS, ElastiCache, VPC, IAM roles
  • Security: IRSA, ALB with ACM certificates, private subnets
  • Scalability: Auto-scaling groups, load balancing
  • Monitoring: CloudWatch integration
For detailed EKS provisioning, see the EKS + Terraform deployment guide or the Terraform EKS module README.

AWS IAM Role Configuration

For AWS production deployments, you’ll need to create an IAM role with the following configuration:

Required Permissions

The role must have the following Bedrock permissions:
It also needs AWS Marketplace permissions so the first invocation of a Bedrock model can auto-subscribe the account to the model’s Marketplace offer (without these, model calls fail with a 403 access-denied error):
One-time AWS step. Anthropic requires a use case details form before its models can be invoked in an AWS account, and Runlayer Assistant always routes through Bedrock — so this applies even when BEDROCK_ENABLED is false.Submit it in the account the Bedrock calls come from (your deployment’s account, or the account behind a Bedrock AI provider role you configure): Bedrock console → Model catalog → any Anthropic model → Submit use case details. AWS accepts it once per account, or once at your AWS Organization’s management account — member accounts inherit that.Deploying outside the US? Also set RUNLAYER_ASSISTANT_BEDROCK_MODEL to your geography’s inference profile, for example au.anthropic.claude-opus-4-6-v1 in ap-southeast-2.If skipped, this leaves Bedrock-backed agents failing with Model use case details have not been submitted for this account — see troubleshooting for the CLI checks and Region caveats.

Trust Policy

The role must have this trust policy to allow EKS service account access:
Replace:
  • <aws_account_id> with your AWS account ID
  • <oidc_id> with your EKS cluster’s OIDC provider ID
  • <anysource_namespace> with your deployment namespace

Configure in Values

Set the role ARN in your values file:

Overview

Deploy Runlayer on Kubernetes clusters using Helm charts. This guide covers multiple deployment patterns:
  1. AWS EKS + Terraform (Recommended): Provision infrastructure with Terraform, deploy application with Helm
  2. Development: Use embedded databases for local testing
  3. Production: External databases with high availability
Helm Chart Location: infra/aws-helm/anysource-chart/

AWS Production Architecture

The recommended AWS production deployment separates infrastructure provisioning from application deployment. The Terraform EKS module supports three deployment modes:
  1. Full Stack: Create new VPC + new EKS cluster + application infrastructure
  2. Existing VPC: Use existing VPC + create new EKS cluster + application infrastructure
  3. Existing EKS: Use existing VPC + existing EKS cluster + application infrastructure only
For AWS production, first provision infrastructure with EKS Terraform module, then deploy the application with this Helm chart. This separation provides better security, scalability, and operational control.

Quick Start

Step 1: Navigate to the Helm chart

Configuration Options

Prerequisites

1

Kubernetes Cluster

  • Kubernetes 1.19+
  • Sufficient resources (4+ CPU cores, 8+ GB RAM)
  • Storage class for persistent volumes
  • Load balancer support (for ingress)
2

Required Tools

3

AWS Production Requirements

  • EKS cluster with AWS Load Balancer Controller
  • External RDS PostgreSQL and ElastiCache Redis
  • AWS ACM certificate
  • IAM role with Bedrock permissions and EKS OIDC trust policy
4

Ingress Controller (Required)

5

Cert-Manager (Optional)

Deployment

1. Add Required Repositories

2. Configure Values

Copy and customize the example values file:

3. Deploy Runlayer

Deploy directly from the chart source:
Best for testing chart changes in non-production environments.
Deployment takes 5-10 minutes. SSL certificate provisioning may add 2-5 minutes.

4. Verify

Configuration

Copy values.example.yaml to create your environment-specific values file:

Required Configuration

Set these values in your values file:

Database Configuration

Embedded PostgreSQL (Development):
External RDS (Production):
Set readerHost to your RDS reader endpoint to offload read-heavy queries (audit logs, analytics) to a read replica. When omitted, all traffic goes to the primary host.

Existing Backend Secret

By default the chart creates a Kubernetes Secret from the values in backend.secrets. To reference a pre-existing Secret instead (useful when secrets are managed by an external operator or Vault):
The Secret must contain all keys the backend expects (SECRET_KEY, MASTER_SALT, AUTH_API_KEY, and optionally SENTRY_DSN). When existingSecret is set, backend.secrets values are ignored.

Audit Log Spool

The backend’s local audit-log spool is enabled by default (backend.auditSpool.enabled: true). Audit records are appended to a spool on the pod’s local disk and delivered asynchronously by an in-process tailer, so requests through the MCP proxy do not wait on audit delivery. Records are typically delivered within seconds, and delivery is at-least-once with deduplication. If the spool cannot keep up or its disk budget fills, individual records fall back to inline delivery on the request path, so nothing is lost to backpressure. Two things to verify:
  • Node-disk encryption. The spool briefly holds pre-redaction audit payloads at rest, in an emptyDir volume on the node’s disk. Encrypted worker-node volumes are a hard requirement — the same guarantee Fargate’s encrypted ephemeral storage provides automatically on ECS deployments. Use encrypted EBS on EKS (managed node groups with encrypted AMIs/volumes, or account-level EBS encryption by default). The chart cannot verify node-disk encryption at render time, so this precondition is documented rather than enforced.
  • backend.terminationGracePeriodSeconds feeds the shutdown drain window. When a backend pod stops, it drains the remaining spool for terminationGracePeriodSeconds - 30s; records not delivered before that window expires are lost with the pod. The chart refuses to render with the spool enabled and a grace period of 30 seconds or less.
After an outage of a delivery target (database or Kinesis), expect elevated write load while the accumulated backlog drains. To revert to inline audit delivery, set backend.auditSpool.enabled: false and redeploy. New pods write audit logs inline again, and each old pod drains its residual spool within its shutdown drain window as it stops; backlog beyond that window is discarded. No data migration is needed in either direction.

Custom Trusted CA Bundle

If outbound HTTPS traffic passes through an enterprise proxy that terminates TLS with a private CA, mount the CA certificate so the backend trusts the proxy:
Alternatively, reference an existing ConfigMap:
The chart appends the PEM to the container’s system CA bundle and configures Python/curl clients to use the merged file. The CA is injected into backend, worker, and cron job pods.

Certificate Management

AWS ACM (Recommended for AWS):
Let’s Encrypt (Non-AWS Deployment):

Architecture

Commands

Install/Upgrade

Deploy directly from the chart directory:
Use this when developing or testing chart changes locally.

Uninstall

Debug

Deployment Telemetry

The Helm chart automatically reports deployment status to Sentry via Helm hooks for observability and debugging.

How It Works

The chart includes Helm hook Jobs that run automatically after each deployment:
  • post-upgrade hook: Sends success event after successful deployment
  • post-rollback hook: Sends failure event if deployment fails (triggered by --atomic flag)
Telemetry is enabled by default and gracefully degrades if SENTRY_DSN is not configured.

Key Features

  • Automatic: No wrapper scripts needed - hooks run on every helm upgrade
  • Secure: SENTRY_DSN only exposed to short-lived hook Jobs, not long-running pods
  • Reliable: Exactly one event per deployment outcome (no duplicates on pod restarts)
  • Non-blocking: Telemetry failures don’t impact deployment success

Configuration

Telemetry settings are read from your values file:

What Gets Reported

Each deployment event includes:
  • Deployment status (success/failure)
  • Customer ID (from global.domain)
  • Infrastructure version (from global.deployment.infraVersion)
  • Environment (from global.environment)
  • Deployment duration and timestamp
  • Operator and hostname metadata

Disabling Telemetry

To disable telemetry hooks, set in your values file:

Advanced: Pre-Deployment Diff Telemetry

For pre-deployment diff capture (optional), use the wrapper script:
This wrapper sends an additional event with Helm diff output before deployment.
Recommended: Always use --atomic --wait flags with helm upgrade to ensure:
  • Deployments roll back automatically on failure
  • The post-rollback hook captures failure telemetry
  • Kubernetes waits for pods to be ready before marking success

Troubleshooting

Check Status

View Logs

Check Events

Support

For issues and questions, contact the Runlayer team at team@runlayer.com

Next Steps

AWS EKS Provisioning

Use our Terraform EKS module to provision production-grade infrastructure: EKS clusters, RDS, ElastiCache, VPC, IAM roles, and monitoring. Then deploy applications with this Helm chart.