§08 · Deploy & operate

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.sh custom resource definitions (Agent, Tool). Registering them lets you author agents as Kubernetes objects.
  • Operator: the autonomic-manager Deployment, 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 kubectl context. 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 for autonomic-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:

terminal· bash
exo-install precheck

It verifies (hard requirements marked ✓):

precheck· text
1kubectl on PATH ✓ required
2helm on PATH required only with --helm
3docker, git on PATH advisory
4current kube-context set ✓ required
5cluster reachable ✓ required
6server version informational
7RBAC: can create CRDs / ClusterRoles / ns / deploys advisory