---
title: Installation on Windows - v2
source: https://docs.newrelic.com/docs/kubernetes-pixie/kubernetes-integration/advanced-configuration/k8s-version2/kubernetes-windows
---

> #### ⚠️ IMPORTANT
>
> **Windows node monitoring is now generally available (GA) in New Relic Kubernetes integration v3.** The v2 installation approach described on this page is deprecated and will be removed in a future release. Use the [Kubernetes integration installation guide](/install/kubernetes) for current installation instructions, which support Windows nodes natively.

Use this option when you have a Windows-based Kubernetes system. Note that Windows integration has several [limitations](#k8-windows-limitations).

## Compatibility and requirements [#compatibility-requirements]

Before you install the [Kubernetes integration](https://docs.newrelic.com/docs/integrations/kubernetes-integration/get-started/introduction-kubernetes-integration), review the [compatibility and requirements](https://docs.newrelic.com/docs/integrations/kubernetes-integration/get-started/kubernetes-integration-compatibility-requirements).

> #### ⚠️ IMPORTANT
>
> When using containers in Windows, the container host version and the container image version must be the same. Our Kubernetes integration can run on Windows versions LTSC 2019 (1809), 20H2, and LTSC 2022.

To check your Windows version, open a command window, and run this command:

```shell
Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v
ReleaseIdcmd.exe
```

## Install Kubernetes on Windows [#install-windows]

You can install the Kubernetes integration for Windows using Helm. See an example on how to install the integration in a cluster with nodes having different build versions of Windows (1809 and 2004):

### Add the New Relic Helm repository

If you haven't done so before, run this command to add the New Relic Helm repository:

````shell
helm repo add newrelic https://helm-charts.newrelic.com
```

````

### Create a namespace for newrelic

Run this command to create a namespace for newrelic:

````shell
kubectl create namespace newrelic
```

````

### Install `kube-state-metrics`

Run this command to install `kube-state-metrics`:

````shell
helm repo add ksm https://kubernetes.github.io/kube-state-metrics
helm install ksm ksm/kube-state-metrics --version 2.13.2
```

<Callout variant="important">
  This command is for installing `kube-state-metrics`, a mandatory dependency of the integration, on a Linux node. We don't support installing this for non-Linux nodes, and if you install it on a non-Linux node, deployment might fail. We recommend using `nodeSelector` to choose a Linux node. This can be done by editing `kube-state-metrics` deployment.
</Callout>

````

### Create a `values-newrelic.yaml` file

Create a `values-newrelic.yaml` file with the following data. This is what Helm will use:

````yaml
global:
  licenseKey: YOUR_NEW_RELIC_LICENSE_KEY
  cluster: K8S_CLUSTER_NAME

  enableLinux: true                   # Set to true if your cluster also has linux nodes
  enableWindows: true
  windowsOsList:
    - version: 2019                   # Human-readable version identifier
      imageTag: 2-windows-1809-alpha  # Tag to be used for nodes running the windows version above
      buildNumber: 10.0.17763         # Build number for your nodes running the version above. Used as a selector.
    - version: 20h2
      imageTag: 2-windows-20H2-alpha
      buildNumber: 10.0.19042
    - version: 2022
      imageTag: 2-windows-ltsc2022-alpha
      buildNumber: 10.0.20348
  nodeSelector:
    kubernetes.io/os: linux           # Selector for Linux installation.
  windowsNodeSelector:
    kubernetes.io/os: windows         # Selector for Windows installation.
```

````

### Install the integration

Run this command to install the integration:

````shell
helm upgrade --install newrelic newrelic/newrelic-infrastructure \
  --namespace newrelic --create-namespace \
  --version 2.7.2 \
  -f values-newrelic.yaml
```

````

### Verify pods

Verify that pods deploy and reach a stable state:

````shell
kubectl -n newrelic get pods -w
```

The Helm chart will create one `DaemonSet` per each version of Windows that is in the list and use `NodeSelector` to deploy the corresponding pod per node.

````

## Example: Get Kubernetes for Windows from a BusyBox container [#example-busybox]

This is an example of how you can get Kubernetes for Windows from a BusyBox container.

Run this command:

```shell
kubectl exec -it busybox1-766bb4d6cc-rmsnj -- Reg Query
"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId
```

You should see something like this:

```shell
[output] HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
[output] ReleaseId	REG_SZ	1809
```

For a useful mapping between release IDs and OS versions, see [here](https://hub.docker.com/_/microsoft-windows-servercore).

## Limitations to the Kubernetes integration for Windows [#k8-windows-limitations]

The Windows agent only sends the [Kubernetes samples](https://docs.newrelic.com/docs/kubernetes-pixie/kubernetes-integration/understand-use-data/find-use-your-kubernetes-data/#event-types), such as `K8sNodeSample` or `K8sPodSample`. These limitations apply to the Kubernetes integration for Windows:

-   `SystemSample`, `StorageSample`, `NetworkSample`, and `ProcessSample` aren't generated.
-   Some [Kubernetes metrics](https://docs.newrelic.com/docs/integrations/kubernetes-integration/understand-use-data/understand-use-data#metrics) are missing because the Windows kubelet doesn't have them:
    -   Node:
        -   `fsInodes`: not sent
        -   `fsInodesFree`: not sent
        -   `fsInodesUsed`: not sent
        -   `memoryMajorPageFaultsPerSecond`: always returns zero as a value
        -   `memoryPageFaults`: always returns zero as a value
        -   `memoryRssBytes`: always returns zero as a value
        -   `runtimeInodes`: not sent
        -   `runtimeInodesFree`: not sent
        -   `runtimeInodesUsed`: not sent
    -   Pod:
        -   `net.errorsPerSecond`: not sent
        -   `net.rxBytesPerSecond`: not sent
        -   `net.txBytesPerSecond`: not sent
    -   Container:
        -   `containerID`: not sent
        -   `containerImageID`: not sent
        -   `memoryUsedBytes`: In the UI, this is shown in the pod card that appears when you click on a Pod and shows no data. We will soon fix this by updating our charts to use `memoryWorkingSetBytes` instead.
    -   Volume:
        -   `fsUsedBytes`: zero, so `fsUsedPercent` is zero

## Known issues with the Windows Kubelet [#known-issues]

There are a couple of issues with the Windows version of Kubelet that can prevent the integration from fetching data:

-   [Issue 90554:](https://github.com/kubernetes/kubernetes/pull/90554) This issue makes the Kubelet return 500 errors when the integration makes a request to the `/stats/summary` endpoint. It will be included in the Kubernetes 1.19 release and has been backported to the releases 1.16.11, 1.17.7, and 1.18.4. There is no solution on the integration side for this problem, we advise you to update to one of the patch versions as soon as possible. You can see if you're being affected by this problem by [enabling verbose logs](https://docs.newrelic.com/docs/kubernetes-pixie/kubernetes-integration/advanced-configuration/get-logs-version/#verbose-logging) and looking for messages of the type:

    ```shell
    [output] error querying Kubelet. Get "https://<KUBELET_IP>/stats/summary": error calling kubelet endpoint. Got status code: 500
    ```

-   [Issue 87730:](https://github.com/kubernetes/kubernetes/pull/87730) This issue makes the Kubelet metrics very slow when running minimal load. It makes the integration fail with a timeout error. A patch for this issue has been added for Kubernetes 1.18 and backported to 1.15.12, 1.16.9, and 1.17.5. We advise you to update to one of the patch versions as soon as possible. To mitigate this issue you can increase the integration timeout with the [`TIMEOUT` config option](https://docs.newrelic.com/docs/integrations/kubernetes-integration/installation/kubernetes-integration-install-configure#kube-state-metrics-timeout-change). You can see if you're being affected by this problem by [enabling verbose logs](https://docs.newrelic.com/docs/kubernetes-pixie/kubernetes-integration/advanced-configuration/get-logs-version/#verbose-logging) and looking for messages of the type:

    ```shell
    [output] error querying Kubelet. Get "https://<KUBELET_IP>/stats/summary": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
    ```
