To run our Kubernetes installation for Windows, follow the steps below to:
- Check the compatibility and requirements.
- Update the manifest file.
- Learn about the limitations of the integration.
When using containers in Windows, the container host version and the container image version must be the same. Our Kubernetes integration supports Windows versions 1809 and 1909.
To check your Windows version:
Open a command window.
Run the following command:Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /vReleaseIdcmd.exe
$ kubectl exec -it busybox1-766bb4d6cc-rmsnj -- Reg Query"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersionReleaseId REG_SZ 1809
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):
Install kube-state-metrics and run it in your cluster using this snippet:curl -L -o kube-state-metrics-1.9.5.ziphttps://github.com/kubernetes/kube-state-metrics/archive/v1.9.5.zip &&unzip kube-state-metrics-1.9.5.zip && kubectl apply -fkube-state-metrics-1.9.5/examples/standard
values.ymlfile with the follow data to be used by Helm:global:licenseKey: <YOUR_LICENSE_KEY>cluster: <YOUR_CLUSTER_NAME>enableLinux: falseenableWindows: truewindowsOsList:- version: 1809imageTag: 2.2.0-windows-1809-alphabuildNumber: 10.0.17763- version: 2004imageTag: 2.2.0-windows-2004-alphabuildNumber: 10.0.19041
Install the integration with:helm install <YOUR_INSTALL_NAME> newrelic/newrelic-infrastructure -f values.yml
Confirm that the
DaemonSethas been created successfully by looking for
newrelic-infrain the results generated by this command:kubectl get daemonsets
The Helm chart will create one DeamonSet per each version of Windows that is in the list and use NodeSelector to deploy the corresponding Pod per Node.
The following limitations apply to the Kubernetes integration for Windows:
- The Windows agent only sends the Kubernetes samples (
ProcessSampleare not generated.
- Some Kubernetes metrics are missing because the Windows kubelet doesn’t have them:
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
net.errorsPerSecond: not sent
net.rxBytesPerSecond: not sent
net.txBytesPerSecond: not sent
containerID: not sent
containerImageID: not sent
memoryUsedBytes: in the UI, this is displayed in the pod card that appears when you click on a pod, and will show no data. We will soon fix this by updating our charts to use
fsUsedBytes: zero, so
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/summaryendpoint. 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:
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
TIMEOUTconfig option. You can see if you're being affected by this problem by enabling verbose logs and looking for messages of the type:
error querying Kubelet. Get "https://<KUBELET_IP>/stats/summary": context deadline exceeded (Client.Timeout exceeded while awaiting headers)