Expand a Hetzner Cloud volume
Grow a Hetzner Cloud volume by raising the storage request on its PersistentVolumeClaim (PVC), the object a pod uses to claim a disk. You edit one number, the driver enlarges the volume, and the filesystem grows to match. A volume only ever grows: a smaller number is rejected.
Confirm the class allows expansion #
Expansion works only when the StorageClass sets allowVolumeExpansion: true. The standard class already does:
$ kubectl get storageclass standard
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
standard (default) csi.hetzner.cloud Retain WaitForFirstConsumer true 10d
If a custom class shows false in the ALLOWVOLUMEEXPANSION column, a PVC on it cannot be resized. Move the data to a class that allows expansion instead. See Migrate between storage classes .
Raise the storage request #
Edit spec.resources.requests.storage on the PVC to the new, larger size. One field changes:
spec:
resources:
requests:
storage: 10Gi
storage: 20Gi
A kubectl patch applies that same change in one line:
$ kubectl patch pvc pv-claim -p '{"spec":{"resources":{"requests":{"storage":"20Gi"}}}}'
persistentvolumeclaim/pv-claim patched
kubectl edit pvc pv-claim opens the same field in an editor if you prefer to change it by hand.
Watch the capacity grow #
The CAPACITY column in kubectl get pvc reports the volume's real size, so watch it climb to the new value:
$ kubectl get pvc pv-claim
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
pv-claim Bound pvc-8f3c... 20Gi RWO standard <unset> 5m
The capacity updates once both steps finish: the driver enlarges the Hetzner volume, then the filesystem grows to fill it. You never run a resize command inside the pod; the driver handles that part too.
Note
On the standard class, expansion happens while the pod keeps running (an online resize). If a resize ever stalls with the volume still in use, kubectl describe pvc <name> shows a condition asking you to restart the pod so the change can finish offline.
Warning
Volumes grow, never shrink A volume cannot be made smaller. Request less than the capacity the volume already reports and the API rejects the change.
$ kubectl patch pvc pv-claim -p '{"spec":{"resources":{"requests":{"storage":"5Gi"}}}}'
The PersistentVolumeClaim "pv-claim" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than status.capacity
Plan sizes with this in mind. To end up on a smaller disk, create a new, smaller PVC and copy the data across, the same move covered in Migrate between storage classes .
Next, keep an eye on how full your volumes get with Monitor storage capacity .
Use Hetzner Cloud volumes
Create a PVC on the standard StorageClass, mount it in a pod, and understand why a Hetzner Cloud volume binds only when a pod is scheduled.
Volume attach constraints and reclaim policies
Cloud volumes attach to one cloud node at a time and are kept, not deleted, when the PVC goes away, so clean them up to stop paying.