2022-11-02 12:34:37 +00:00
---
title: "Helm"
layout: default
sort: 3
---
# Deployment with Helm
{: .no_toc}
## Table of contents
{: .no_toc .text-delta}
1. TOC
{:toc}
---
Node Feature Discovery Helm chart allow to easily deploy and manage NFD.
2023-08-03 10:38:07 +00:00
> **NOTE:** NFD is not ideal for other Helm charts to depend on as that may
> result in multiple parallel NFD deployments in the same cluster which is not
> fully supported by the NFD Helm chart.
2022-12-20 13:14:41 +00:00
2022-11-02 12:34:37 +00:00
## Prerequisites
[Helm package manager ](https://helm.sh/ ) should be installed.
## Deployment
To install the latest stable version:
```bash
export NFD_NS=node-feature-discovery
helm repo add nfd https://kubernetes-sigs.github.io/node-feature-discovery/charts
helm repo update
helm install nfd/node-feature-discovery --namespace $NFD_NS --create-namespace --generate-name
```
To install the latest development version you need to clone the NFD Git
repository and install from there.
```bash
git clone https://github.com/kubernetes-sigs/node-feature-discovery/
cd node-feature-discovery/deployment/helm
export NFD_NS=node-feature-discovery
helm install node-feature-discovery ./node-feature-discovery/ --namespace $NFD_NS --create-namespace
```
See the [configuration ](#configuration ) section below for instructions how to
alter the deployment parameters.
2023-01-12 01:23:36 +00:00
In order to deploy the [minimal ](image-variants.md#minimal ) image you need to
2022-11-02 12:34:37 +00:00
override the image tag:
```bash
helm install node-feature-discovery ./node-feature-discovery/ --set image.tag={{ site.release }}-minimal --namespace $NFD_NS --create-namespace
```
## Configuration
You can override values from `values.yaml` and provide a file with custom values:
```bash
export NFD_NS=node-feature-discovery
helm install nfd/node-feature-discovery -f < path / to / custom / values . yaml > --namespace $NFD_NS --create-namespace
```
To specify each parameter separately you can provide them to helm install command:
```bash
export NFD_NS=node-feature-discovery
helm install nfd/node-feature-discovery --set nameOverride=NFDinstance --set master.replicaCount=2 --namespace $NFD_NS --create-namespace
```
## Uninstalling the chart
To uninstall the `node-feature-discovery` deployment:
```bash
export NFD_NS=node-feature-discovery
helm uninstall node-feature-discovery --namespace $NFD_NS
```
The command removes all the Kubernetes components associated with the chart and
deletes the release.
## Chart parameters
In order to tailor the deployment of the Node Feature Discovery to your cluster needs
We have introduced the following Chart parameters.
### General parameters
| Name | Type | Default | description |
| ---- | ---- | ------- | ----------- |
| `image.repository` | string | `{{ site.container_image | split: ":" | first }}` | NFD image repository |
| `image.tag` | string | `{{ site.release }}` | NFD image tag |
| `image.pullPolicy` | string | `Always` | Image pull policy |
| `imagePullSecrets` | list | [] | ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. [More info ](https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod ) |
| `nameOverride` | string | | Override the name of the chart |
| `fullnameOverride` | string | | Override a default fully qualified app name |
Deprecate gRPC API
Now that the NodeFeature API has been set enabled by default, the gRPC
mode will be deprecated and with it all flags and features around it.
For nfd-master, flags
-port, -key-file, -ca-file, -cert-file, -verify-node-name, -enable-nodefeature-api
are now marked as deprecated.
For nfd-worker flags
-enable-nodefeature-api, -ca-file, -cert-file, -key-file, -server, -server-name-override
are now marked as deprecated.
Deprecated flags, as well as gRPC related code will be removed in future
releases.
Signed-off-by: Carlos Eduardo Arango Gutierrez <eduardoa@nvidia.com>
Co-authored-by: Markus Lehtonen <markus.lehtonen@intel.com>
2023-09-06 08:22:13 +00:00
| `tls.enable` | bool | false | Specifies whether to use TLS for communications between components. **NOTE** : this parameter is related to the deprecated gRPC API and will be removed with it in a future release |
| `tls.certManager` | bool | false | If enabled, requires [cert-manager ](https://cert-manager.io/docs/ ) to be installed and will automatically create the required TLS certificates. **NOTE** : this parameter is related to the deprecated gRPC API and will be removed with it in a future release |
| `enableNodeFeatureApi` | bool | true | Enable the [NodeFeature ](../usage/custom-resources.md#nodefeature ) CRD API for communicating node features. This will automatically disable the gRPC communication. **NOTE** : this parameter is related to the deprecated gRPC API and will be removed with it in a future release |
2023-06-06 14:39:02 +00:00
| `prometheus.enable` | bool | false | Specifies whether to expose metrics using prometheus operator |
2023-07-21 14:20:43 +00:00
| `prometheus.labels` | dict | {} | Specifies labels for use with the prometheus operator to control how it is selected |
2023-06-06 14:39:02 +00:00
Metrics are configured to be exposed using prometheus operator API's by
default. If you want to expose metrics using the prometheus operator
API's you need to install the prometheus operator in your cluster.
2022-11-02 12:34:37 +00:00
### Master pod parameters
| Name | Type | Default | description |
|-----------------------------|---------|-----------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|
| `master.*` | dict | | NFD master deployment configuration |
Deprecate gRPC API
Now that the NodeFeature API has been set enabled by default, the gRPC
mode will be deprecated and with it all flags and features around it.
For nfd-master, flags
-port, -key-file, -ca-file, -cert-file, -verify-node-name, -enable-nodefeature-api
are now marked as deprecated.
For nfd-worker flags
-enable-nodefeature-api, -ca-file, -cert-file, -key-file, -server, -server-name-override
are now marked as deprecated.
Deprecated flags, as well as gRPC related code will be removed in future
releases.
Signed-off-by: Carlos Eduardo Arango Gutierrez <eduardoa@nvidia.com>
Co-authored-by: Markus Lehtonen <markus.lehtonen@intel.com>
2023-09-06 08:22:13 +00:00
| `master.port` | integer | | Specifies the TCP port that nfd-master listens for incoming requests. **NOTE** : this parameter is related to the deprecated gRPC API and will be removed with it in a future release |
2023-06-06 14:39:02 +00:00
| `master.metricsPort` | integer | 8081 | Port on which to expose metrics from components to prometheus operator |
2022-11-02 12:34:37 +00:00
| `master.instance` | string | | Instance name. Used to separate annotation namespaces for multiple parallel deployments |
2023-04-15 15:11:59 +00:00
| `master.resyncPeriod` | string | | NFD API controller resync period. |
2022-11-02 12:34:37 +00:00
| `master.extraLabelNs` | array | [] | List of allowed extra label namespaces |
| `master.resourceLabels` | array | [] | List of labels to be registered as extended resources |
2023-03-17 19:27:50 +00:00
| `master.enableTaints` | bool | false | Specifies whether to enable or disable node tainting |
2022-11-22 09:51:20 +00:00
| `master.crdController` | bool | null | Specifies whether the NFD CRD API controller is enabled. If not set, controller will be enabled if `master.instance` is empty. |
| `master.featureRulesController` | bool | null | DEPRECATED: use `master.crdController` instead |
2022-11-02 12:34:37 +00:00
| `master.replicaCount` | integer | 1 | Number of desired pods. This is a pointer to distinguish between explicit zero and not specified |
| `master.podSecurityContext` | dict | {} | [PodSecurityContext ](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod ) holds pod-level security attributes and common container settings |
| `master.securityContext` | dict | {} | Container [security settings ](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container )|
| `master.serviceAccount.create` | bool | true | Specifies whether a service account should be created
| `master.serviceAccount.annotations` | dict | {} | Annotations to add to the service account
| `master.serviceAccount.name` | string | | The name of the service account to use. If not set and create is true, a name is generated using the fullname template
2022-11-28 15:49:19 +00:00
| `master.rbac.create` | bool | true | Specifies whether to create [RBAC][rbac] configuration for nfd-master
Deprecate gRPC API
Now that the NodeFeature API has been set enabled by default, the gRPC
mode will be deprecated and with it all flags and features around it.
For nfd-master, flags
-port, -key-file, -ca-file, -cert-file, -verify-node-name, -enable-nodefeature-api
are now marked as deprecated.
For nfd-worker flags
-enable-nodefeature-api, -ca-file, -cert-file, -key-file, -server, -server-name-override
are now marked as deprecated.
Deprecated flags, as well as gRPC related code will be removed in future
releases.
Signed-off-by: Carlos Eduardo Arango Gutierrez <eduardoa@nvidia.com>
Co-authored-by: Markus Lehtonen <markus.lehtonen@intel.com>
2023-09-06 08:22:13 +00:00
| `master.service.type` | string | ClusterIP | NFD master service type. **NOTE** : this parameter is related to the deprecated gRPC API and will be removed with it in a future release |
| `master.service.port` | integer | 8080 | NFD master service port. **NOTE** : this parameter is related to the deprecated gRPC API and will be removed with it in a future release |
2022-11-02 12:34:37 +00:00
| `master.resources` | dict | {} | NFD master pod [resources management ](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ ) |
| `master.nodeSelector` | dict | {} | NFD master pod [node selector ](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector ) |
| `master.tolerations` | dict | _Scheduling to master node is disabled_ | NFD master pod [tolerations ](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ ) |
| `master.annotations` | dict | {} | NFD master pod [annotations ](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ ) |
| `master.affinity` | dict | | NFD master pod required [node affinity ](https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/ ) |
| `master.deploymentAnnotations` | dict | {} | NFD master deployment [annotations ](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ ) |
2023-05-13 19:03:53 +00:00
| `master.nfdApiParallelism` | integer | 10 | Specifies the maximum number of concurrent node updates. |
2023-03-05 21:56:46 +00:00
| `master.config` | dict | | NFD master [configuration ](../reference/master-configuration-reference ) |
2022-11-02 12:34:37 +00:00
### Worker pod parameters
| Name | Type | Default | description |
| ---- | ---- | ------- | ----------- |
| `worker.*` | dict | | NFD worker daemonset configuration |
2023-06-06 14:39:02 +00:00
| `worker.metricsPort*` | integer | 8081 | Port on which to expose metrics from components to prometheus operator |
2022-11-02 12:34:37 +00:00
| `worker.config` | dict | | NFD worker [configuration ](../reference/worker-configuration-reference ) |
| `worker.podSecurityContext` | dict | {} | [PodSecurityContext ](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod ) holds pod-level security attributes and common container settings |
| `worker.securityContext` | dict | {} | Container [security settings ](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container ) |
2022-11-28 16:07:17 +00:00
| `worker.serviceAccount.create` | bool | true | Specifies whether a service account for nfd-worker should be created
| `worker.serviceAccount.annotations` | dict | {} | Annotations to add to the service account for nfd-worker
| `worker.serviceAccount.name` | string | | The name of the service account to use for nfd-worker. If not set and create is true, a name is generated using the fullname template (suffixed with `-worker` )
2022-08-12 10:10:48 +00:00
| `worker.rbac.create` | bool | true | Specifies whether to create [RBAC][rbac] configuration for nfd-worker
2022-11-02 12:34:37 +00:00
| `worker.mountUsrSrc` | bool | false | Specifies whether to allow users to mount the hostpath /user/src. Does not work on systems without /usr/src AND a read-only /usr |
| `worker.resources` | dict | {} | NFD worker pod [resources management ](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ ) |
| `worker.nodeSelector` | dict | {} | NFD worker pod [node selector ](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector ) |
| `worker.tolerations` | dict | {} | NFD worker pod [node tolerations ](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ ) |
| `worker.priorityClassName` | string | | NFD worker pod [priority class ](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/ ) |
| `worker.annotations` | dict | {} | NFD worker pod [annotations ](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ ) |
| `worker.daemonsetAnnotations` | dict | {} | NFD worker daemonset [annotations ](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ ) |
### Topology updater parameters
2023-02-21 15:09:04 +00:00
| Name | Type | Default | description |
|-----------------------------------------------|--------|-------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `topologyUpdater.*` | dict | | NFD Topology Updater configuration |
| `topologyUpdater.enable` | bool | false | Specifies whether the NFD Topology Updater should be created |
| `topologyUpdater.createCRDs` | bool | false | Specifies whether the NFD Topology Updater CRDs should be created |
| `topologyUpdater.serviceAccount.create` | bool | true | Specifies whether the service account for topology updater should be created |
| `topologyUpdater.serviceAccount.annotations` | dict | {} | Annotations to add to the service account for topology updater |
| `topologyUpdater.serviceAccount.name` | string | | The name of the service account for topology updater to use. If not set and create is true, a name is generated using the fullname template and `-topology-updater` suffix |
2023-05-05 05:24:42 +00:00
| `topologyUpdater.rbac.create` | bool | true | Specifies whether to create [RBAC][rbac] configuration for topology updater |
2023-08-04 13:17:11 +00:00
| `topologyUpdater.metricsPort` | integer | 8081 | Port on which to expose prometheus metrics |
2023-02-21 15:09:04 +00:00
| `topologyUpdater.kubeletConfigPath` | string | "" | Specifies the kubelet config host path |
| `topologyUpdater.kubeletPodResourcesSockPath` | string | "" | Specifies the kubelet sock path to read pod resources |
| `topologyUpdater.updateInterval` | string | 60s | Time to sleep between CR updates. Non-positive value implies no CR update. |
| `topologyUpdater.watchNamespace` | string | `*` | Namespace to watch pods, `*` for all namespaces |
| `topologyUpdater.podSecurityContext` | dict | {} | [PodSecurityContext ](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod ) holds pod-level security attributes and common container settings |
| `topologyUpdater.securityContext` | dict | {} | Container [security settings ](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container ) |
| `topologyUpdater.resources` | dict | {} | Topology updater pod [resources management ](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ ) |
| `topologyUpdater.nodeSelector` | dict | {} | Topology updater pod [node selector ](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector ) |
| `topologyUpdater.tolerations` | dict | {} | Topology updater pod [node tolerations ](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ ) |
| `topologyUpdater.annotations` | dict | {} | Topology updater pod [annotations ](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ ) |
2023-09-06 13:55:25 +00:00
| `topologyUpdater.daemonsetAnnotations` | dict | {} | Topology updater daemonset [annotations ](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ ) |
2023-02-21 15:09:04 +00:00
| `topologyUpdater.affinity` | dict | {} | Topology updater pod [affinity ](https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/ ) |
| `topologyUpdater.config` | dict | | [configuration ](../reference/topology-updater-configuration-reference ) |
| `topologyUpdater.podSetFingerprint` | bool | false | Enables compute and report of pod fingerprint in NRT objects. |
2023-05-04 08:59:44 +00:00
| `topologyUpdater.kubeletStateDir` | string | /var/lib/kubelet | Specifies kubelet state directory path for watching state and checkpoint files. Empty value disables kubelet state tracking. |
2022-11-28 15:49:19 +00:00
2023-08-18 09:52:41 +00:00
### Garbage collector parameters
2023-01-10 16:50:31 +00:00
| Name | Type | Default | description |
2023-08-18 09:52:41 +00:00
|---------------------------------------|--------|---------|--------------------
| `gc.*` | dict | | NFD Garbage Collector configuration
| `gc.enable` | bool | true | Specifies whether the NFD Garbage Collector should be created
| `gc.serviceAccount.create` | bool | true | Specifies whether the service account for garbage collector should be created
| `gc.serviceAccount.annotations` | dict | {} | Annotations to add to the service account for garbage collector
| `gc.serviceAccount.name` | string | | The name of the service account for garbage collector to use. If not set and create is true, a name is generated using the fullname template and `-gc` suffix
| `gc.rbac.create` | bool | true | Specifies whether to create [RBAC][rbac] configuration for garbage collector
| `gc.interval` | string | 1h | Time between periodic garbage collector runs
| `gc.podSecurityContext` | dict | {} | [PodSecurityContext ](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod ) holds pod-level security attributes and common container settings
| `gc.resources` | dict | {} | Garbage collector pod [resources management ](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ )
| `gc.nodeSelector` | dict | {} | Garbage collector pod [node selector ](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector )
| `gc.tolerations` | dict | {} | Garbage collector pod [node tolerations ](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ )
| `gc.annotations` | dict | {} | Garbage collector pod [annotations ](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ )
2023-09-06 13:55:25 +00:00
| `gc.deploymentAnnotations` | dict | {} | Garbage collector deployment [annotations ](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ )
2023-08-18 09:52:41 +00:00
| `gc.affinity` | dict | {} | Garbage collector pod [affinity ](https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/ )
2023-01-10 16:50:31 +00:00
2022-11-28 15:49:19 +00:00
<!-- Links -->
[rbac]: https://kubernetes.io/docs/reference/access-authn-authz/rbac/