> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xpander.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# EKS clusters

> What an Amazon EKS cluster needs before xpander installs on it: network shape, node prerequisites for the executor fleet, storage, IAM, and where each deployment's guide continues.

xpander installs from a Helm chart into your own Kubernetes cluster. On AWS that cluster is EKS, for the Hybrid deployment (execution in your VPC, control plane in xpander's cloud) and the Air-gapped deployment (everything in your cluster, no connection to xpander).

## Before the install

| Prerequisite                 | What xpander needs                                                                                                                                                                   | Guide                                                                                            |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
| VPC and subnets              | Two Availability Zones; private subnets for EKS and the data stores. Internet and NAT gateways for Hybrid; a sealed VPC with VPC endpoints (ECR, S3 gateway endpoint) for Air-Gapped | [EKS setup](/self-hosted/eks-setup)                                                              |
| Storage                      | EBS CSI driver with Pod Identity and a default StorageClass. The executor fleet needs an XFS StorageClass with `prjquota` (`fleet.storage.createClass: true` creates it)             | [EKS setup: StorageClass](/self-hosted/eks-setup#create-default-storageclass)                    |
| Nodes for the executor fleet | cgroup v2, a namespace that admits privileged pods, sized for turns of 8 GiB and 4 vCPU each                                                                                         | [Sizing and requirements](/self-hosted/sizing)                                                   |
| Minimum footprint            | Hybrid: 3 nodes of 8 vCPU / 32 GiB, about 50 GiB of volumes. Air-Gapped: 5 nodes of 16 vCPU / 64 GiB, 300 to 500 GiB of volumes                                                      | [Deploy](/self-hosted)                                                                           |
| Registry                     | Public images for Hybrid; a mirror in your own registry for Air-Gapped, which the installer can fill                                                                                 | [Air-gapped: mirroring](/self-hosted/airgap#mirroring-and-registries)                            |
| IAM for AWS skills           | EKS Pod Identity or IRSA on the AWS Operator, per-skill roles                                                                                                                        | [AWS Operator](/self-hosted/aws-operator), [IAM best practices](/self-hosted/iam-best-practices) |
| Bedrock without a key        | The Bedrock permissions on the role the pods run as                                                                                                                                  | [AI vendors](/run/integrations/ai-vendors)                                                       |

## Install

The installer asks which edition you are installing and walks through the rest; run it from a terminal with `kubectl` access to the cluster. Hybrid identifies itself with the organization id, environment id and deployment-manager key from the install card in Xpander Chat. Air-Gapped uses the two signed license files instead.

* [Hybrid deployment](/self-hosted/hybrid): one-liner install, external access and DNS, LLM keys, upgrades.
* [Air-gapped deployment](/self-hosted/airgap): mirroring, sealed installs, local LLM inference, data tier, domains and DNS, egress table.

## After the install

```bash theme={"dark"}
kubectl get pods -n xpander
```

Expect one `Running`, `1/1` pod per application service: `agent-controller`, `agent-worker`, `api`, `aws-operator`, `chat`, `code-runner` and `mcp`. Expect also the executor fleet, a StatefulSet whose pods run agent sessions on Claude Code, Codex or OpenCode. In Xpander Chat, **Settings > Locations** shows the cluster with a heartbeat status per component. On Hybrid, one component reaches xpander's cloud: the Agent Controller, the service that mediates every model and skill call. On Air-Gapped, none does.
