A Hetzner Cloud volume attaches to one cloud node at a time, and when its PersistentVolumeClaim (PVC) is deleted the underlying volume stays behind. Both facts shape how you run stateful apps on block storage, and the second one keeps costing money until you act on it. A PVC is the object a pod uses to claim a disk. ## One writer, one node The `standard` class is ReadWriteOnce (RWO): the volume mounts on a single node, and one pod there writes to it. A second pod on a different node cannot mount the same volume at the same time. Hetzner attaches at most 16 volumes to one server, so plan for that ceiling on a node that holds many of them. When a pod moves to another node, during a drain, an upgrade, or a reschedule, the volume detaches from the old node and reattaches to the new one. That handoff is not instant. The new pod stays in `ContainerCreating` for a few seconds until the detach finishes and the volume attaches where the pod now runs. Plan for this short gap in any workload that holds a volume. [Run a single-writer workload on block storage](/docs/hetzner/apalla/storage/block/run-a-workload-on-block-storage) shows how to keep an app healthy across it. A bound volume also stays in one Hetzner location and pins the pod there through a volume node affinity, so the pod can only schedule where the volume already is; if that location has no room, the pod waits. [Access modes and volume binding](/docs/hetzner/apalla/storage/access-modes) covers why an existing volume leads the pod rather than the other way around. ## Cloud nodes only A Hetzner Cloud volume attaches only to cloud worker nodes. It cannot attach to a bare metal server or a control-plane node. A pod that requests a `standard` volume but is pinned to a bare metal node stays `Pending`: ```console $ kubectl describe pvc data-db-0 ... Events: Warning ProvisioningFailed error generating accessibility requirements: no topology key found for node bm-1 ``` Keep such pods on cloud nodes with node affinity, as shown in [Use Hetzner Cloud volumes](/docs/hetzner/apalla/storage/block/use-hcloud-volumes). For storage that lives on bare metal, use local disks instead: see [Local PV lifecycle](/docs/hetzner/apalla/storage/local/local-pv-lifecycle). ## Retain keeps the volume after the PVC The `standard` class uses the `Retain` reclaim policy. Deleting a PVC releases the claim but leaves the Hetzner volume and its data in your project, detached and unused. This is deliberate. Syself Autopilot keeps every storage class on `Retain` so an accidental `kubectl delete pvc` cannot destroy your data: the command deletes the Kubernetes object, not the volume or the data behind it. The flip side is that freeing the space, and stopping the bill, is a separate intentional step. > [!CAUTION] > A retained volume costs money for as long as it exists, even with no pod using it. Deleting the PVC does not stop the charge. Delete the leftover volume in the Hetzner Cloud Console or through the Hetzner API once you are sure the data is no longer needed. After deleting the PVC, find the orphaned volume and remove it in Hetzner: 1. List the PersistentVolumes (PVs) and look for `Released` in the `STATUS` column. A released PV still names the claim it used to serve. ```console $ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pvc-8f3c... 10Gi RWO Retain Released default/pv-claim standard 10d ``` 2. Note the Hetzner volume behind each released PV. The volume's name or ID appears in the PV's CSI details: ```console $ kubectl get pv pvc-8f3c... -o jsonpath='{.spec.csi.volumeHandle}' ``` 3. Delete that volume in the [Hetzner Cloud Console](https://console.hetzner.cloud) under Volumes, or with the Hetzner API or `hcloud volume delete`. This step is what actually stops the billing. 4. Delete the released PV object in the cluster to clean up the leftover record: ```console $ kubectl delete pv pvc-8f3c... ``` > [!WARNING] > Deleting the Hetzner volume erases its data for good. Confirm you have a backup, or that the data is disposable, before you delete. See [Back up with Velero](/docs/hetzner/apalla/storage/backup/back-up-with-velero). Related: [Use Hetzner Cloud volumes](/docs/hetzner/apalla/storage/block/use-hcloud-volumes), [Monitor storage capacity](/docs/hetzner/apalla/storage/operations/monitor-storage-capacity).