Cluster Requirements
Google CLI authentication alone does not establish deployment permissions.
Confirm the selected project, billing and Kubernetes access before provisioning.
Use a dedicated evaluation cluster, explicit project and zone or region, and an
isolated kubeconfig. Existing networks, private cluster access and workload
identities need their own access checks.
Node Pools
Use separate pools for application services and sandbox workloads:- General pool: runs OpenHands services and cluster add-ons. Keep application workloads here through node affinity or selectors.
- Sysbox pool: an Ubuntu containerd node pool for agent sandboxes. Configure
sysbox-install=yesas a persistent node-pool label so new nodes receive the installer.
e2-standard-4 platform
nodes and one e2-standard-4 sandbox node. Size the pools using the
Sizing Guide and
Resource Limits, including node overhead,
image storage and warm sandbox capacity. Verify new nodes can start a sandbox
before relying on autoscaling or node replacement.
Set Up the Sandbox Runtime
- Follow Installing Sysbox to install Sysbox on your Ubuntu sandbox pool.
- Verify the installer and RuntimeClass, then start a real pod using
runtimeClassName: sysbox-runc. Installer readiness alone does not establish that sandbox workloads can start. - After installing OpenHands, start a conversation and ask it to run
pwd. Confirm it returns the workspace directory and the pod runs on the sandbox pool.
1.35.8-gke.1225000, Ubuntu 24.04.4, kernel
6.8.0-1061-gke and containerd 2.2.7, with Sysbox installer v0.7.1-0.
A real conversation sandbox ran successfully without a containerd registration repair.
Check compatibility again before changing node images or Kubernetes versions.
Persistent Storage
Inspect the Persistent Disk CSI StorageClass:pd.csi.storage.gke.io, WaitForFirstConsumer,
ReadWriteOnce and volume expansion. Configure stateful components and workspace
storage explicitly:
Object Storage
Conversation/session storage is separate from workspace PVCs. Helm chart0.74.0
supports S3-compatible and GCS filestore configuration. Select a supported object
store and configure its access before installing.
filestore.type: gcs is the chart default. GCS uses the application’s ambient
Google identity through Application Default Credentials; the chart’s filestore
credential Secret settings apply to S3, not GCS. Configure Workload Identity Federation for GKE
for the application and grant access to the selected bucket. The
Vertex credential configured on the LLM gateway is a separate configuration.
The evaluation set filestore.type: s3 and used the chart’s optional RustFS
store on Persistent Disk CSI, which required a credential Secret and a
separate Job to create the conversation bucket. Select an object store that meets
your durability and availability requirements, and verify backup and restore for
that configuration.
Database
Use the External PostgreSQL guide for managed database requirements and Helm values. If choosing Cloud SQL for PostgreSQL, verify compatibility, TLS and network access against those requirements before deployment. The tested configuration used bundled PostgreSQL.Ingress
Run an ingress controller on the general pool. Traefik was validated with a Google Cloud public LoadBalancer:LLM Configuration
Configure your provider through the bundled gateway in the shared Helm installation values. For Vertex AI, provider credentials belong to the LiteLLM gateway; users select the configured model in OpenHands. The validated configuration and model checks are recorded in the companion Google gateway guide.Validate the Installation
- Follow the shared Helm guide for registry authentication, namespaces, Secrets and complete installation values.
- Verify trusted application HTTPS and sign in through your identity provider. Canvas should load without an additional backend URL or API-key prompt; use the Canvas values in the Helm guide if your chart requires them.
- Start a new conversation, ask the agent to run
pwd, write a workspace marker and read it back. Confirm sandboxREADY, successful tool results and a completed reply. - Verify unauthenticated Enterprise API requests are rejected. Loading the static frontend does not grant access to backend conversations or credentials.
1.49.6-python image. Ready application pods or a short model completion alone
are not sufficient first-use validation.
Validation Scope
Validated with Helm chart
0.74.0, OpenHands 1.67.0 and agent-server
1.49.6-python: GitHub login, trusted HTTPS, normal Canvas loading, a Sysbox
sandbox, workspace read/write, Vertex gateway inference and a completed tool-using
conversation. The tested configuration used GKE Standard, bundled PostgreSQL,
RustFS and manually issued wildcard TLS.Autopilot, Cloud SQL, GCS, storage reattachment/expansion, cross-zone recovery,
autoscaling, node replacement, backup/restore and automatic certificate renewal
were not covered by these checks. The Google AI Studio API-key route was not tested.Next Steps
Installing Sysbox
Configure and verify the sandbox runtime.
DNS and TLS
Configure hostnames and trusted certificates.
Install with Helm
Deploy the application and validate a conversation.
External PostgreSQL
Configure an external database.

