Cluster Requirements
Set
runtime-api.env.STORAGE_CLASS to your gp3 class.
Node Pools
We recommend using two separate node pools: a general pool for the OpenHands application services and cluster add-ons, and a Sysbox pool for the agent sandboxes. Keeping sandboxes on their own pool isolates the untrusted sandbox workload from your services, and lets the sandbox pool scale independently, since sandboxes are created and torn down far more frequently than the services.- General pool: Use standard EKS nodes on the Amazon Linux 2023 AMI, with on-demand or Spot capacity.
- Sysbox pool: Sandboxes need the Sysbox runtime, which requires an Ubuntu AMI, at least 4 vCPU per node, and on-demand capacity. See Installing Sysbox.
sysbox-runc RuntimeClass. Keep the
OpenHands services and add-ons on the general pool with a node selector.
Sizing the Sandbox Nodes
Per-sandbox CPU, memory, and ephemeral storage are set on the Resource Limits page. Size your Sysbox nodes around the values you choose there. With the defaults (0.5 vCPU, 3 GiB memory, 10 GiB ephemeral), memory is usually the binding constraint, som-family instances (4 GiB per vCPU) pack most
efficiently:
Recompute these counts whenever you change the sandbox size. Also size for two more things:
- Root volume: ephemeral scratch is the per-sandbox ephemeral request × sandboxes per node. At
the default 10 GiB, a full
m6i.4xlargeneeds ~190 GiB, so give Sysbox nodes a large root volume (200 GiB or more), or prefer more, smaller nodes. - Warm capacity: a new sandbox otherwise waits for a node to boot, which takes a few minutes. Keeping a small pool of spare capacity (for example a low-priority placeholder Deployment sized to one sandbox) lets sessions start instantly. Size it to your expected burst.
Object Storage
OpenHands stores conversation and session state in a file store. For production, we recommend using S3:- Create a bucket in the cluster’s region.
- Grant access with either an IAM user access key scoped to the bucket, or IRSA / EKS Pod Identity to avoid a long-lived credential.
- For the access-key approach, store the credentials in a secret:
Database
Use an external Amazon RDS for PostgreSQL instance rather than the bundled database. Place it in the cluster’s VPC, reachable from the nodes on port 5432. See External PostgreSQL for the values.Ingress
Install an ingress controller on the general pool and expose it with an AWS Network Load Balancer, provisioned directly from Service annotations (no AWS Load Balancer Controller required). Both Traefik and NGINX are supported:- Traefik (recommended): set
ingress.class: traefikin your OpenHands values. Its defaultTLSStorelets one wildcard certificate serve every host. - NGINX: set
ingress.class: nginxand usenginx.ingress.kubernetes.io/*annotations for per-ingress tuning.
Next Steps
Installing Sysbox
Install the sandbox runtime on your Sysbox pool.
DNS and TLS
Automate records and certificates with external-dns and cert-manager.
Install with Helm
Deploy OpenHands once the cluster is ready.
Resource Limits
Size memory, CPU, and replicas for production.

