Volume Expansion
Volumes are expanded in two stages. First, Longhorn resizes the block device, then it expands the filesystem.
Since v1.4.0, Longhorn supports online expansion. Most of the time Longhorn can directly expand an attached volumes without limitations, no matter if the volume is being R/W or rebuilding.
If the volume was not expanded though the CSI interface (for example, for Kubernetes older than v1.16), the capacity of the corresponding PVC and PV would not change.
NVMf) or Block Device frontend. (Note: The UBLK frontend is not supported for online expansion as of v1.10.0).During the expansion process, Longhorn automatically resizes all replicas to match the user-requested size. There are two ways to expand a Longhorn volume: with a PersistentVolumeClaim (PVC) and with the Longhorn UI.
This method is applied only if:
allowVolumeExpansion should be true in the related StorageClass.This method is recommended if it is applicable, because the PVC and PV will be updated automatically and everything is kept consistent after expansion.
Find the corresponding PVC for the Longhorn volume, then modify the requested spec.resources.requests.storage of the PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"longhorn-simple-pvc","namespace":"default"},"spec":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"longhorn"}}
pv.kubernetes.io/bind-completed: "yes"
pv.kubernetes.io/bound-by-controller: "yes"
volume.beta.kubernetes.io/storage-provisioner: driver.longhorn.io
creationTimestamp: "2019-12-21T01:36:16Z"
finalizers:
- kubernetes.io/pvc-protection
name: longhorn-simple-pvc
namespace: default
resourceVersion: "162431"
selfLink: /api/v1/namespaces/default/persistentvolumeclaims/longhorn-simple-pvc
uid: 0467ae73-22a5-4eba-803e-464cc0b9d975
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: longhorn
volumeMode: Filesystem
volumeName: pvc-0467ae73-22a5-4eba-803e-464cc0b9d975
status:
accessModes:
- ReadWriteOnce
capacity:
storage: 1Gi
phase: Bound
For the V2 Data Engine, ensure your StorageClass has allowVolumeExpansion: true and dataEngine: "v2":
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: longhorn-v2-data-engine
provisioner: driver.longhorn.io
allowVolumeExpansion: true
reclaimPolicy: Delete
volumeBindingMode: Immediate
parameters:
numberOfReplicas: "3"
staleReplicaTimeout: "2880"
fsType: "ext4"
dataEngine: "v2"
To expand the volume, edit the corresponding PVC manifest to increase the storage request to a larger size, then apply the updated manifest:
resources:
requests:
storage: 3Gi
Usage: On the Volumes page of the Longhorn UI, click Expand Volume in the operation menu for the volume, enter the new desired size, and confirm. The expansion will begin automatically.
(For V2 Data Engine volumes, verify that the frontend is set to Block Device or NVMf before expanding).
Longhorn tries to expand the file system only if:
ext4).If a volume is reverted to a snapshot with smaller size, the frontend of the volume is still holding the expanded size. But the filesystem size will be the same as that of the reverted snapshot. In this case, you will need to handle the filesystem manually:
ext4, the volume might need to be mounted and umounted once before resizing the filesystem manually. Otherwise, executing resize2fs might result in an error:resize2fs: Superblock checksum does not match superblock while trying to open ......
Couldn't find valid filesystem superblock.
Follow the steps below to resize the filesystem:
mount /dev/longhorn/<volume name> <arbitrary mount directory>
umount /dev/longhorn/<volume name>
mount /dev/longhorn/<volume name> <arbitrary mount directory>
resize2fs /dev/longhorn/<volume name>
umount /dev/longhorn/<volume name>
xfs, you can directly mount, then expand the filesystem using:mount /dev/longhorn/<volume name> <arbitrary mount directory>
xfs_growfs <the mount directory>
umount /dev/longhorn/<volume name>
Longhorn support for online expansion depends on Kubernetes.
CSINodeExpandSecret is required.
You can enable online expansion for encrypted volumes by specifying the following encryption parameters in the StorageClass:csi.storage.k8s.io/node-expand-secret-namecsi.storage.k8s.io/node-expand-secret-namespaceIf you cannot enable it but still prefer to do online expansion, you can:
cryptsetup resize <volume name>. The passphrase this command requires is the field CRYPTO_KEY_VALUE of the corresponding secret.From v1.8.0, Longhorn supports fully automatic online expansion of the filesystem (NFS) for RWX volumes. The feature requires the v1.8.0 versions of these components to be running:
If you have upgraded from a previous version, the Share Manager pods (one for each RWX volume) are not upgraded automatically, to avoid disruption during the upgrade.
After growing the block device, the CSI layer sends a resize command to the Share Manager to grow the filesystem within the block device. With a down-rev share-manager, the command fails with an “unimplemented” error code and so no expansion happens. To get the right image before the expansion, the simplest thing is to force a restart of the pod. Identify the Share Manager pod of the RWX volume (typically named share-manager-<volume name>) and delete it:
kubectl -n longhorn-system delete pod <the share manager pod>
The pod will automatically be recreated using the appropriate version, and the expansion completes. Further expansions will not require any further intervention.
It is still possible to expand the RWX volume offline using these steps:
replicas=0. Ensure that the volume is fully detached.detached.kubectl -n longhorn-system get volume <volume-name>
The reattached volume will have the expanded size. Furthermore, the Share Manager pod will be recreated with the current version.
© 2019-2026 Longhorn a Series of LF Projects, LLC. Documentation Distributed under CC-BY-4.0.
For website terms of use, trademark policy and other project policies please see lfprojects.org/policies.