NVMe-oF Discovery Service
The NVMe-oF Discovery Service is a protocol mechanism that allows initiator hosts to automatically find and enumerate available NVMe-oF targets and subsystems on the network. Initiators query a Discovery Controller to retrieve a log of all subsystems they are authorized to connect to, eliminating the need for manual target configuration.
How NVMe-oF Discovery Works
When an initiator host boots, it connects to a well-known discovery address (port 8009 for centralized discovery, or a configured IP). It sends a Get Log Page command to the Discovery Controller, which responds with a Discovery Log Page — a list of NVMe-oF targets including their transport type, address, port, and NQN (subsystem identifier).
Discovery in Practice (nvme-cli)
Centralized vs Distributed Discovery
- Centralized — A single Discovery Controller maintains the full target list. Simple to manage; a single point of failure unless replicated.
- Distributed (TP8013) — Each NVMe-oF target runs its own Discovery Controller. Initiators are directed between them. More resilient but more complex.
NVMe Discovery and Kubernetes
Storage systems like simplyblock automate discovery — when a Kubernetes node joins the cluster, the CSI node plugin runs NVMe discovery and nvme connect automatically, making storage volumes available to pods without manual administrator intervention.