Deploy an Azure cluster from a custom image¶
When you finish, a three-node Qumulo cluster runs on your own VM image instead of the default Ubuntu 22.04 LTS image.
Before you start¶
- A managed image or Azure Compute Gallery image ID, or the publisher, offer, SKU, and version of an Azure Marketplace image
- For any v4 VM size in Azure VM sizes, a Gen2 image
- A virtual network and subnet that meet the Azure network prerequisites
- The Azure CLI signed in with
az login, as an identity that holds the Azure permissions the provider needs - Terraform 1.11 or later
1. Choose the image¶
- To run the nodes on an image you built or hardened yourself, use its resource ID as
custom_image_id. The configuration in step 2 takes this path. - To run the nodes on a stock vendor image, such as RHEL, replace
custom_image_idwith amarketplace_imageblock. The two attributes cannot be set together. - To give the short-lived provisioner VM its own image, add
provisioner_custom_image_idorprovisioner_marketplace_image. Changing either one later never touches the nodes.
This block selects RHEL 9 from the Azure Marketplace.
| Image | publisher |
offer |
sku |
|---|---|---|---|
| Ubuntu 22.04 LTS (the default) | Canonical |
0001-com-ubuntu-server-jammy |
22_04-lts, or 22_04-lts-gen2 on v4 sizes |
| RHEL 8 | RedHat |
RHEL |
8-lvm-gen2 |
| RHEL 9 | RedHat |
RHEL |
9-lvm-gen2 |
With version = "latest", each node runs whatever version Azure publishes on the day that node is created. Pin a concrete version when every node must run identical bits.
You now have one image for the nodes, and optionally a second one for the provisioner.
Warning
Changing custom_image_id or marketplace_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" {
azure {
subscription_id = "00000000-0000-0000-0000-000000000000" # <-- Replace with your subscription ID
}
}
resource "qumulo_filesystem_azure" "cluster" {
cluster_name = "qumulo"
deployment_name = "qumulo"
location = "eastus2" # <-- Replace with your region
resource_group_name = "rg-qumulo"
subnet_id = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-network/providers/Microsoft.Network/virtualNetworks/vnet-main/subnets/subnet-qumulo" # <-- Replace with your subnet resource ID
node_count = 3
vm_type = "Standard_L8s_v3"
custom_image_id = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-images/providers/Microsoft.Compute/images/qumulo-node" # <-- Replace with your image resource ID
cluster_product_type = "HOT"
storage_replication_type = "LRS"
storage_class = "STANDARD"
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_azure.cluster.endpoint_ips
}
output "web_ui" {
value = "https://${qumulo_filesystem_azure.cluster.endpoint_ips[0]}"
}
Replace the six values marked <-- Replace, and leave the rest as written. If you chose a separate provisioner image, add this line to the qumulo_filesystem_azure block.
provisioner_custom_image_id = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-images/providers/Microsoft.Compute/images/qumulo-provisioner" # <-- Replace with your provisioner image ID
3. Apply¶
The plan ends with Plan: 1 to add, 0 to change, 0 to destroy. The apply runs for up to 90 minutes 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¶
Combine your image with availability zones and private endpoints in Deploy a production Azure cluster. The qumulo_filesystem_azure reference lists every attribute, including custom_image_id and provisioner_marketplace_image.