mirror of
https://github.com/kubernetes-sigs/node-feature-discovery.git
synced 2025-03-16 13:28:18 +00:00
Make table of contents in the pages cleaner and more readable by
dropping the main heading (H1 level) from TOCs. This was the original
intention with the usage of "no_toc" kramdown magic, which was broken,
however. The kramdown class magic needs to be specified on the line
immediately following the headinds, otherwise it has no effect. We need
to disable MD022 rule of mdlint as it does not understand this magic.
(cherry picked from commit 819f333118
)
96 lines
3.3 KiB
Markdown
96 lines
3.3 KiB
Markdown
---
|
|
title: "Introduction"
|
|
layout: default
|
|
sort: 1
|
|
---
|
|
|
|
# Introduction
|
|
{: .no_toc}
|
|
|
|
## Table of contents
|
|
{: .no_toc .text-delta}
|
|
|
|
1. TOC
|
|
{:toc}
|
|
|
|
---
|
|
|
|
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 two software components:
|
|
|
|
1. nfd-master
|
|
1. nfd-worker
|
|
|
|
## NFD-Master
|
|
|
|
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
|
|
|
|
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,
|
|
|
|
## Feature discovery
|
|
|
|
Feature discovery is divided into domain-specific feature sources:
|
|
|
|
- CPU
|
|
- IOMMU
|
|
- 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
|
|
`feature.node.kubernetes.io/` 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:
|
|
|
|
```json
|
|
{
|
|
"feature.node.kubernetes.io/cpu-<feature-name>": "true",
|
|
"feature.node.kubernetes.io/custom-<feature-name>": "true",
|
|
"feature.node.kubernetes.io/iommu-<feature-name>": "true",
|
|
"feature.node.kubernetes.io/kernel-<feature name>": "<feature value>",
|
|
"feature.node.kubernetes.io/memory-<feature-name>": "true",
|
|
"feature.node.kubernetes.io/network-<feature-name>": "true",
|
|
"feature.node.kubernetes.io/pci-<device label>.present": "true",
|
|
"feature.node.kubernetes.io/storage-<feature-name>": "true",
|
|
"feature.node.kubernetes.io/system-<feature name>": "<feature value>",
|
|
"feature.node.kubernetes.io/usb-<device label>.present": "<feature value>",
|
|
"feature.node.kubernetes.io/<file name>-<feature name>": "<feature value>"
|
|
}
|
|
```
|
|
|
|
## Node annotations
|
|
|
|
NFD also annotates nodes it is running on:
|
|
|
|
| Annotation | Description
|
|
| ------------------------------------------------------------ | -----------
|
|
| [<instance>.]nfd.node.kubernetes.io/master.version | Version of the nfd-master instance running on the node. Informative use only.
|
|
| [<instance>.]nfd.node.kubernetes.io/worker.version | Version of the nfd-worker instance running on the node. Informative use only.
|
|
| [<instance>.]nfd.node.kubernetes.io/feature-labels | Comma-separated list of node labels managed by NFD. NFD uses this internally so must not be edited by users.
|
|
| [<instance>.]nfd.node.kubernetes.io/extended-resources | Comma-separated list of node extended resources managed by NFD. NFD uses this internally so must not be edited by users.
|
|
|
|
NOTE: the [`--instance`](../advanced/master-commandline-reference.md#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.
|
|
|
|
|