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) orGOOGLE_APPLICATION_CREDENTIALSset - 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_projectandnode_image_family. The configuration in the next step takes this form. - To run one fixed image, use its path as
node_imagein place of the family pair. The path takes the formprojects/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.imageUseron 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¶
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.