Skip to content

Install on Google Kubernetes Engine

This guide describes how to deploy SuperPlane to Google Kubernetes Engine (GKE) using Terraform.

Terminal window
gcloud auth application-default login
gcloud config set project YOUR_PROJECT_ID

Create a global static IP address for the ingress:

Terminal window
gcloud compute addresses create superplane-ip --global --ip-version=IPV4

Get the reserved IP address:

Terminal window
gcloud compute addresses describe superplane-ip --global --format='get(address)'

Create an A record in your DNS provider pointing to the static IP:

  • Type: A
  • Name: Your subdomain (e.g., superplane)
  • Value: The static IP address from Step 2

Wait for DNS propagation and verify:

Terminal window
dig superplane.example.com +short
Terminal window
git clone https://github.com/superplanehq/superplane-terraform
cd superplane-terraform/gke
cp terraform.tfvars.example terraform.tfvars

Edit terraform.tfvars:

project_id = "my-gcp-project"
domain_name = "superplane.example.com"
static_ip_name = "superplane-ip"
letsencrypt_email = "admin@example.com"
VariableDescriptionDefault
project_idGCP project ID(required)
domain_nameDomain name for SuperPlane(required)
static_ip_nameName of pre-created static IP(required)
letsencrypt_emailEmail for Let’s Encrypt(required)
regionGCP regionus-central1
zoneGCP zoneus-central1-a
cluster_nameGKE cluster namesuperplane
node_countNumber of GKE nodes2
machine_typeGKE node machine typee2-medium
superplane_image_tagSuperPlane image tagstable
installation.beaconEnabledEnable anonymized beacon telemetrytrue
Terminal window
terraform init
terraform apply

The deployment takes 15-20 minutes and creates:

  • GKE cluster
  • Cloud SQL PostgreSQL instance with VPC peering
  • Kubernetes secrets
  • cert-manager with Let’s Encrypt
  • SuperPlane deployment

Configure kubectl:

Terminal window
gcloud container clusters get-credentials superplane --zone=us-central1-a \
--project=YOUR_PROJECT_ID

Check pods and ingress:

Terminal window
kubectl get pods -n superplane
kubectl get ingress -n superplane

Check SSL certificate status:

Terminal window
kubectl get certificate -n superplane

Once the certificate shows Ready, access SuperPlane at https://your-domain.com.

  1. Check the GitHub releases for the latest version tag.
  2. Update superplane_image_tag in terraform.tfvars with the new tag.
  3. Apply the changes:
terraform apply
Terminal window
# Disable deletion protection for the database and the cluster
terraform apply \
-var="gke_deletion_protection=false" \
-var="sql_deletion_protection=false"
# Then destroy all resources
terraform destroy \
-var="gke_deletion_protection=false" \
-var="sql_deletion_protection=false"
# Delete the static IP
gcloud compute addresses delete superplane-ip --global