Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Install the driver once for either dynamic or static provisioning. If it's already installed, follow Upgrade the CSI driver. You can optionally verify the image signatures before installation.
Prerequisites
Review the CSI driver prerequisites, including Kubernetes 1.29 or later, supported node operating systems and architectures, installation tools, network access, and node scheduling.
For dynamic provisioning, configure the controller identity permissions before installing the driver.
Prepare the cluster
These steps apply to both provisioning methods.
Create an AKS cluster
If you don't already have an AKS cluster, create one. See Deploy an Azure Kubernetes Service (AKS) cluster by using the Azure portal.
Create a virtual network peering
For dynamic provisioning, choose or create the target virtual network and subnet before peering. The driver creates the file system, not the network. Follow the Azure Managed Lustre network prerequisites.
Note
Skip this network peering step if you installed AKS in a subnet on the Azure Managed Lustre virtual network.
Identify the virtual network and subnet used by your AKS node pools. An AKS-created virtual network is in the cluster's Infrastructure resource group, shown under Properties in the Azure portal. If you supplied your own virtual network, use its resource group instead. Peer that virtual network with the virtual network you selected for Azure Managed Lustre.
To peer the AKS virtual network with your Azure Managed Lustre virtual network, consult Virtual network peering.
Tip
Due to the naming of the MC_ resource groups and virtual networks, names of networks can be similar or the same across multiple AKS deployments. When you're setting up peering, be careful to choose the AKS networks that you intend to choose.
Connect to the AKS cluster
Open a terminal session with access to the Azure CLI tools and sign in to your Azure account.
az loginSign in to the Azure portal.
Find your AKS cluster. On the Overview pane, select the Connect button, and then copy the command for Download cluster credentials.
In your terminal session, paste the command to download the credentials. The command is similar to:
az aks get-credentials --subscription <AKS_subscription_id> --resource-group <AKS_resource_group_name> --name <name_of_AKS>Install kubectl if it's not present in your environment.
az aks install-cliVerify that the current context is the AKS cluster where you installed the credentials and that you can connect to it.
kubectl config current-context kubectl get deployments --all-namespaces=true
Install the driver
The driver commands use kube-system; substitute your driver namespace throughout if it differs for a Helm installation. The script uses kube-system. Create the example PVCs and pods in the same workload namespace, selected by your current kubectl context.
After either installation method, complete the driver readiness checks before creating claims or mounting volumes.
Install with Helm
Helm is the recommended installation method. Install the released OCI chart from Microsoft Container Registry (MCR):
helm install azurelustre \
oci://mcr.microsoft.com/microsoft.azuremanagedlustre/azurelustre-csi-driver \
--namespace kube-system --create-namespace \
--version 0.6.0 --wait --timeout 30m
The chart version is 0.6.0, without a v prefix. This chart selects the v0.6.0 driver image family. Chart versions and driver versions are independent.
For Microsoft Entra Workload Identity, complete the identity setup, then add --set IsWorkloadIdentityEnabled=Enabled and --set IdentityClientId=<managed-identity-client-id> to this command.
Install with the script
Alternatively, install the version-pinned manifests:
set -o pipefail
curl -sSL --fail https://raw.githubusercontent.com/kubernetes-sigs/azurelustre-csi-driver/v0.6.0/deploy/install-driver.sh | bash -s v0.6.0
Important
Specify v0.6.0 in both the script URL and the script argument so the command installs the release described in this article. Without the argument, the installer can install a different release from the main branch.
For the corresponding source and deployment manifests, see the v0.6.0 release.
Verify the installation
Helm resource names depend on the release name, so the commands use labels shared by both installation methods. They assume the kube-system namespace; use your installation namespace if it differs.
Wait for the controller and node DaemonSets to be ready:
kubectl get deployment -n kube-system -l app=csi-azurelustre-controller kubectl rollout status deployment -n kube-system -l app=csi-azurelustre-controller --timeout=300s kubectl rollout status daemonset -n kube-system -l app=csi-azurelustre-node --timeout=1800sThere must be one controller Deployment with its desired replicas ready and available.
Confirm that each node DaemonSet has the expected number of ready pods:
kubectl get daemonset -n kube-system -l app=csi-azurelustre-node -L flavorThere must be three node DaemonSets, with
jammy,noble, andazurelinux3flavors. A DaemonSet can have zero desired pods when no eligible nodes match that flavor. For every DaemonSet with desired pods,CURRENT,READY,UP-TO-DATE, andAVAILABLEmust equalDESIRED.Compare the node and pod lists to confirm that every intended node has a CSI node pod:
kubectl get nodes -L kubernetes.azure.com/os-sku-effective kubectl get pods -n kube-system -l app=csi-azurelustre-node -o wideEvery node where you intend to run Azure Managed Lustre workloads must appear in the
NODEcolumn of the pod list. A node without a CSI node pod can't mount Azure Managed Lustre, even when all three DaemonSets report ready.Confirm that every CSI node pod is ready and uses the expected v0.6.0 images:
kubectl get pods -n kube-system -l app=csi-azurelustre-node -o wide kubectl get pods -n kube-system -l app=csi-azurelustre-node -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.nodeName}{"\t"}{.spec.containers[?(@.name=="azurelustre")].image}{"\t"}{.spec.initContainers[?(@.name=="lustre-loader")].image}{"\n"}{end}' kubectl get pods -n kube-system -l app=csi-azurelustre-controller -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[?(@.name=="azurelustre")].image}{"\n"}{end}'Every node pod must show
4/4in theREADYcolumn andRunningin theSTATUScolumn. The fourth container is thelustre-loadernative sidecar, which loads kernel modules and checks LNet readiness. A running pod with fewer than four ready containers isn't ready to serve mounts. Both theazurelustreandlustre-loaderimages must use the MCR repository and appropriatev0.6.0-jammy,v0.6.0-noble, orv0.6.0-azurelinux3tag listed in the compatibility table. The controller uses thev0.6.0-nobleimage.
After a new installation, continue with dynamic provisioning or static provisioning. For an upgrade, continue with Verify the upgrade before restarting workloads.