Requirements
For Kubernetes sizing, the chart’s defaults request 2 CPUs and 4 GiB of memory for each data-plane pod (limits: 4 CPUs, 4 GiB) and autoscale from 2 to 6 data-plane replicas. The control plane runs 2 replicas with 250m CPU and 512 MiB of memory each (limits: 500m, 1 GiB). Adjust these values for your workload.
Get the image
The image is published toghcr.io/oxy-hq/airhouse. If Oxygen gave you registry credentials, log in first:
Option 1: Docker Compose
A singleairhouse server container serves both the Postgres wire protocol and the Admin API.
The Quickstart has a complete docker-compose.yml with Postgres, MinIO, and Airhouse. To adapt it for your environment, set these environment variables on the Airhouse container:
See the configuration reference for every setting.
Option 2: Kubernetes with Helm
The chart is published as an OCI artifact. If Oxygen gave you registry credentials, log Helm in first:Try it on any cluster (demo mode)
Demo mode runs one all-in-one Airhouse pod with bundled Postgres and MinIO. It isn’t meant for production. Pull the chart to get itsvalues-demo.yaml overlay, then install:
kubectl port-forward commands for the wire protocol and the Admin API.
Production install
For a complete worked example on AWS (EKS, RDS, S3, Pod Identity, External Secrets, Argo CD, alerts, and sizing), see Example: production setup on AWS. In production mode (mode: split, the default), the chart runs:
- A control-plane Deployment that serves the Admin API.
- A data-plane Deployment that serves the Postgres wire protocol, with a HorizontalPodAutoscaler.
- HAProxy in front of the data plane, balancing client connections. Set
haproxy.service.type=LoadBalancerto expose it outside the cluster.
values.yaml
s3.endpoint. If it’s empty, the server falls back to a local MinIO default (localhost:9000) and writes fail. For MinIO or another S3-compatible store, use its URL (for example http://minio.storage:9000), pathStyle: true, and useSsl to match.
Install it:
sslmode=require by default (controlPlaneDatabase.sslMode, catalogDatabase.sslMode, and catalogDatabase.tenantSslMode). Run helm show values oci://ghcr.io/oxy-hq/helm-charts/airhouse --version <chart-version> to see every option with comments.
The chart’s built-in default image tag can lag behind the latest release. Always set
image.tag to the version Oxygen recommends.imagePullSecrets, create the Secret from the registry credentials you were given:
After installing
Check health
/readyz returns 503 while the server is starting up or draining. Prometheus metrics are at /metrics.
On Kubernetes, the Admin API is served by the control-plane Service, and the wire protocol by the HAProxy Service (or the all-in-one Service in demo mode). The helm install notes print the kubectl port-forward commands for both.
Create your first database and user
No users exist after a fresh install. Use the Admin API with your admin token to create a database and anadmin user:
Upgrading
- Get the target version from Oxygen.
- Update the image tag: change
image:in your Compose file, orimage.tag(and the chart--version, if a new chart is recommended) in Helm. - Apply it with
docker compose up -dorhelm upgrade airhouse oci://ghcr.io/oxy-hq/helm-charts/airhouse --version <chart-version> -f values.yaml.
drain_timeout_secs (default 30 seconds) for running queries to finish.
Uninstalling and your data
Removing Airhouse doesn’t delete your data. Your Parquet files stay in your bucket and your catalogs stay in Postgres until you remove them.- Docker Compose:
docker compose downstops the containers.docker compose down -valso deletes the local Postgres and MinIO volumes if you use the bundled ones. - Helm:
helm uninstall airhouseremoves the Airhouse workloads. External Postgres and object storage are untouched. - A single database: deleting it with the Admin API drops its catalog, users, and service accounts, but leaves its Parquet files in object storage. See Databases and users.