Skip to main content

Infrastructure Requirements

What to provision before you install the Align Helm chart. Nothing here is tied to one cloud.

Quick Checklist​

  • Kubernetes cluster (1.25+)
  • PostgreSQL database (15+) with pgvector extension
  • Redis-compatible service (6+), required above one gateway pod
  • Ingress controller with TLS
  • DNS records for app and API domains
  • Container registry access (pull Align images)
  • (Optional) GPU node for local LLM inference

Kubernetes Cluster​

The chart targets a standard Kubernetes cluster, version 1.25 or newer. That floor is the one we state, not one we have tested.

PlatformWhat we can say
AWS EKSAlign cloud runs on it
k3sThe one-VM pilot installs it.
GKE, AKS, on-premisesNo recorded install

Compute Requirements​

We have no measured sizing. The only numbers we have are the pilot installer's preflight floors for one machine:

CPUMemoryFree disk
47.5 GB40 GB

These are floors, not a recommendation. Treat them as the smallest machine worth trying. A timed install on a clean VM has not been run.

Pod Resource Summary​

ServiceRequests (CPU/Mem)Limits (CPU/Mem)Replicas
Gateway100m / 256Mi500m / 512Mi1
Brain200m / 512Mi1000m / 1Gi2
UI50m / 128Mi200m / 256Mi2
Connectors (each)50m / 128Mi200m / 256Mi1
Migrations (job)50m / 64Mi500m / 256Mi1 (runs once)

PostgreSQL Database​

Required: PostgreSQL 15+ with the pgvector extension.

For a trial, the chart can run Postgres 16 for you (postgresql.enabled). It is one pod with no backup and no failover. See the install guide.

pgvector is used for semantic search across decisions (embedding similarity). Most managed PostgreSQL services include pgvector:

ProviderServicepgvector Support
AWSRDS PostgreSQL, Aurora PostgreSQLBuilt-in (enable extension)
GCPCloud SQL for PostgreSQLBuilt-in
AzureAzure Database for PostgreSQL Flexible ServerBuilt-in
Self-hostedPostgreSQL + pgvectorInstall via apt/yum or build from source

Sizing​

These are starting points, not measurements.

TierInstance SizeRAMStorageMax ConnectionsNotes
Minimal1 vCPU / 2 GB2 GB20 GB~100Single-replica gateway
Standard2 vCPU / 4 GB4 GB50 GB~150Concurrent Discover scans with 3-5 connectors
Production4 vCPU / 8 GB8 GB100 GB+~300High concurrency, multiple tenants

Important: Discover scans use parallel workers that consume database connections. See Connection Pooling for tuning guidance. For standard deployments, PgBouncer (included as an optional Helm sidecar) handles connection multiplexing at no extra cost.

Setup​

  1. Create a database named align (or your preferred name)
  2. Enable the pgvector extension: CREATE EXTENSION IF NOT EXISTS vector;
  3. Create a Kubernetes secret with connection details:
kubectl create secret generic align-database \
--namespace align \
--from-literal=url="postgresql://user:password@host:5432/align" \
--from-literal=host="your-db-host" \
--from-literal=port="5432" \
--from-literal=username="align" \
--from-literal=password="your-password"

Align runs migrations automatically on install/upgrade.

Redis​

Required above one gateway pod. The chart refuses to render without it, unless you set gateway.allowUnsharedSessionStore=true and accept per-pod session revocation. With one pod it is optional, but job state does not survive a restart. Any Redis 6+ compatible service works.

Redis provides:

  • Job state - Track progress of Discover scans and bulk operations
  • Pub/Sub - Real-time progress streaming (SSE) across gateway pods
ProviderServiceNotes
AWSElastiCache RedisSingle-node is fine pre-production
GCPMemorystore for RedisBasic tier sufficient
AzureAzure Cache for RedisBasic C0 for small teams
Self-hostedRedis, Dragonfly, KeyDBAny Redis-compatible server

Sizing​

TierSizeMemoryNotes
MinimalSmallest available0.5 GBSufficient for job state + pub/sub
StandardSmall1-3 GBHandles concurrent scans across connectors
ProductionMedium + replica3+ GBMulti-AZ for high availability

Redis usage is lightweight - Align stores job state (small JSON blobs) and uses pub/sub for SSE streaming. A single small node handles most workloads.

Configuration​

Provide the Redis URL via secret or direct value:

gateway:
redis:
url: "redis://your-redis:6379"
# Or via Kubernetes secret:
secretName: "align-redis"
secretKey: "url"

Message Queue​

Discover scans and bulk operations run on a queue. The gateway picks the backend itself: SQS if you set the queue URLs, otherwise Redis if you configured one. With neither, the gateway in production refuses to start, because the in-memory queue loses work on a pod restart.

BackendSurvives a pod restartConfiguration
RedisYesgateway.redis.*. Nothing else
AWS SQSYesgateway.sqs.* queue URLs and AWS access
In-memoryNogateway.queue.provider: memory, as a deliberate choice

See Requirements for the selection rules and delivery guarantees.

Ingress and TLS​

Align needs two public endpoints:

DomainServicePurpose
app.yourdomain.comUIWeb application
api.yourdomain.comGatewayAPI server, OAuth callbacks, webhooks
mcp.yourdomain.com (optional)MCP ConnectorAI assistant integration

Ingress Controller​

Any Kubernetes ingress controller works:

ControllerNotes
nginx-ingressMost common, well-documented
TraefikBuilt into k3s, lightweight
AWS ALBNative AWS integration
GCP IngressNative GCP integration
Azure Application GatewayNative Azure integration
Istio GatewayService mesh environments

TLS Certificates​

Align requires TLS for all endpoints (OAuth callbacks mandate HTTPS). Options:

  • cert-manager (recommended) - Automatic Let's Encrypt certificates
  • Cloud-managed - ACM (AWS), Google-managed certs, Azure App Gateway
  • Manual - Bring your own certificates as Kubernetes TLS secrets

DNS​

Create DNS records pointing to your ingress controller's external IP or load balancer:

RecordTypeTarget
app.yourdomain.comA/CNAMEIngress LB
api.yourdomain.comA/CNAMEIngress LB
mcp.yourdomain.com (optional)A/CNAMEIngress LB

Container Registry Access​

Align images live in a private AWS ECR registry. We grant pull access to your 12-digit AWS account ID. If you have no AWS account, ask for the offline bundle. These pages write the registry host as $ALIGN_REGISTRY.

Options:

  1. Pull directly from $ALIGN_REGISTRY (simplest)
  2. Mirror to your registry (recommended for production and restricted networks)

See Installation - Mirror to Your Registry for mirroring instructions.

GPU Node (Optional)​

For local LLM inference instead of cloud API calls. This removes per-token costs for the language model.

When to Add GPU​

  • You want the language model to run in your cluster. Search still calls OpenAI for embeddings. See Embeddings
  • You're running high-volume Discover scans (GPU pays for itself vs API costs)
  • You want flat-rate inference costs instead of per-token billing

Hardware Requirements​

GPUVRAMFits ModelsApprox. CostNotes
NVIDIA T416 GBLlama 8B, Mistral 7B~$380/mo (cloud)Best value, sufficient for most deployments
NVIDIA A10G24 GBLlama 13B, Mixtral 8x7B~$660/mo (cloud)Higher throughput
NVIDIA L424 GBSame as A10G~$500/mo (cloud)Newer, more efficient
NVIDIA A10040-80 GBLlama 70B~$7,000/mo (cloud)Large models only

A single NVIDIA T4 running Llama 3.1 8B handles most workloads. You can start without GPU and add it later with no downtime.

Node Setup​

GPU nodes need:

  1. NVIDIA drivers installed (GPU-optimized OS images simplify this)
  2. NVIDIA container toolkit (for GPU access from containers)
  3. Node label: node-type: gpu
  4. Taint: nvidia.com/gpu=true:NoSchedule (prevents non-GPU pods from scheduling)

Cloud providers offer GPU-ready node images:

  • AWS: al2023-nvidia AMI family
  • GCP: Container-Optimized OS with GPU, or Ubuntu with NVIDIA drivers
  • Azure: NC-series VMs with NVIDIA drivers pre-installed
  • On-premises: Install NVIDIA drivers + container toolkit manually

See LLM Configuration - GPU Inference for Helm configuration after provisioning GPU nodes.

Network Requirements​

Outbound Access​

Align services need outbound HTTPS access to:

DestinationPurposeRequired?
Connector APIs (Slack, GitHub, Jira, Teams, etc.)Fetch data from connected platformsYes (per enabled connector)
Cloud LLM APIs (OpenAI, Anthropic)AI inference (if using cloud providers)Only if using cloud LLM
$ALIGN_REGISTRY (issued at onboarding)Pull container images (if not mirrored)Only if pulling directly
HuggingFace HubDownload model weights (GPU inference)Only on first GPU pod start
Docker HubBundled Postgres (pgvector/pgvector:pg16), bundled Redis (redis:7-alpine), telemetry jobs (postgres:15-alpine)Only if you use those

Mirroring images and pre-downloading model weights removes those pulls. Search still makes one outbound embeddings call. See Network Configuration for proxy and firewall details.

Internal Connectivity​

All Align services communicate within the cluster:

UI (3000) ─────► Gateway (8080) ─────► Brain (8090)
│ │
├── Connectors (808x) ├── vLLM (8001, optional)
├── PostgreSQL (5432)
└── Redis (6379)

No special network policies are required by default. Enable networkPolicies.enabled: true in Helm values for restricted environments.

Example: Minimal Infrastructure​

The smallest setup we describe is the one-VM pilot: k3s on one VM, with bundled Postgres 16 and Redis (one pod each; the pilot installer adds a nightly dump to a path on the VM, and no failover), Traefik for TLS, and a cloud LLM API. We have not measured what it needs beyond the preflight floors above.

Example: Production Infrastructure​

A production-grade deployment for an enterprise team:

ComponentChoiceApproximate Cost
KubernetesManaged (EKS/GKE/AKS), 3 nodes$200-400/mo
PostgreSQLManaged, 4 GB RAM, multi-AZ$100-200/mo
RedisManaged, small instance$30-60/mo
GPU NodeNVIDIA T4 (optional)$380/mo
TLScert-manager + Let's EncryptFree
LLMLocal GPU (scans) + Cloud API (synthesis)~$50/mo API

Total: ~$380-700/mo without GPU, ~$760-1080/mo with GPU

Next Steps​

Once your infrastructure is provisioned:

  1. Install Align - Helm chart deployment
  2. Configure secrets - Database credentials, API keys
  3. Set up OAuth apps - Connector authentication
  4. Configure LLM - AI provider setup