Table of contents

  1. NFD-Master
  2. NFD-Worker
  3. NFD-Topology-Updater
  4. Feature Discovery
  5. Node annotations
  6. Custom resources

This software enables node feature discovery for Kubernetes. It detects hardware features available on each node in a Kubernetes cluster, and advertises those features using node labels.

NFD consists of three software components:

  1. nfd-master
  2. nfd-worker
  3. nfd-topology-updater


NFD-Master is the daemon responsible for communication towards the Kubernetes API. That is, it receives labeling requests from the worker and modifies node objects accordingly.


NFD-Worker is a daemon responsible for feature detection. It then communicates the information to nfd-master which does the actual node labeling. One instance of nfd-worker is supposed to be running on each node of the cluster,


NFD-Topology-Updater is a daemon responsible for examining allocated resources on a worker node to account for resources available to be allocated to new pod on a per-zone basis (where a zone can be a NUMA node). It then creates or updates a NodeResourceTopology custom resource object specific to this node. One instance of nfd-topology-updater is supposed to be running on each node of the cluster.

Feature Discovery

Feature discovery is divided into domain-specific feature sources:

  • CPU
  • Kernel
  • Memory
  • Network
  • PCI
  • Storage
  • System
  • USB
  • Custom (rule-based custom features)
  • Local (hooks for user-specific features)

Each feature source is responsible for detecting a set of features which. in turn, are turned into node feature labels. Feature labels are prefixed with and also contain the name of the feature source. Non-standard user-specific feature labels can be created with the local and custom feature sources.

An overview of the default feature labels:

  "<feature-name>": "true",
  "<feature-name>": "true",
  "<feature name>": "<feature value>",
  "<feature-name>": "true",
  "<feature-name>": "true",
  "<device label>.present": "true",
  "<feature-name>": "true",
  "<feature name>": "<feature value>",
  "<device label>.present": "<feature value>",
  "<file name>-<feature name>": "<feature value>"

Node annotations

NFD also annotates nodes it is running on:

Annotation Description
[<instance>.] Version of the nfd-master instance running on the node. Informative use only.
[<instance>.] Version of the nfd-worker instance running on the node. Informative use only.
[<instance>.] Comma-separated list of node labels managed by NFD. NFD uses this internally so must not be edited by users.
[<instance>.] Comma-separated list of node extended resources managed by NFD. NFD uses this internally so must not be edited by users.

NOTE: the -instance command line flag affects the annotation names

Unapplicable annotations are not created, i.e. for example master.version is only created on nodes running nfd-master.

Custom resources

NFD takes use of some Kubernetes Custom Resources.

NodeFeatures (EXPERIMENTAL) can be used for representing node features and requesting node labels to be generated.

NFD-Master uses NodeFeatureRules for custom labeling of nodes.

NFD-Topology-Updater creates NodeResourceTopology objects that describe the hardware topology of node resources.