Skip to main content
This page builds the AWS infrastructure for an In-VPC deployment and installs the Kubernetes platform components that the e6data workspace runs on. Run these steps with the AWS CLI, kubectl, and Helm.

Infrastructure requirements

Review these requirements before you begin. They apply whether you create a new VPC (Part 1, Step 1) or reuse an existing one.

VPC options

You can either create a new VPC or use an existing one:

VPC and subnet CIDR ranges

Each e6data engine pod consumes one IP address. For large workloads with 100+ concurrent pods, make sure private subnets have enough IP space.

Availability zones

e6data spreads workloads across AZs for high availability. Tag subnets so EKS, the load balancer controller, and Karpenter can discover them:

Service quotas

Verify these quotas before deploying. Request increases early - they can take 24–48 hours.

Instance types

The e6data engine is optimized for AWS Graviton (arm64) instances for better price-performance. Confirm your Region has capacity for the r6g/r7g families.

VPC CNI configuration

The Amazon VPC CNI plugin manages pod networking: For clusters with 100+ pods, enable prefix delegation to avoid IP exhaustion. It assigns /28 prefixes (16 IPs) instead of individual IPs, allowing up to 110 pods per node on most instance types:

Existing VPC checklist

If you reuse an existing VPC, verify:
  • DNS hostnames enabled (enableDnsHostnames: true).
  • DNS resolution enabled (enableDnsSupport: true).
  • Private subnets route to a NAT Gateway for internet access.
  • Private subnets tagged kubernetes.io/role/internal-elb = 1.
  • Public subnets tagged kubernetes.io/role/elb = 1.
  • Private subnets tagged karpenter.sh/discovery = <cluster-name>-eks.
  • Cluster security group tagged karpenter.sh/discovery = <cluster-name>-eks (after EKS creation).
  • Sufficient IP space in private subnets (minimum /22 per subnet).

Part 1 - AWS infrastructure

Step 1: Create the VPC

Step 2: Create IAM roles

EKS cluster role:
EKS node role:
Karpenter role:
ALB Controller role:
EBS CSI driver role: The EBS CSI driver addon uses EKS Pod Identity for its IAM permissions:

Step 3: Create the EKS cluster

Step 4: Create the OIDC provider and Pod Identity add-ons

Step 5: Create the system node group

Step 6: Create the S3 metadata bucket

Do not enable S3 Object Lock on this bucket - it can break metadata operations.

Step 7: Create workspace IAM roles

Create the engine, console, and app roles. All three trust pods.eks.amazonaws.com:

Step 8: Create Pod Identity associations

Step 9: Create the Karpenter SQS queue

Part 2 - Kubernetes platform components

e6data uses the helm template | kubectl apply --server-side pattern instead of helm install to avoid Helm’s 1 MB release Secret limit and ensure clean field-manager handling during upgrades.

Step 1: Install Karpenter CRDs

Step 2: Install the Karpenter controller

Step 3: Install the AWS Load Balancer Controller

Step 4: Create the e6-operator NodePool

Step 5: Install cert-manager

Step 6: Install the e6-operator CRDs

e6data provides the CRD files. Apply them with server-side apply:
All CRDs from the provided archive are installed - expect 20+ resources with the e6data.io suffix, including:

Step 7: Create the gp3 StorageClass

Step 8: Install the e6-operator controller

e6data provides the operator Helm chart. Install it with helm template | kubectl apply:

Next

Continue to Deploy workspace and e6data.
Last modified on September 29, 2026