Skip to content

Lustre on Azure

Deploy a Lustre 2.17 filesystem into your own Azure subscription: an active-active HA pair, one MDT and two OSTs, with each OST on an OpenZFS pool backed by Azure Blob Storage. Any standard Lustre client mounts it.

  • Terraform 1.0 or later, git, and the Azure CLI signed in (az login)
  • An SSH key
  • A resource group and region to deploy into
  • Quota for two VMs of the size you choose (see Performance tiers)
Terminal window
git clone https://github.com/zettalane-systems/open-lustre-cloud.git
cd open-lustre-cloud
./deploy-lustre.sh --cloud azure -g my-resource-group -l westus -n lustre \
-k ~/.ssh/id_rsa

The script writes the Terraform variables, applies the storage module, waits for the cluster to come up and prints the mount command, for example:

Terminal window
sudo mount -t lustre <MGS_NID>:/zettafs /mnt/lustre

That deploys storage only. Add --deploy-client to also build a test client, install the Lustre client and verify the mount end to end.

2 storage nodesan active-active HA pair with floating VIPs and sub-60 s failover, each serving one OST from its own OpenZFS pool
MGS + MDTon a dedicated disk (ldiskfs)
Azure Blob Storagethe pools’ data devices. You pay for what you store.
1 clientoptional, with --deploy-client

Everything lands in your subscription and your VNet. There is no call-home and no vendor-run infrastructure.

Any Linux host that can reach the MGS VIP can mount the filesystem. Install the client with the helper in the repo, which prefers a prebuilt kernel module over a DKMS build:

Terminal window
sudo bash install-lustre-client.sh
sudo mkdir -p /mnt/lustre
sudo mount -t lustre <MGS_NID>:/zettafs /mnt/lustre
lfs df -h /mnt/lustre

Packages are also available from Whamcloud if you prefer to install by hand.

--tier sets the machine size and bucket count. The client gets the same size as the storage nodes, because Lustre bandwidth is network-bound at both ends.

TierAzure VMBuckets per node
basicStandard_D8s_v52
standard (default)Standard_D16s_v54
performanceStandard_D32s_v58
ultraStandard_D64s_v512

-m and --client-machine-type override the sizes individually.

Terminal window
./deploy-lustre.sh --cloud azure -g my-resource-group -l westus -n lustre --destroy

Pass the same -n you deployed with. This removes every resource the deployment created, including the storage containers and their contents. Deployment state lives in the terraform/ directory of your clone, so keep it until the cluster is destroyed.

The Community Edition is free: no subscription, no per-TB charge and nothing metered. You pay Azure for the VMs, managed disks, Blob Storage and network traffic the deployment uses. -s, --spot lowers the compute cost for evaluation, but an eviction fails the pair over mid-run, so do not measure throughput on spot VMs.

See the open-lustre-cloud README for the full option list and Kubernetes clients.