☁️ Deploying AetherLake on Google Cloud Platform (GCP)
This guide covers deploying AetherLake in production on Google Cloud Platform (GCP) using Google Kubernetes Engine (GKE), Google Cloud Storage (GCS), Workload Identity Federation, and Cloud SQL for PostgreSQL.
🏛️ GCP Architecture Overview
Cloud DNS + Google-managed SSL (TLS)
│
▼
GCP Cloud Load Balancer (GKE Ingress)
│
┌───────────────────────────────────────────────┼─────────────────────────────────────────────┐
│ Google Kubernetes Engine (GKE - aetherlake ns)│ │
│ ▼ │
│ ┌──────────────────────┐ ┌───────────────────────┐ ┌───────────────────────────┐ │
│ │ Control Panel UI │ │ Trino (SQL Engine) │ │ Apache Polaris │ │
│ │ (Next.js 16) │ │ (GCS/S3 Connector) │ │ (Iceberg REST Catalog) │ │
│ └──────────────────────┘ └───────────┬───────────┘ └─────────────┬─────────────┘ │
│ │ │ │
│ ┌──────────────────────┐ ┌───────────▼───────────┐ │ │
│ │ Apache Kafka │ │ Apache Flink │ │ │
│ │ (Strimzi KRaft) │ │ (GCS Checkpoints) │ │ │
│ └──────────────────────┘ └───────────┬───────────┘ │ │
└───────────────────────────────────────────────┼─────────────────────────────┼───────────────┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ Google Cloud Storage Lakehouse Bucket (`gs://...`) │
│ - Server-Side Encryption: Cloud KMS (CMEK) │
│ - Authentication: GCP Workload Identity │
│ - Iceberg Data & Metadata Parquet Files │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Cloud SQL for PostgreSQL (Polaris & Keycloak Metastores) │
└─────────────────────────────────────────────────────────────┘🚀 1. Infrastructure Provisioning via Terraform
AetherLake provides a turnkey Terraform module in terraform/gcp that provisions:
- VPC Network & Subnets with secondary alias IP ranges for GKE pods and services.
- Google Kubernetes Engine (GKE) cluster with Workload Identity Federation enabled.
- Dedicated GKE node pools for system services (Control Panel, Polaris, Kafka) and compute workers (Trino, Flink).
- Google Cloud Storage (GCS) Lakehouse bucket with versioning and lifecycle rules.
- Google Service Accounts (GSAs) with
roles/storage.objectAdminand Workload Identity bindings for Trino and Polaris. - Google Cloud SQL for PostgreSQL 16 instance with private VPC peering.
Deploy Terraform:
cd terraform/gcp
terraform init
terraform plan -var="gcp_project_id=YOUR_PROJECT_ID" -out=tfplan
terraform apply tfplanConfigure kubectl context:
gcloud container clusters get-credentials aetherlake-gke --region=europe-west1🛠️ Manual GKE Setup (Alternative to Terraform)
If not using Terraform, you can provision the cluster manually via gcloud:
Create a Production GKE Cluster:
gcloud container clusters create aetherlake-cluster \
--region=europe-west1 \
--release-channel=regular \
--workload-pool=$(gcloud config get-value project).svc.id.goog \
--enable-ip-alias \
--enable-shielded-nodes \
--num-nodes=3 \
--machine-type=e2-standard-8 \
--disk-type=pd-ssd \
--disk-size=100Connect kubectl to the cluster:
gcloud container clusters get-credentials aetherlake-cluster --region=europe-west1🪣 2. Google Cloud Storage (GCS) Lakehouse Bucket
Create a dedicated regional or dual-region storage bucket with versioning and encryption:
PROJECT_ID=$(gcloud config get-value project)
BUCKET_NAME="aetherlake-lakehouse-${PROJECT_ID}"
# Create GCS Bucket
gcloud storage buckets create gs://${BUCKET_NAME} \
--location=europe-west1 \
--uniform-bucket-level-access
# Enable Object Versioning for metadata protection
gcloud storage buckets update gs://${BUCKET_NAME} --versioningConfigure GCS Interoperability / HMAC or Workload Identity:
For S3-compatible access (compatible with MinIO/S3 APIs in Trino, Polaris, and Flink):
# Generate S3-compatible HMAC credentials for service account
gcloud storage hmac create aetherlake-sa@${PROJECT_ID}.iam.gserviceaccount.comAlternatively, use GCP Workload Identity to bind the Kubernetes ServiceAccount directly:
gcloud iam service-accounts add-iam-policy-binding \
aetherlake-sa@${PROJECT_ID}.iam.gserviceaccount.com \
--role roles/iam.workloadIdentityUser \
--member "serviceAccount:${PROJECT_ID}.svc.id.goog[aetherlake/trino-sa]"🗄️ 3. Cloud SQL for PostgreSQL (Optional HA Metastore)
For high-availability production metadata:
gcloud sql instances create aetherlake-postgres \
--database-version=POSTGRES_16 \
--tier=db-custom-2-7680 \
--region=europe-west1 \
--availability-type=REGIONAL \
--storage-type=SSD \
--storage-size=50GB \
--storage-auto-increase⚙️ 4. Helm Deployment Overrides (values-gcp.yaml)
AetherLake provides a turnkey production profile in helm-charts/core-data-stack/values-gcp.yaml configured with GCS, GKE Workload Identity, Cloud SQL, and SSD Kafka storage:
# 1. Deploy security stack (Keycloak SSO)
helm upgrade --install security-stack ./helm-charts/security-stack \
--namespace aetherlake --create-namespace
# 2. Deploy core data stack with GCP production profile
helm upgrade --install core-data-stack ./helm-charts/core-data-stack \
-f ./helm-charts/core-data-stack/values-gcp.yaml \
--namespace aetherlake