# Node Exporter

[Node Exporter](https://github.com/prometheus/node_exporter) is a Prometheus exporter for hardware and OS metrics exposed by *NIX kernels, written in Go with pluggable metric collectors.

## TL;DR

```bash
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm install my-release bitnami/node-exporter
```

## Introduction

This chart bootstraps [Node Exporter](https://github.com/bitnami/bitnami-docker-node-exporter) on [Kubernetes](http://kubernetes.io) using the [Helm](https://helm.sh) package manager.

Bitnami charts can be used with [Kubeapps](https://kubeapps.com/) for deployment and management of Helm Charts in clusters.

## Prerequisites

- Kubernetes 1.12+
- Helm 2.12+ or Helm 3.0+

## Installing the Chart

Add the `bitnami` charts repo to Helm:

```bash
$ helm repo add bitnami https://charts.bitnami.com/bitnami
```

To install the chart with the release name `my-release`:

```bash
$ helm install my-release bitnami/node-exporter
```

The command deploys Node Exporter on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation.

## Uninstalling the Chart

To uninstall/delete the `my-release` release:

```bash
$ helm delete my-release
```

The command removes all the Kubernetes components associated with the chart and deletes the release.

## Parameters

The following table lists the configurable parameters of the Node Exporter chart and their default values.

| Parameter                               | Description                                                                                              | Default                                                                   |
|-----------------------------------------|----------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------|
| `global.imageRegistry`                  | Global Docker image registry                                                                             | `nil`                                                                     |
| `global.imagePullSecrets`               | Global Docker registry secret names as an array                                                          | `[]` (does not add image pull secrets to deployed pods)                   |
| `global.storageClass`                   | Global storage class for dynamic provisioning                                                            | `nil`                                                                     |
| `global.labels`                         | Additional labels to apply to all resource                                                               | `{}`                                                                      |
| `nameOverride`                          | String to partially override `node-exporter.name` template with a string (will prepend the release name) | `nil`                                                                     |
| `fullnameOverride`                      | String to fully override `node-exporter.fullname` template with a string                                 | `nil`                                                                     |
| `rbac.create`                           | Wether to create & use RBAC resources or not                                                             | `true`                                                                    |
| `rbac.apiVersion`                       | Version of the RBAC API                                                                                  | `v1beta1`                                                                 |
| `rbac.pspEnabled`                       | PodSecurityPolicy                                                                                        | `true`                                                                    |
| `serviceAccount.create`                 | Specify whether to create a ServiceAccount for Node Exporter                                             | `true`                                                                    |
| `serviceAccount.name`                   | The name of the ServiceAccount to create                                                                 | Generated using the `node-exporter.fullname` template                     |
| `image.registry`                        | Node Exporter image registry                                                                             | `docker.io`                                                               |
| `image.repository`                      | Node Exporter Image name                                                                                 | `bitnami/node-exporter`                                                   |
| `image.tag`                             | Node Exporter Image tag                                                                                  | `{TAG_NAME}`                                                              |
| `image.pullPolicy`                      | Node Exporter image pull policy                                                                          | `IfNotPresent`                                                            |
| `image.pullSecrets`                     | Specify docker-registry secret names as an array                                                         | `[]` (does not add image pull secrets to deployed pods)                   |
| `extraArgs`                             | Additional command line arguments to pass to node-exporter                                               | `{}`                                                                      |
| `extraVolumes`                          | Additional volumes to the node-exporter pods                                                             | `{}`                                                                      |
| `extraVolumeMounts`                     | Additional volumeMounts to the node-exporter container                                                   | `{}`                                                                      |
| `securityContext.enabled`               | Enable security context                                                                                  | `true`                                                                    |
| `securityContext.runAsUser`             | User ID for the container                                                                                | `1001`                                                                    |
| `securityContext.fsGroup`               | Group ID for the container filesystem                                                                    | `1001`                                                                    |
| `service.type`                          | Kubernetes service type                                                                                  | `ClusterIP`                                                               |
| `service.port`                          | Node Exporter service port                                                                               | `9100`                                                                    |
| `service.targetPort`                    | Node Exporter container target port                                                                      | `9100`                                                                    |
| `service.clusterIP`                     | Specific cluster IP when service type is cluster IP. Use `None` for headless service                     | `nil`                                                                     |
| `service.nodePort`                      | Kubernetes Service nodePort                                                                              | `nil`                                                                     |
| `service.loadBalancerIP`                | `loadBalancerIP` if service type is `LoadBalancer`                                                       | `nil`                                                                     |
| `service.loadBalancerSourceRanges`      | Address that are allowed when svc is `LoadBalancer`                                                      | `[]`                                                                      |
| `service.addPrometheusScrapeAnnotation` | Add the `prometheus.io/scrape: "true"` annotation to the service                                         | `true`                                                                    |
| `service.annotations`                   | Additional annotations for Node Exporter service                                                         | `{}`                                                                      |
| `service.labels`                        | Additional labels for Node Exporter service                                                              | `{}`                                                                      |
| `updateStrategy`                        | The update strategy to apply to the DaemonSet                                                            | `{ "type": "RollingUpdate", "rollingUpdate": { "maxUnavailable": "1" } }` |
| `hostNetwork`                           | Expose the service to the host network                                                                   | `true`                                                                    |
| `minReadySeconds`                       | `minReadySeconds` to avoid killing pods before we are ready                                              | `0`                                                                       |
| `priorityClassName`                     | Priority class assigned to the Pods                                                                      | `nil`                                                                     |
| `resources`                             | Resource requests/limit                                                                                  | `{}`                                                                      |
| `podLabels`                             | Pod labels                                                                                               | `{}`                                                                      |
| `podAnnotations`                        | Pod annotations                                                                                          | `{}`                                                                      |
| `affinity`                              | Map of node/pod affinities                                                                               | `{} (The value is evaluated as a template)`                               |
| `nodeSelector`                          | Node labels for pod assignment (this value is evaluated as a template)                                   | `{} (The value is evaluated as a template)`                               |
| `tolerations`                           | List of node taints to tolerate (this value is evaluated as a template)                                  | `[] (The value is evaluated as a template)`                               |
| `livenessProbe.enabled`                 | Turn on and off liveness probe                                                                           | `true`                                                                    |
| `livenessProbe.initialDelaySeconds`     | Delay before liveness probe is initiated                                                                 | `120`                                                                     |
| `livenessProbe.periodSeconds`           | How often to perform the probe                                                                           | `10`                                                                      |
| `livenessProbe.timeoutSeconds`          | When the probe times out                                                                                 | `5`                                                                       |
| `livenessProbe.failureThreshold`        | Minimum consecutive failures for the probe                                                               | `6`                                                                       |
| `livenessProbe.successThreshold`        | Minimum consecutive successes for the probe                                                              | `1`                                                                       |
| `readinessProbe.enabled`                | Turn on and off readiness probe                                                                          | `true`                                                                    |
| `readinessProbe.initialDelaySeconds`    | Delay before readiness probe is initiated                                                                | `30`                                                                      |
| `readinessProbe.periodSeconds`          | How often to perform the probe                                                                           | `10`                                                                      |
| `readinessProbe.timeoutSeconds`         | When the probe times out                                                                                 | `5`                                                                       |
| `readinessProbe.failureThreshold`       | Minimum consecutive failures for the probe                                                               | `6`                                                                       |
| `readinessProbe.successThreshold`       | Minimum consecutive successes for the probe                                                              | `1`                                                                       |
| `serviceMonitor.enabled`                | Creates a ServiceMonitor to monitor Node Exporter                                                        | `false`                                                                   |
| `serviceMonitor.namespace`              | Namespace in which Prometheus is running                                                                 | `nil`                                                                     |
| `serviceMonitor.interval`               | Scrape interval (use by default, falling back to Prometheus' default)                                    | `nil`                                                                     |
| `serviceMonitor.jobLabel`               | The name of the label on the target service to use as the job name in prometheus.                        | `nil`                                                                     |
| `serviceMonitor.selector`               | ServiceMonitor selector labels                                                                           | `[]`                                                                      |
| `serviceMonitor.relabelings`            | ServiceMonitor relabelings                                                                               | `[]`                                                                      |
| `serviceMonitor.metricRelabelings`      | ServiceMonitor metricRelabelings                                                                         | `[]`                                                                      |

Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example the following command sets the `minReadySeconds` of the Node Exporter Pods to `120` seconds.

```bash
$ helm install my-release --set minReadySeconds=120 bitnami/node-exporter
```

Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,

```bash
$ helm install my-release -f values.yaml bitnami/node-exporter
```

> **Tip**: You can use the default [values.yaml](values.yaml)

## Configuration and installation details

### [Rolling VS Immutable tags](https://docs.bitnami.com/containers/how-to/understand-rolling-tags-containers/)

It is strongly recommended to use immutable tags in a production environment. This ensures your deployment does not change automatically if the same tag is updated with a different image.

Bitnami will release a new chart updating its containers if a new version of the main container, significant changes, or critical vulnerabilities exist.

## Upgrading

```bash
$ helm upgrade my-release bitnami/node-exporter
```
