Skip to content

Deploy a GCP cluster from a custom image

When you finish, a three-node Qumulo cluster runs on your own GCE image instead of the default Ubuntu 24.04 LTS image.

Before you start

  • A custom image, or an image family, that the deploying principal and the cluster service account can read
  • A GCP project and subnetwork that meet the GCP project prerequisites
  • Application Default Credentials (gcloud auth application-default login) or GOOGLE_APPLICATION_CREDENTIALS set
  • Terraform 1.11 or later

1. Choose the image

  • To track an image family, so new nodes boot the latest image in it, use its project and family as node_image_project and node_image_family. The configuration in the next step takes this form.
  • To run one fixed image, use its path as node_image in place of the family pair. The path takes the form projects/PROJECT/global/images/IMAGE.
  • To run the short-lived provisioner VM on its own image, pick a family or a fixed image for it too. Without one, it runs the default Ubuntu 24.04 LTS image. Changing the provisioner image later never touches the nodes.
  • For an image in another project, grant roles/compute.imageUser on the image or its project to the deploying principal and the cluster service account.

You now have one image family or fixed image for the nodes, and optionally a second one for the provisioner.

Warning

Changing the node image on a running cluster replaces every node while the cluster stays in service, and every node IP address changes.

2. Copy the configuration

Save this as main.tf in an empty directory.

terraform {
  required_version = ">= 1.11"
  required_providers {
    qumulo = {
      source  = "qumulo-terraform-registry.s3.us-east-1.amazonaws.com/qumulo/qumulo"
      version = "~> 1.0"
    }
  }
}

provider "qumulo" {
  gcp {
    project_id = "your-gcp-project-id" # <-- Replace with your project ID
    region     = "us-central1"         # <-- Replace with your region
  }
}

resource "qumulo_filesystem_gcp" "cluster" {
  cluster_name        = "qumulo"
  deployment_name     = "qumulo"
  subnetwork          = "qumulo-subnet" # <-- Replace with your subnetwork name or self-link
  node_count          = 3
  instance_type       = "n2-highmem-8"
  node_image_project  = "my-image-project"       # <-- Replace with your image project
  node_image_family   = "my-hardened-ubuntu"     # <-- Replace with your image family
  admin_password      = "YourSecurePassword123!" # <-- Replace with your admin password
  allow_cidrs         = ["10.0.0.0/8"]           # <-- Replace with your client networks
  deletion_protection = true
}

output "endpoint_ips" {
  value = qumulo_filesystem_gcp.cluster.endpoint_ips
}

output "web_ui" {
  value = "https://${qumulo_filesystem_gcp.cluster.endpoint_ips[0]}"
}

Replace the seven values marked <-- Replace, and leave the rest as written. If you chose a fixed node image, replace the node_image_project and node_image_family lines with this one.

node_image = "projects/my-image-project/global/images/qumulo-7-1-2-3" # <-- Replace with your image path

If you chose a provisioner image, add one of these to the qumulo_filesystem_gcp block.

provisioner_image_project = "my-image-project"   # <-- Replace with your provisioner image project
provisioner_image_family  = "qumulo-provisioner" # <-- Replace with your provisioner image family
provisioner_image = "projects/my-image-project/global/images/qumulo-provisioner-7-1" # <-- Replace with your provisioner image path

3. Apply

terraform init -upgrade
terraform plan
terraform apply

The plan ends with Plan: 1 to add, 0 to change, 0 to destroy. The apply finishes within the provider's 90-minute create timeout and ends with Apply complete! Resources: 1 added, 0 changed, 0 destroyed., followed by the endpoint_ips and web_ui outputs.

4. Check the cluster

Open the web_ui address in a browser on a network inside allow_cidrs, and accept the cluster's self-signed certificate. Sign in as admin with the password you set, and the web UI shows the cluster named qumulo.

Next

To change images on a running cluster, see Troubleshoot a GCP deployment. The qumulo_filesystem_gcp reference lists every attribute, including node_image and provisioner_image.