Skip to content

Documentation / Install SuperPlane

Install SuperPlane

Install SuperPlane Enterprise on Kubernetes in AWS, Azure, or Google Cloud with Terraform.

Install SuperPlane from published images. Terraform creates the cluster. You create the owner account in the browser, then run the Fleet Manager commands the product prints.

Select AWS, Azure, or Google Cloud once. The tabs on this page stay in sync. Plan for 45 minutes.

  • A domain you control, such as superplane.example.com.
  • Terraform 1.5 or later, kubectl, Helm 3.12 or later, and git.
  • Bash on Linux or macOS. On Windows, use WSL. The commands on this page do not run in PowerShell.
  • One machine for every step. Terraform keeps its state in the checkout, and later steps read it.

Install the AWS CLI. The account must be able to create EKS, VPC, RDS, S3, EFS, IAM, and EC2 resources.

Terminal window
export AWS_PROFILE=your_aws_profile
aws sts get-caller-identity

Terraform cannot use an aws login source profile to assume a role, but the AWS CLI can. When terraform plan reports failed to load assume role, export the credentials and clear the profile:

Terminal window
eval "$(aws configure export-credentials --profile your_aws_profile --format env)"
unset AWS_PROFILE
aws sts get-caller-identity

Clear AWS_PROFILE so Terraform uses the exported credentials. Run the export again when those credentials expire.

Use us-east-1. Copy the newest public AMI for each architecture into terraform.tfvars. The AMI does not select the Runner release. Fleet Manager installs Runner v0.2.1.

Terminal window
aws ec2 describe-images \
--region us-east-1 \
--owners 802589444644 \
--filters 'Name=name,Values=superplane-runner-*' 'Name=is-public,Values=true' \
--query 'sort_by(Images,&CreationDate)[].[Architecture,ImageId,CreationDate]' \
--output table

Clone the Terraform installer at a fixed release tag. This keeps the infrastructure configuration stable until you choose to upgrade it.

Terminal window
git clone --branch v0.1.0 --depth 1 https://github.com/superplanehq/terraform.git
cd terraform
Terminal window
cd aws
cp terraform.tfvars.example terraform.tfvars
domain_name = "superplane.example.com"
letsencrypt_email = "you@example.com"
region = "us-east-1"
runner_image_amd64 = "latest_amd64_ami"
runner_image_arm64 = "latest_arm64_ami"
superplane_chart_version = "1.0.0"

Use the AMI IDs from the command above. x86_64 is amd64. Leave superplane_image_tag and helm_chart_path empty. The chart version has no v prefix. An empty image tag selects the image for that chart. The plan stops when runner_image_amd64 is empty. An empty arm64 AMI disables that architecture in the fleet wizard.

Terminal window
terraform init
terraform plan -out tfplan
terraform apply tfplan

The apply takes 15–25 minutes. On Google Cloud it also waits for the certificate, which can add about 15 minutes.

Terminal window
terraform output -raw kubectl_config_command

Run the printed command.

The command updates kubeconfig for the EKS cluster.

Terminal window
kubectl config current-context
kubectl get nodes

The context names the cluster Terraform created, and every node is Ready. Every kubectl and helm command after this step runs against that context.

Terminal window
kubectl get svc -n traefik traefik \
-o jsonpath='{.status.loadBalancer.ingress[0].hostname}'

Create a CNAME for the host in domain_name. For superplane.example.com, the name is superplane. Point it at the hostname above.

Terminal window
dig +short superplane.example.com CNAME @8.8.8.8

The command must print the load balancer hostname.

An entry in /etc/hosts does not issue the certificate. Wait until the certificate is ready. AWS and Azure usually take 5–10 minutes. Google Cloud can take 15.

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

The certificate is Ready, and every pod is Running.

Terminal window
terraform output -raw superplane_url

SuperPlane creates an organization named Demo for this account.

  1. On Create the owner account, enter the name, email, and password. The password needs 8 or more characters, one number, and one capital letter. Select Continue.

    Create the owner account form
    Create the owner account. This screen is the same on every cloud.
  2. On Choose an edition, select Enterprise. Add your license file or license key, then continue.

  3. On Send email from this installation, select Skip for now.

    SMTP form with Skip for now
  1. On Set up runner fleets, select Set up fleets.

    Set up runner fleets
  2. On Choose a cloud provider, select the provider Terraform loaded, then select Continue.

    Choose a cloud provider
  3. On Configure the default fleet, keep e1-large-amd64. The default Warm capacity is 1. The default Maximum capacity is 10. Change either value when you need a different number of machines. Each AWS or Azure machine uses 2 vCPUs. Select Generate install command.

    Configure the default fleet
    The machine type list follows the provider. Capacity is the same on every cloud.
  4. On Create the chart values, copy the command. Run it on the machine where you ran Terraform, from the cloud directory, such as terraform/azure. It writes fleet-manager-values.yaml in that directory. Select Continue.

    Create the chart values
  5. On Install the chart, check the command before you run it. This SuperPlane release supports Fleet Manager v0.1.6 and Runner v0.2.1.

    In fleet-manager-values.yaml, set image.tag to v0.1.6. Set every runnerVersion to v0.2.1. In the Helm command, set --version to 0.1.6. The setup page can show a newer Fleet Manager or Runner. Use the versions on this page.

    Helm installs into the current kubectl context. Before you run Helm, confirm that the context is the one from step 5:

    Terminal window
    kubectl config current-context

    When you manage more than one cluster, add --kube-context your_context to the Helm command.

    Run the command in the same directory. When the page says Fleet Manager created the selected fleets, select Finish installation.

    Install the chart with Finish installation

The machine type is m8a.large for amd64 and m8g.large for arm64. If the file contains <RUNNER_IMAGE>, the AMI was empty at apply time. Set it, run terraform apply again, and reload the wizard.

Start a task on the default fleet. With the default capacity, one machine is ready and the fleet can run 10 machines. The quickstart connects a repository. Use your installation URL.

When something fails, use Troubleshooting. To move to a newer chart or remove the stack, use Upgrade and uninstall.