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.