Skip to main content
Astro Private Cloud (APC) runs on Kubernetes and requires careful resource planning for both control plane and data plane components. This guide covers resource configuration for all platform components.

Architecture overview

APC uses a control plane/data plane architecture:
  • Control Plane: Houston API, Astro UI, Registry, Config Syncer.
  • Data Plane: Commander, Registry, Airflow deployments.
  • Unified Mode: All components in a single cluster.

Control plane components

Houston API

Houston is the GraphQL API that manages platform operations.

Scaling recommendations

Houston worker

Background job processor for asynchronous operations. The worker uses the same houston.resources as the Houston API.

Astro UI

Web interface for platform management.

Data plane components

Commander

Manages Airflow Deployment provisioning and Kubernetes operations.

Registry

Docker image registry for Airflow Deployments.

Storage backend options

  • Local PersistentVolume (default)
  • Google Cloud Storage (GCS)
  • Azure Blob Storage
  • Amazon S3

Ingress and networking

NGINX ingress controller

Database

PostgreSQL

Houston metadata database.

Production configuration

Resource sizing examples

Development environment

Production environment

High availability configuration

Monitor resource usage

Troubleshooting

Out of memory (OOMKilled)

Symptom: Pods restart with OOMKilled status. Solution: Increase memory limits:

CPU throttling

Symptom: Slow response times, high latency. Solution: Increase CPU limits or add replicas:

Pending Pods

Symptom: Pods stuck in Pending state. Solution:
  1. Check node resources: kubectl describe nodes.
  2. Reduce resource requests or add nodes.
  3. Check for taints/tolerations mismatches.

Best practices

  • Set both requests and limits for predictable scheduling.
  • Use Pod Disruption Budgets for high availability.
  • Monitor resource usage before scaling.
  • Size based on workload, not just component count.
  • Plan for growth with 20-30% headroom.
  • Use separate node pools for platform components.