• /
  • EnglishEspañol日本語한국어Português
  • Log inStart now

Installation on Windows

preview

We're still working on this feature, but we'd love for you to try it out!

This feature is currently provided as part of a preview program pursuant to our pre-release policies.

Use this option when you've a Windows-based Kubernetes system. Note that Windows integration has several limitations.

Compatibility and requirements

Before you install the Kubernetes integration, review the compatibility and 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:

bash
$
Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v
$
ReleaseIdcmd.exe

Install Kubernetes on 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:

bash
$
helm repo add newrelic https://helm-charts.newrelic.com

Create a namespace for newrelic

Run this command to create a namespace for newrelic:

bash
$
kubectl create namespace newrelic

Install kube-state-metrics

Run this command to install kube-state-metrics:

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

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.

Create a values-newrelic.yaml file

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

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:

bash
$
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:

bash
$
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

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

Run this command:

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

You should see something like this:

bash
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
ReleaseId REG_SZ 1809

For a useful mapping between release IDs and OS versions, see here.

Limitations to the Kubernetes integration for Windows

The Windows agent only sends the Kubernetes samples, such as K8sNodeSample or K8sPodSample. These limitations apply to the Kubernetes integration for Windows:

  • SystemSample, StorageSample, NetworkSample, and ProcessSample are not generated.
  • Some Kubernetes 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

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

  • Issue 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 and looking for messages of the type:

    bash
    error querying Kubelet. Get "https://<KUBELET_IP>/stats/summary": error calling kubelet endpoint. Got status code: 500
  • Issue 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. You can see if you're being affected by this problem by enabling verbose logs and looking for messages of the type:

    bash
    error querying Kubelet. Get "https://<KUBELET_IP>/stats/summary": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
Copyright © 2024 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.