2023-03-05 22:56:46 +01:00
|
|
|
---
|
|
|
|
title: "Master config reference"
|
|
|
|
layout: default
|
|
|
|
sort: 3
|
|
|
|
---
|
|
|
|
|
|
|
|
# Configuration file reference of nfd-master
|
|
|
|
{: .no_toc}
|
|
|
|
|
|
|
|
## Table of contents
|
|
|
|
{: .no_toc .text-delta}
|
|
|
|
|
|
|
|
1. TOC
|
|
|
|
{:toc}
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
See the
|
|
|
|
[sample configuration file](https://github.com/kubernetes-sigs/node-feature-discovery/blob/{{site.release}}/deployment/components/master-config/nfd-master.conf.example)
|
|
|
|
for a full example configuration.
|
|
|
|
|
|
|
|
## noPublish
|
|
|
|
|
|
|
|
`noPublish` option disables updates to the Node objects in the Kubernetes
|
|
|
|
API server, making a "dry-run" flag for nfd-master. No Labels, Annotations, Taints
|
|
|
|
or ExtendedResources of nodes are updated.
|
|
|
|
|
|
|
|
Default: `false`
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
noPublish: true
|
|
|
|
```
|
|
|
|
|
|
|
|
## extraLabelNs
|
|
|
|
`extraLabelNs` specifies a list of allowed feature
|
|
|
|
label namespaces. This option can be used to allow
|
|
|
|
other vendor or application specific namespaces for custom labels from the
|
|
|
|
local and custom feature sources, even though these labels were denied using
|
|
|
|
the `denyLabelNs` parameter.
|
|
|
|
|
|
|
|
The same namespace control and this option applies to Extended Resources (created
|
|
|
|
with `resourceLabels`), too.
|
|
|
|
|
|
|
|
Default: *empty*
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
extraLabelNs: ["added.ns.io","added.kubernets.io"]
|
|
|
|
```
|
|
|
|
|
|
|
|
## denyLabelNs
|
|
|
|
`denyLabelNs` specifies a list of excluded
|
|
|
|
label namespaces. By default, nfd-master allows creating labels in all
|
|
|
|
namespaces, excluding `kubernetes.io` namespace and its sub-namespaces
|
|
|
|
(i.e. `*.kubernetes.io`). However, you should note that
|
|
|
|
`kubernetes.io` and its sub-namespaces are always denied.
|
|
|
|
This option can be used to exclude some vendors or application specific
|
|
|
|
namespaces.
|
|
|
|
Note that the namespaces `feature.node.kubernetes.io` and `profile.node.kubernetes.io`
|
|
|
|
and their sub-namespaces are always allowed and cannot be denied.
|
|
|
|
|
|
|
|
Default: *empty*
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
denyLabelNs: ["denied.ns.io","denied.kubernetes.io"]
|
|
|
|
```
|
|
|
|
|
Option to stop implicitly adding default prefix to names
Add new autoDefaultNs (default is "true") config option to nfd-master.
Setting the config option to false stops NFD from automatically adding
the "feature.node.kubernetes.io/" prefix to labels, annotations and
extended resources. Taints are not affected as for them no prefix is
automatically added. The user-visible part of enabling the option change
is that NodeFeatureRules, local feature files, hooks and configuration
of the "custom" may need to be altereda (if the auto-prefixing is
relied on).
For now, the config option defaults to "true", meaning no change in
default behavior. However, the intent is to change the default to
"false" in a future release, deprecating the option and eventually
removing it (forcing it to "false").
The goal of stopping doing "auto-prefixing" is to simplify the operation
(of nfd and users). Make the naming more straightforward and easier to
understand and debug (kind of WYSIWYG), eliminating peculiar corner
cases:
1. Make validation simpler and unambiguous
2. Remove "overloading" of names, i.e. the mapping two values to the
same actual name. E.g. previously something like
labels:
feature.node.kubernetes.io/foo: bar
foo: baz
Could actually result in node label:
feature.node.kubernetes.io/foo: baz
3. Make the processing/usagee of the "rule.matched" and "local.labels"
feature in NodeFeatureRules unambiguous and more understadable. E.g.
previously you could have node label
"feature.node.kubernetes.io/local-foo: bar" but in the NodeFeatureRule
you'd need to use the unprefixed name "local-foo" or the fully
prefixed name, depending on what was specified in the feature file (or
hook) on the node(s).
NOTE: setting autoDefaultNs to false is a breaking change for users who
rely on automatic prefixing with the default feature.node.kubernetes.io/
namespace. NodeFeatureRules, feature files, hooks and custom rules
(configuration of the "custom" source of nfd-worker) will need to be
altered. Unprefixed labels, annoations and extended resources will be
denied by nfd-master.
2023-11-08 09:51:19 +02:00
|
|
|
## autoDefaultNs
|
|
|
|
|
|
|
|
The `autoDefaultNs` option controls the automatic prefixing of names. When set
|
|
|
|
to true (the default in {{ site.version }}) nfd-master automatically adds the
|
|
|
|
default `feature.node.kubernetes.io/` prefix to unprefixed labels, annotations
|
|
|
|
and extended resources - this is also the default behavior in NFD v0.13 and
|
|
|
|
earlier. When the option is set to `false`, no prefix will be prepended to
|
|
|
|
unprefixed names, effectively causing them to be filtered out (as NFD does not
|
|
|
|
currently allow unprefixed names of labels, annotations or extended resources).
|
|
|
|
The default will be changed to `false` in a future release.
|
|
|
|
|
|
|
|
For example, with the `autoDefaultNs` set to `true`, a NodeFeatureRule with
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
labels:
|
|
|
|
foo: bar
|
|
|
|
```
|
|
|
|
|
|
|
|
Will turn into `feature.node.kubernetes.io/foo=bar` node label. With
|
|
|
|
`autoDefaultNs` set to `false`, no prefix is added and the label will be
|
|
|
|
filtered out.
|
|
|
|
|
|
|
|
Note that taint keys are not affected by this option.
|
|
|
|
|
|
|
|
Default: `true`
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
autoDefaultNs: false
|
|
|
|
```
|
|
|
|
|
2023-03-05 22:56:46 +01:00
|
|
|
## resourceLabels
|
2023-04-13 11:14:43 +03:00
|
|
|
|
|
|
|
**DEPRECATED**: [NodeFeatureRule](../usage/custom-resources.md#nodefeaturerule)
|
|
|
|
should be used for managing extended resources in NFD.
|
|
|
|
|
2023-03-05 22:56:46 +01:00
|
|
|
The `resourceLabels` option specifies a list of features to be
|
|
|
|
advertised as extended resources instead of labels. Features that have integer
|
|
|
|
values can be published as Extended Resources by listing them in this option.
|
|
|
|
|
|
|
|
Default: *empty*
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
resourceLabels: ["vendor-1.com/feature-1","vendor-2.io/feature-2"]
|
|
|
|
```
|
|
|
|
|
|
|
|
## enableTaints
|
|
|
|
`enableTaints` enables/disables node tainting feature of NFD.
|
|
|
|
|
|
|
|
Default: *false*
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
enableTaints: true
|
|
|
|
```
|
|
|
|
|
|
|
|
## labelWhiteList
|
|
|
|
`labelWhiteList` specifies a regular expression for filtering feature
|
|
|
|
labels based on their name. Each label must match against the given reqular
|
|
|
|
expression in order to be published.
|
|
|
|
|
2023-08-03 13:38:07 +03:00
|
|
|
> ** NOTE:** The regular expression is only matches against the "basename" part
|
|
|
|
> of the label, i.e. to the part of the name after '/'. The label namespace is
|
|
|
|
> omitted.
|
2023-03-05 22:56:46 +01:00
|
|
|
|
|
|
|
Default: *empty*
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
labelWhiteList: "foo"
|
|
|
|
```
|
2023-04-15 16:11:59 +01:00
|
|
|
|
2023-05-05 12:01:32 +02:00
|
|
|
## resyncPeriod
|
2023-04-15 16:11:59 +01:00
|
|
|
|
|
|
|
The `resyncPeriod` option specifies the NFD API controller resync period.
|
|
|
|
The resync means nfd-master replaying all NodeFeature and NodeFeatureRule objects,
|
|
|
|
thus effectively re-syncing all nodes in the cluster (i.e. ensuring labels, annotations,
|
|
|
|
extended resources and taints are in place).
|
|
|
|
Only has effect when the [NodeFeature](../usage/custom-resources.md#nodefeature)
|
|
|
|
CRD API has been enabled with [`-enable-nodefeature-api`](master-commandline-reference.md#-enable-nodefeature-api).
|
|
|
|
|
|
|
|
Default: 1 hour.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
```yaml
|
2023-05-05 12:01:32 +02:00
|
|
|
resyncPeriod: 2h
|
|
|
|
```
|
|
|
|
|
|
|
|
## leaderElection
|
|
|
|
|
|
|
|
The `leaderElection` section exposes configuration to tweak leader election.
|
|
|
|
|
|
|
|
### leaderElection.leaseDuration
|
|
|
|
|
|
|
|
`leaderElection.leaseDuration` is the duration that non-leader candidates will
|
|
|
|
wait to force acquire leadership. This is measured against time of
|
|
|
|
last observed ack.
|
|
|
|
|
|
|
|
A client needs to wait a full LeaseDuration without observing a change to
|
|
|
|
the record before it can attempt to take over. When all clients are
|
|
|
|
shutdown and a new set of clients are started with different names against
|
|
|
|
the same leader record, they must wait the full LeaseDuration before
|
|
|
|
attempting to acquire the lease. Thus LeaseDuration should be as short as
|
|
|
|
possible (within your tolerance for clock skew rate) to avoid a possible
|
|
|
|
long waits in the scenario.
|
|
|
|
|
|
|
|
Default: 15 seconds.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
leaderElection:
|
|
|
|
leaseDurtation: 15s
|
|
|
|
```
|
|
|
|
|
|
|
|
### leaderElection.renewDeadline
|
|
|
|
|
|
|
|
`leaderElection.renewDeadline` is the duration that the acting master will retry
|
|
|
|
refreshing leadership before giving up.
|
|
|
|
|
|
|
|
This value has to be lower than leaseDuration and greater than retryPeriod*1.2.
|
|
|
|
|
|
|
|
Default: 10 seconds.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
leaderElection:
|
|
|
|
renewDeadline: 10s
|
|
|
|
```
|
|
|
|
|
|
|
|
### leaderElection.retryPeriod
|
|
|
|
|
|
|
|
`leaderElection.retryPeriod` is the duration the LeaderElector clients should wait
|
|
|
|
between tries of actions.
|
|
|
|
|
|
|
|
It has to be greater than 0.
|
|
|
|
|
|
|
|
Default: 2 seconds.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
leaderElection:
|
|
|
|
retryPeriod: 2s
|
2023-04-15 16:11:59 +01:00
|
|
|
```
|
2023-05-13 20:03:53 +01:00
|
|
|
|
2023-09-06 15:36:15 +01:00
|
|
|
## nfdApiParallelism
|
2023-05-13 20:03:53 +01:00
|
|
|
|
|
|
|
The `nfdApiParallelism` option can be used to specify the maximum
|
|
|
|
number of concurrent node updates.
|
|
|
|
|
|
|
|
It takes effect only when `-enable-nodefeature-api` has been set.
|
|
|
|
|
|
|
|
Default: 10
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
nfdApiParallelism: 1
|
|
|
|
```
|
2023-09-06 15:36:15 +01:00
|
|
|
|
|
|
|
## klog
|
|
|
|
|
|
|
|
The following options specify the logger configuration. Most of which can be
|
|
|
|
dynamically adjusted at run-time.
|
|
|
|
|
|
|
|
> **NOTE:** The logger options can also be specified via command line flags
|
|
|
|
> which take precedence over any corresponding config file options.
|
|
|
|
|
|
|
|
### klog.addDirHeader
|
|
|
|
|
|
|
|
If true, adds the file directory to the header of the log messages.
|
|
|
|
|
|
|
|
Default: `false`
|
|
|
|
|
|
|
|
Run-time configurable: yes
|
|
|
|
|
|
|
|
### klog.alsologtostderr
|
|
|
|
|
|
|
|
Log to standard error as well as files.
|
|
|
|
|
|
|
|
Default: `false`
|
|
|
|
|
|
|
|
Run-time configurable: yes
|
|
|
|
|
|
|
|
### klog.logBacktraceAt
|
|
|
|
|
|
|
|
When logging hits line file:N, emit a stack trace.
|
|
|
|
|
|
|
|
Default: *empty*
|
|
|
|
|
|
|
|
Run-time configurable: yes
|
|
|
|
|
|
|
|
### klog.logDir
|
|
|
|
|
|
|
|
If non-empty, write log files in this directory.
|
|
|
|
|
|
|
|
Default: *empty*
|
|
|
|
|
|
|
|
Run-time configurable: no
|
|
|
|
|
|
|
|
### klog.logFile
|
|
|
|
|
|
|
|
If non-empty, use this log file.
|
|
|
|
|
|
|
|
Default: *empty*
|
|
|
|
|
|
|
|
Run-time configurable: no
|
|
|
|
|
|
|
|
### klog.logFileMaxSize
|
|
|
|
|
|
|
|
Defines the maximum size a log file can grow to. Unit is megabytes. If the
|
|
|
|
value is 0, the maximum file size is unlimited.
|
|
|
|
|
|
|
|
Default: `1800`
|
|
|
|
|
|
|
|
Run-time configurable: no
|
|
|
|
|
|
|
|
### klog.logtostderr
|
|
|
|
|
|
|
|
Log to standard error instead of files
|
|
|
|
|
|
|
|
Default: `true`
|
|
|
|
|
|
|
|
Run-time configurable: yes
|
|
|
|
|
|
|
|
### klog.skipHeaders
|
|
|
|
|
|
|
|
If true, avoid header prefixes in the log messages.
|
|
|
|
|
|
|
|
Default: `false`
|
|
|
|
|
|
|
|
Run-time configurable: yes
|
|
|
|
|
|
|
|
### klog.skipLogHeaders
|
|
|
|
|
|
|
|
If true, avoid headers when opening log files.
|
|
|
|
|
|
|
|
Default: `false`
|
|
|
|
|
|
|
|
Run-time configurable: no
|
|
|
|
|
|
|
|
### klog.stderrthreshold
|
|
|
|
|
|
|
|
Logs at or above this threshold go to stderr (default 2)
|
|
|
|
|
|
|
|
Run-time configurable: yes
|
|
|
|
|
|
|
|
### klog.v
|
|
|
|
|
|
|
|
Number for the log level verbosity.
|
|
|
|
|
|
|
|
Default: `0`
|
|
|
|
|
|
|
|
Run-time configurable: yes
|
|
|
|
|
|
|
|
### klog.vmodule
|
|
|
|
|
|
|
|
Comma-separated list of `pattern=N` settings for file-filtered logging.
|
|
|
|
|
|
|
|
Default: *empty*
|
|
|
|
|
|
|
|
Run-time configurable: yes
|