Prerequisites & topology
What you're installing, where it runs, and what the cluster needs before you apply anything.
Exo deploys two ways. On managed cloud Exo runs the control plane for you and the only thing you install is the Exo Operator — so the prerequisite is just a cluster to run it. When you self-host, you stand up three things in your own Kubernetes cluster: the CRDs, the Exo Operator, and the platform (the Exo backend plus UI). The rest of this page covers what a self-hosted install needs before you run exo-install.
Three components
- CRDs: the two
autonomic.shcustom resource definitions (Agent,Tool). Registering them lets you author agents as Kubernetes objects. - Operator: the
autonomic-managerDeployment, its RBAC, and a pods/exec admission webhook. It reconciles the CRDs into running pods and optionally connects out to the control plane. - Platform: the Exo backend with the UI embedded in the same binary, plus its Postgres. This is the dashboard your team logs into and the control plane the Exo Operator phones home to.
Cluster requirements
- Kubernetes 1.27+ with cluster-admin (you create CRDs, ClusterRoles, and namespaces).
- A working
kubectlcontext. The installer drives the cluster through your existing kubeconfig, so exec plugins, OIDC, and cloud IAM all work unchanged. - The operator pod is tiny: requests 100m CPU / 128Mi, limits 500m / 512Mi. The platform pod requests 100m / 128Mi, limits 1 CPU / 512Mi.
Database
When self-hosting, the platform needs PostgreSQL 16. Let the installer deploy a bundled in-cluster Postgres (fine for trials), or bring your own managed instance (production) and pass its DSN. The backend runs all migrations, partition setup, and the encryption-keyring bootstrap at boot. No separate migration step to run.
Namespaces
autonomic-system: the operator's namespace (the webhook serving cert is signed forautonomic-manager.autonomic-system.svc). Override it with--operator-namespace.- Platform namespace (self-hosted only): the platform lands here, defaulting to
exo, override with--namespace. On managed cloud the platform runs in Exo's cluster, so there's nothing to create. Either way, Agents, Tools, and other CRs live in whatever namespaces you choose.
Network
- Inbound to the platform: the backend serves plain HTTP on port 9092. Terminate TLS at your ingress.
- Outbound from the Exo Operator: in managed mode the operator opens one outbound connection to the platform. No inbound ports are opened on the operator's cluster.
- Image pulls: the operator launches runtime pods from
adaptivelive/*images. Air-gapped clusters mirror these and point the image references at the mirror. See Air-gapped.
Local tooling
Run the installer's pre-flight check before anything else:
exo-install precheck
It verifies (hard requirements marked ✓):
1kubectl on PATH ✓ required2helm on PATH required only with --helm3docker, git on PATH advisory4current kube-context set ✓ required5cluster reachable ✓ required6server version informational7RBAC: can create CRDs / ClusterRoles / ns / deploys advisory