Storage

Block Storage

Block storage presents raw storage capacity as fixed-size blocks (typically 512B or 4KB) that the operating system formats and manages as a disk. NVMe SSDs, NVMe-oF volumes, and iSCSI LUNs are all block storage. It is the preferred storage type for databases, virtual machines, and Kubernetes PersistentVolumes requiring low-latency, high-IOPS access.

Block Storage vs Object Storage vs File Storage

  • Block storage — Raw device interface. OS controls formatting. Best for: databases (PostgreSQL, MySQL), VMs, Kubernetes PVCs, OS disks. Protocols: NVMe, iSCSI, NVMe-oF.
  • File storage — POSIX filesystem interface via NFS or SMB. Best for: shared application data, home directories, CMS. Higher latency than block due to file system metadata overhead.
  • Object storage — Key-value HTTP API (S3-compatible). Best for: media files, backups, data lakes. Extremely scalable but high latency (ms–seconds); not suitable for databases.

Block Storage and NVMe-oF

NVMe-oF is a block storage protocol. A host connects to an NVMe-oF target and receives a block device (/dev/nvme0n1, /dev/nvme1n1, etc.) that behaves identically to a local NVMe SSD — same kernel drivers, same filesystem tools, same performance characteristics. This zero-change compatibility is why NVMe-oF is replacing iSCSI in modern data centers.

Block Storage in Kubernetes

Kubernetes uses the CSI (Container Storage Interface) to provision block storage as PersistentVolumes. NVMe-oF CSI drivers (like the simplyblock CSI) provision an NVMe-oF volume per PVC, bind it to the scheduling node via nvme connect, and present it as a block device for the pod's filesystem.