2022-11-02 12:34:37 +00:00
|
|
|
---
|
|
|
|
title: "NFD-Master"
|
|
|
|
layout: default
|
|
|
|
sort: 3
|
|
|
|
---
|
|
|
|
|
|
|
|
# NFD-Master
|
|
|
|
{: .no_toc}
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2022-12-01 17:28:25 +00:00
|
|
|
NFD-Master is responsible for connecting to the Kubernetes API server and
|
|
|
|
updating node objects. More specifically, it modifies node labels, taints and
|
|
|
|
extended resources based on requests from nfd-workers and 3rd party extensions.
|
|
|
|
|
|
|
|
## NodeFeature controller
|
|
|
|
|
2023-09-05 11:47:25 +00:00
|
|
|
The NodeFeature Controller uses NodeFeature objects as
|
2023-01-12 01:23:36 +00:00
|
|
|
the input for the [NodeFeatureRule](custom-resources.md#nodefeaturerule)
|
2022-12-01 17:28:25 +00:00
|
|
|
processing pipeline. In addition, any labels listed in the NodeFeature object
|
|
|
|
are created on the node (note the allowed
|
2023-01-12 01:23:36 +00:00
|
|
|
[label namespaces](customization-guide.md#node-labels) are controlled).
|
2022-12-01 17:28:25 +00:00
|
|
|
|
|
|
|
## NodeFeatureRule controller
|
|
|
|
|
|
|
|
NFD-Master acts as the controller for
|
2023-01-12 01:23:36 +00:00
|
|
|
[NodeFeatureRule](custom-resources.md#nodefeaturerule) objects.
|
2022-12-01 17:28:25 +00:00
|
|
|
It applies the rules specified in NodeFeatureRule objects on raw feature data
|
2023-09-05 11:47:25 +00:00
|
|
|
and creates node labels accordingly. The feature data used as the input is
|
|
|
|
received from nfd-worker instances through
|
|
|
|
[NodeFeature](custom-resources.md#nodefeature-custom-resource) objects.
|
|
|
|
|
2023-03-05 21:56:46 +00:00
|
|
|
## Master configuration
|
|
|
|
|
2024-08-19 13:11:09 +00:00
|
|
|
NFD-Master supports configuration through a configuration file. The
|
2023-03-05 21:56:46 +00:00
|
|
|
default location is `/etc/kubernetes/node-feature-discovery/nfd-master.conf`,
|
|
|
|
but, this can be changed by specifying the`-config` command line flag.
|
|
|
|
|
|
|
|
Master configuration file is read inside the container, and thus, Volumes and
|
|
|
|
VolumeMounts are needed to make your configuration available for NFD. The
|
|
|
|
preferred method is to use a ConfigMap which provides easy deployment and
|
|
|
|
re-configurability.
|
|
|
|
|
2024-08-19 13:11:09 +00:00
|
|
|
The provided deployment methods (Helm and Kustomize) create an empty configmap
|
|
|
|
and mount it inside the nfd-master containers.
|
2023-03-05 21:56:46 +00:00
|
|
|
|
|
|
|
In Helm deployments,
|
|
|
|
[Master pod parameter](../deployment/helm.md#master-pod-parameters)
|
|
|
|
`master.config` can be used to edit the respective configuration.
|
|
|
|
|
2024-08-19 13:11:09 +00:00
|
|
|
In Kustomize deployments, modify the `nfd-master-conf` ConfigMap with a custom
|
|
|
|
overlay.
|
|
|
|
|
|
|
|
> **NOTE:** dynamic run-time reconfiguration was dropped in NFD v0.17.
|
|
|
|
> Re-configuration is handled by pod restarts.
|
|
|
|
|
2023-03-05 21:56:46 +00:00
|
|
|
See
|
|
|
|
[nfd-master configuration file reference](../reference/master-configuration-reference.md)
|
|
|
|
for more details.
|
|
|
|
The (empty-by-default)
|
|
|
|
[example config](https://github.com/kubernetes-sigs/node-feature-discovery/blob/{{site.release}}/deployment/components/master-config/nfd-master.conf.example)
|
|
|
|
contains all available configuration options and can be used as a reference
|
|
|
|
for creating a configuration.
|
|
|
|
|
2022-12-01 17:28:25 +00:00
|
|
|
## Deployment notes
|
|
|
|
|
|
|
|
NFD-Master runs as a deployment, by default
|
2022-11-02 12:34:37 +00:00
|
|
|
it prefers running on the cluster's master nodes but will run on worker
|
|
|
|
nodes if no master nodes are found.
|
|
|
|
|
2023-11-28 18:27:33 +00:00
|
|
|
For High Availability, you should increase the replica count of
|
2022-11-02 12:34:37 +00:00
|
|
|
the deployment object. You should also look into adding
|
|
|
|
[inter-pod](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity)
|
|
|
|
affinity to prevent masters from running on the same node.
|
|
|
|
However note that inter-pod affinity is costly and is not recommended
|
|
|
|
in bigger clusters.
|
|
|
|
|
2023-09-05 11:47:25 +00:00
|
|
|
> **Note:** When NFD-Master is intended to run with more than one replica,
|
|
|
|
> it is advised to use `-enable-leader-election` flag. This flag turns on
|
|
|
|
> leader election for NFD-Master and let only one replica to act on changes
|
|
|
|
> in NodeFeature and NodeFeatureRule objects.
|
2022-11-02 12:34:37 +00:00
|
|
|
|
|
|
|
If you have RBAC authorization enabled (as is the default e.g. with clusters
|
|
|
|
initialized with kubeadm) you need to configure the appropriate ClusterRoles,
|
2023-12-01 13:55:45 +00:00
|
|
|
ClusterRoleBindings and a ServiceAccount for NFD to create node
|
2022-11-02 12:34:37 +00:00
|
|
|
labels. The provided template will configure these for you.
|