Driver Types
Fuzzball V4 includes five built-in storage drivers. Each driver handles a different type of storage backend. All drivers are built into the Fuzzball platform — no external container-based drivers need to be installed. The on-premises drivers are NFS and Hostpath; the cloud drivers are AWS EFS, Azure Files, and Oracle Cloud File Storage (FSS).
You can list the drivers available on your cluster, along with their required and optional configuration fields, with:
$ fuzzball volume provisioner list-drivers| Aspect | NFS | Hostpath | EFS | Azure Files | OCI FSS |
|---|---|---|---|---|---|
| Backend | NFS server export | Local filesystem path | AWS EFS access points | Azure Files NFS share | OCI File Storage system |
| Typical deployment | On-prem multi-node | Single-node, Lustre, GPFS | AWS cloud | Azure cloud | OCI cloud |
| Volume model | Subdirectories on NFS export | Directories under base path | EFS access points | Subdirectories in share | Subdirectories on FSS export |
| Mount method | NFS mount | Bind mount | NFS 4.1 (transparent to user) | NFSv3 | NFSv3 |
| Capacity enforcement | Validated via filesystem stats | Validated via filesystem stats | Elastic (no per-volume quota) | Provisioned on the share | Elastic (no per-volume quota) |
| POSIX ownership | chown on directory | chown after bind mount | Access point CreationInfo | chown on directory | Server-side IdentitySquash policy |
| Node-local support | No | Yes (local: true) | No | No | No |
The NFS driver manages volumes as subdirectories on an NFS export. It is the primary driver for on-premises multi-node clusters where shared storage is provided by an NFS server.
| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Must be nfs |
target | string | Yes | NFS server and export path in host:/path format |
version | integer | No | NFS protocol version: 3 or 4. Omit to auto-negotiate |
options | string | No | Additional NFS mount options (e.g., hard,intr,rsize=1048576) |
shared-nfs:
description: "Shared NFS storage"
driver:
type: nfs
target: "nfs-server.internal:/exports/fuzzball"
version: 4
options: "hard,intr"
access: all
ephemeral: all
When a volume is created, the driver:
- Mounts the NFS export to a temporary location
- Validates available capacity on the export
- Creates a subdirectory named after the volume
- Sets POSIX ownership (UID/GID) on the directory
- Unmounts the temporary mount
When a volume is published (mounted into a workflow container), the driver mounts the specific volume subdirectory to the target path:
NFS Export Root (/exports/fuzzball)
├── my-volume/ ← volume directory, mounted to container path
├── project-data/
└── scratch-wf-123/
| Setting | Behavior |
|---|---|
version: 3 | Forces NFSv3. Adds vers=3 to mount options |
version: 4 | Forces NFSv4. Uses nfs4 filesystem type |
| Omitted | Auto-negotiates with the NFS server (default) |
NFSv3 and NFSv4 have different mount option syntax and behavior. If you specify mount options in theoptionsfield, ensure they are compatible with the NFS version you select.
NFS exports configured with root_squash will remap root (UID 0) operations to the
nobody user. This affects volume creation and ownership assignment. If your NFS server
uses root_squash, configure the export with no_root_squash for the network range
where Fuzzball substrate nodes reside, or use the volume’s UID/GID settings to work
within the squash rules.
The hostpath driver manages volumes as directories under a base path on the local filesystem. It supports two modes: shared (default) and node-local.
| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Must be hostpath |
path | string | Yes | Absolute path to the base directory (must exist on the node) |
local | boolean | No | Set to true for node-local volumes (default: false) |
In shared mode (local: false or omitted), the base path is expected to be available on
all nodes in the cluster — typically via a shared filesystem like Lustre, GPFS, or a
network mount. Volumes can be accessed from any node.
lustre-storage:
description: "Lustre shared filesystem"
driver:
type: hostpath
path: /mnt/lustre/fuzzball
access: all
ephemeral: all
In node-local mode (local: true), volumes exist only on the node where they were
created. Fuzzball’s scheduler ensures that jobs using node-local volumes are placed on the
correct node.
local-nvme:
description: "Local NVMe scratch"
driver:
type: hostpath
path: /mnt/nvme0n1
local: true
ephemeral:
- compute-jobs
Node-local volumes are ideal for ephemeral scratch storage on fast local disks (NVMe, SSD). They are not suitable for persistent data that needs to survive node failures or be accessed from multiple nodes. Whenlocal: trueis set, Fuzzball’s scheduler constrains job placement to the node where the volume was created — this applies to both ephemeral and persistent volumes using this provisioner.
When a volume is created, the driver:
- Validates available capacity at the base path
- Creates a subdirectory named after the volume
- Sets POSIX ownership (UID/GID) on the directory
When a volume is published, the driver creates a bind mount from the volume directory to the target path:
Base Path (/mnt/fuzzball)
├── volume-a/ ← bind-mounted to container path
├── volume-b/
└── scratch-wf-456/
The EFS driver manages volumes as access points on an Amazon Elastic File System. It is designed for AWS cloud deployments where shared, elastic storage is needed.
| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Must be efs |
filesystemId | string | BYO mode | AWS EFS filesystem ID (e.g., fs-12345678) |
region | string | Yes | AWS region where the EFS filesystem is located |
subnetIds | list | Self-provisioned mode | AWS subnet IDs for mount target placement |
nfsSyncMode | string | No | NFS write mode: auto (default), sync, or async. See NFS sync mode |
ProvidefilesystemIdorsubnetIds, not both. UsefilesystemIdto attach an existing EFS filesystem (BYO mode). UsesubnetIdsto have Fuzzball create the EFS filesystem and mount targets automatically (self-provisioned mode).
BYO mode — use an existing EFS filesystem:
aws-efs:
description: "AWS EFS for shared storage"
driver:
type: efs
filesystemId: fs-12345678
region: us-west-2
access: all
ephemeral: all
Self-provisioned mode — Fuzzball creates the EFS infrastructure:
aws-efs-auto:
description: "Auto-provisioned AWS EFS"
driver:
type: efs
region: us-west-2
subnetIds:
- subnet-abc123
- subnet-def456
access: all
ephemeral: all
The EFS driver is unique among Fuzzball’s drivers — it is a control-plane driver, meaning volume creation and deletion happen via AWS API calls from the Fuzzball control plane, not from a substrate node. This provides faster operations and eliminates the need for a running substrate node during volume management.
When a volume is created, the driver:
- Creates an AWS EFS access point on the filesystem
- Sets the access point’s root directory to
/<volume-name> - Configures POSIX identity via the access point’s
PosixUserandCreationInfo(UID, GID, and directory permissions)
When a volume is published (mounted into a workflow container), the driver:
- Mounts the access point via NFS 4.1 to the target path
- Mount uses the access point’s root directory for isolation
EFS Filesystem (fs-12345678)
├── /volume-a/ ← access point root, mounted to container
├── /volume-b/ ← separate access point
└── /scratch-123/ ← ephemeral access point
Before creating an EFS provisioner, ensure:
- The EFS filesystem exists and is in the
availablestate - Mount targets are available in the subnets where Fuzzball nodes run
- Security groups allow NFS traffic (TCP port 2049) from the node subnet
- IAM permissions allow
elasticfilesystem:CreateAccessPoint,elasticfilesystem:DeleteAccessPoint, andelasticfilesystem:DescribeAccessPoints
EFS storage is elastic — there are no per-access-point capacity quotas. Thesizefield in volume definitions is accepted but not enforced at the EFS level.
The Azure Files driver manages volumes as subdirectories of an Azure Files NFS share. Each volume is a subdirectory in the share, mounted on substrate nodes over NFSv3. It is designed for Azure cloud deployments.
| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Must be azure_files |
accountName | string | Yes | Azure Storage account name hosting the file share |
shareName | string | Yes | Azure Files share name within the storage account |
nfsSyncMode | string | No | NFS write mode: auto (default), sync, or async. See NFS sync mode |
The Azure Storage account must have the NFS protocol enabled on the file share. SMB shares are not supported by this driver.
azure-files:
description: "Azure Files NFS storage"
driver:
type: azure_files
accountName: fuzzballstorage
shareName: workflowio
access: all
ephemeral: all
The OCI FSS driver manages volumes on an Oracle Cloud File Storage Service file system,
with parity to the AWS EFS driver. Volumes mount over NFSv3, and per-volume POSIX
ownership is enforced server-side by an OCI FSS IdentitySquash policy. It supports both
bring-your-own (BYO) mode and self-provisioned mode.
| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Must be oci_fss |
region | string | Yes | OCI region (e.g., us-ashburn-1) |
compartmentId | string | Yes | OCID of the compartment that owns the file system |
availabilityDomain | string | Yes | OCI availability domain (FSS is per-AD) |
filesystemId | string | BYO mode | Existing FSS file-system OCID |
mountTargetId | string | BYO mode | Existing mount-target OCID (required alongside filesystemId) |
subnetIds | list | Self-provisioned mode | VCN subnet OCIDs for mount-target placement |
For BYO mode, provide bothfilesystemIdandmountTargetId. For self-provisioned mode, omit them and providesubnetIds; the driver creates the file system and mount target from the compartment, availability domain, and subnets.
BYO mode — use an existing FSS file system and mount target:
oci-fss:
description: "OCI File Storage"
driver:
type: oci_fss
region: us-ashburn-1
compartmentId: ocid1.compartment.oc1..aaaaaaaa
availabilityDomain: "Uocm:US-ASHBURN-AD-1"
filesystemId: ocid1.filesystem.oc1.iad.aaaaaaaa
mountTargetId: ocid1.mounttarget.oc1.iad.aaaaaaaa
access: all
ephemeral: all
Self-provisioned mode — Fuzzball creates the FSS infrastructure:
oci-fss-auto:
description: "Auto-provisioned OCI File Storage"
driver:
type: oci_fss
region: us-ashburn-1
compartmentId: ocid1.compartment.oc1..aaaaaaaa
availabilityDomain: "Uocm:US-ASHBURN-AD-1"
subnetIds:
- ocid1.subnet.oc1.iad.aaaaaaaa
access: all
ephemeral: all
The AWS EFS and Azure Files drivers accept an optional nfsSyncMode field that controls
whether NFS volumes are mounted with synchronous or asynchronous writes:
| Value | Behavior |
|---|---|
auto (default) | Task-array workloads use sync (preventing write loss across ranks); all other workloads use async (maximum write performance) |
sync | Always mount with synchronous writes |
async | Always mount with asynchronous writes |
For most clusters the auto default is correct. Override it only when you have a specific
durability or performance requirement.
Use this guide to select the right driver for your deployment:
| Deployment | Recommended Driver | Reason |
|---|---|---|
| On-prem with NFS server | NFS | Direct NFS mount support with version and option control |
| On-prem with Lustre/GPFS | Hostpath (shared) | Shared clustered filesystem available on all nodes |
| Single-node development | Hostpath (shared or local) | Simple local directory; no network storage needed |
| GPU nodes with local NVMe | Hostpath (local) | Fast local scratch; ephemeral per-node volumes |
| AWS with shared storage needs | EFS | Elastic, multi-AZ shared storage with no capacity planning |
| Azure with shared storage needs | Azure Files | Cloud-native NFSv3 share |
| OCI with shared storage needs | OCI FSS | Elastic NFS with server-side per-volume identity isolation |