1# -- Override the name of the chart
3# -- Override the full name of the release
5# -- Name of the Kubernetes cluster monitored. Can be configured also with `global.cluster`
7# -- This set this license key to use. Can be configured also with `global.licenseKey`
9# -- In case you don't want to have the license key in you values, this allows you to point to a user created secret to get the key from there. Can be configured also with `global.customSecretName`
11# -- In case you don't want to have the license key in you values, this allows you to point to which secret key is the license key located. Can be configured also with `global.customSecretLicenseKey`
12customSecretLicenseKey: ""
13# -- This chart has support for GKE_AUTOPILOT, if booting in an autopilot cluster, set this to "GKE_AUTOPILOT"
15# -- (bool) Enable EKS Fargate support. When enabled:
16# - The kubelet DaemonSet will be excluded from Fargate nodes via node affinity (eks.amazonaws.com/compute-type != fargate)
17# - The control plane DaemonSet will be completely disabled (control plane metrics are not available on Fargate)
18# - The newrelic-infra-operator should be used to inject the integration as a sidecar into pods running on Fargate nodes
19# Can be configured also with `global.fargate`
22# -- Images used by the chart for the integration and agents.
23# @default -- See `values.yaml`
25 # -- The secrets that are needed to pull images from a custom registry.
28 # -- Image for the New Relic Infrastructure Agent sidecar.
29 # @default -- See `values.yaml`
31 registry: chainreg.biz
32 repository: chainguard-private/newrelic-k8s-events-forwarder
33 tag: latest@sha256:a7d05a2b84925c2d6ff2b43a701a81bf8978936f4559cc96cf42d765ca7cff61
34 pullPolicy: IfNotPresent
35 # -- Image for the New Relic Infrastructure Agent plus integrations.
36 # @default -- See `values.yaml`
38 registry: chainreg.biz
39 repository: chainguard-private/newrelic-infrastructure-bundle
40 tag: latest@sha256:8120ca0e8eafb5d4ece8ea447cbbb6cb1c06e47304fd29d170dd5a98f249c01e
41 pullPolicy: IfNotPresent
42 # -- Image for the New Relic Kubernetes integration.
43 # @default -- See `values.yaml`
45 registry: chainreg.biz
46 repository: chainguard-private/newrelic-kubernetes
47 tag: latest@sha256:704c1e5362d86366e9077506d857f32611d7de12cff169c3dd363a41a711d633
48 pullPolicy: IfNotPresent
49 # -- Image for the New Relic Kubernetes integration - Windows.
50 # @default -- See `values.yaml`
53 repository: newrelic/nri-kubernetes
55 pullPolicy: IfNotPresent
56 # -- Image for the New Relic Infrastructure Agent - Windows.
57 # @default -- See `values.yaml`
60 repository: newrelic/infrastructure-bundle
62 pullPolicy: IfNotPresent
63# -- Enable Windows node monitoring.
66# For every entry in this Windows OS list, we will create an independent DaemonSet which will get deployed
67# on Windows nodes running each specific Windows version and build number. Note that
68# Windows containers can only be executed on hosts running the exact same Windows version and build number,
69# because Kubernetes only supports process isolation and not Hyper-V isolation (as of March 2025).
70# -- Additional configuration for Windows node DaemonSets.
72 # Support for only LTSC2019/LTSC2022
73 # @default -- See `values.yaml`
74 # https://kubernetes.io/docs/setup/production-environment/windows/intro-windows-in-kubernetes/#windows-os-version-support
76 imageTagSuffix: ltsc2019
77 buildNumber: 10.0.17763
83 imageTagSuffix: ltsc2022
84 buildNumber: 10.0.20348
89# Windows-specific configuration
91 # -- (bool) Override privileged mode for Windows nodes.
92 # When null, inherits from global 'privileged' setting.
93 # Set to false to disable HostProcess mode on Windows while keeping Linux privileged.
94 # HostProcess containers run directly on the Windows host (not in a container) and require hostNetwork: true.
97# -- Config that applies to all instances of the solution: kubelet, ksm, control plane and sidecars.
98# @default -- See `values.yaml`
100 # Configuration entries that apply to all instances of the integration: kubelet, ksm and control plane.
102 # common.config.interval -- (duration) Intervals larger than 40s are not supported and will cause the NR UI to not
103 # behave properly. Any non-nil value will override the `lowDataMode` default.
104 # @default -- `15s` (See [Low data mode](README.md#low-data-mode))
106 # -- Config for filtering ksm and kubelet metrics by namespace.
107 namespaceSelector: {}
108 # If you want to include only namespaces with a given label you could do so by adding:
110 # newrelic.com/scrape: true
111 # Otherwise you can build more complex filters and include or exclude certain namespaces by adding one or multiple
112 # expressions that are added, for instance:
114 # - {key: newrelic.com/scrape, operator: NotIn, values: ["false"]}
115 # -- Config for the Infrastructure agent.
116 # Will be used by the forwarder sidecars and the agent running integrations.
117 # See: https://docs.newrelic.com/docs/infrastructure/install-infrastructure-agent/configuration/infrastructure-agent-configuration-settings/
119# lowDataMode -- (bool) Send less data by incrementing the interval from `15s` (the default when `lowDataMode` is `false` or `nil`) to `30s`.
120# Non-nil values of `common.config.interval` will override this value.
121# @default -- `false` (See [Low data mode](README.md#low-data-mode))
123# sink - Configuration for the scraper sink.
126 # -- The amount of time the scraper container to probe infra agent sidecar container before giving up and restarting during pod starts.
128 # -- The amount of time the scraper container to backoff when it fails to probe infra agent sidecar.
130# kubelet -- Configuration for the DaemonSet that collects metrics from the Kubelet.
131# @default -- See `values.yaml`
133 # -- Enable kubelet monitoring.
134 # Advanced users only. Setting this to `false` is not supported and will break the New Relic experience.
136 # Setting this to true will force the kubelet to reach out to the /pods endpoint from the kube service rather than the local node.
137 fetchPodsFromKubeService: false
138 # Overrides the endpoint on the local kubelet that is used to check the pod can connect to the local node's service.
139 testConnectionEndpoint: "/healthz"
141 # -- Tolerations for the kubelet DaemonSet.
142 # @default -- Schedules in all tainted nodes
144 # - operator: "Exists"
145 # effect: "NoSchedule"
146 # - operator: "Exists"
147 # effect: "NoExecute"
150 # Note that the Windows DaemonSet already contains a node selector label based on their OS (kubernetes.io/os: windows).
151 # and build number (node.kubernetes.io/windows-build: {{ .buildNumber }}, to ensure that each version of the DaemonSet
152 # gets deployed only on those Windows nodes running the exact same Windows version and build number. Note that
153 # Windows containers can only be executed on hosts running the exact same Windows version and build number.
154 # -- Node selector for the Windows kubelet DaemonSet.
155 windowsNodeSelector: {}
156 # -- (bool) Sets pod's hostNetwork. When set bypasses global/common variable. Note - does not apply to Windows nodes
157 # @default -- Not set
160 # -- Config for the Infrastructure agent that will forward the metrics to the backend and will run the integrations in this cluster.
161 # It will be merged with the configuration in `.common.agentConfig`. You can see all the agent configurations in
162 # [New Relic docs](https://docs.newrelic.com/docs/infrastructure/install-infrastructure-agent/configuration/infrastructure-agent-configuration-settings/)
163 # e.g. you can set `passthrough_environment` int the [config file](https://docs.newrelic.com/docs/infrastructure/install-infrastructure-agent/configuration/configure-infrastructure-agent/#config-file)
164 # so the agent let use that environment variables to the integrations.
166 # passthrough_environment:
167 # - A_ENVIRONMENT_VARIABLE_SET_IN_extraEnv
168 # - A_ENVIRONMENT_VARIABLE_SET_IN_A_CONFIG_MAP_SET_IN_entraEnvForm
170 # -- Add user environment variables to the agent
172 # -- Add user environment from configMaps or secrets as variables to the agent
174 # -- Volumes to mount in the containers
176 # -- Defines where to mount volumes specified with `extraVolumes`
177 extraVolumeMounts: []
180 # -- Resources for the kubelet scraper container.
181 # @default -- 100m/150M -/300M
189 # -- Resources for the infrastructure-bundle agent sidecar container.
190 # @default -- 100m/150M -/300M
197 # Windows containers have different resource characteristics than Linux; set these
198 # independently of the Linux kubelet.kubelet/agent resource values above.
201 # -- Resources for the Windows kubelet scraper container.
202 # @default -- 100m/150M -/300M
210 # -- Resources for the Windows agent sidecar container.
211 # @default -- 100m/150M -/300M
219 # -- Timeout for the kubelet APIs contacted by the integration
221 # -- Number of retries after timeout expired
223 # -- Max number of scraper rerun when scraper runtime error happens
225 # -- Total timeout for kubelet connection retries during pod initialization. Useful for environments like EKS/GKE where kubelet certificates may take 1-2 minutes to provision after node startup. Set to 0s to disable retries and use legacy behavior (fail immediately).
227 # -- Delay between retry attempts during kubelet client initialization. Only used if initTimeout > 0.
229 # -- When empty (default), kubelet TLS verification is skipped (back-compat).
230 # -- For clusters with kubelet TLS bootstrap enabled, set to /var/run/secrets/kubernetes.io/serviceaccount/ca.crt.
231 # -- Path to a PEM-encoded CA bundle used to verify the kubelet's serving certificate.
235# ksm -- Configuration for the Deployment that collects state metrics from KSM (kube-state-metrics).
236# @default -- See `values.yaml`
238 # -- Enable cluster state monitoring.
239 # Advanced users only. Setting this to `false` is not supported and will break the New Relic experience.
242 # -- Tolerations for the KSM Deployment.
243 # @default -- Tolerates common node pressure taints but not unschedulable nodes
245 # - key: "node.kubernetes.io/disk-pressure"
247 # effect: "NoSchedule"
248 # - key: "node.kubernetes.io/memory-pressure"
250 # effect: "NoSchedule"
251 # - key: "node.kubernetes.io/pid-pressure"
253 # effect: "NoSchedule"
254 # - key: "node.kubernetes.io/network-unavailable"
256 # effect: "NoSchedule"
257 # - operator: "Exists"
258 # effect: "NoExecute"
261 # -- (bool) Sets pod's hostNetwork. When set bypasses global/common variable
262 # @default -- Not set
264 # -- Affinity for the KSM Deployment.
265 # @default -- Deployed in the same node as KSM
268 preferredDuringSchedulingIgnoredDuringExecution:
270 topologyKey: kubernetes.io/hostname
273 app.kubernetes.io/name: kube-state-metrics
275 # -- Config for the Infrastructure agent that will forward the metrics to the backend. It will be merged with the configuration in `.common.agentConfig`
276 # See: https://docs.newrelic.com/docs/infrastructure/install-infrastructure-agent/configuration/infrastructure-agent-configuration-settings/
281 extraVolumeMounts: []
283 # -- Enable to collect metrics for resource quota.
284 enableResourceQuotaSamples: true
286 # -- Resources for the KSM scraper container.
287 # Keep in mind that sharding is not supported at the moment, so memory usage for this component ramps up quickly on
289 # @default -- 100m/150M -/850M
292 memory: 850M # Bump me up if KSM pod shows restarts.
297 # -- Resources for the Forwarder sidecar container.
298 # @default -- 100m/150M -/850M
301 memory: 850M # Bump me up if KSM pod shows restarts.
306 # -- Timeout for the ksm API contacted by the integration
308 # -- Number of retries after timeout expired
310 # -- if specified autodiscovery is not performed and the specified URL is used
311 # staticUrl: "http://test.io:8080/metrics"
312 # -- Label selector that will be used to automatically discover an instance of kube-state-metrics running in the cluster.
313 selector: "app.kubernetes.io/name=kube-state-metrics"
314 # -- Scheme to use to connect to kube-state-metrics. Supported values are `http` and `https`.
316 # -- Restrict autodiscovery of the kube-state-metrics endpoint to those using a specific port. If empty or `0`, all endpoints are considered regardless of their port (recommended).
318 # -- Restrict autodiscovery of the kube-state-metrics service to a particular namespace.
319 # @default -- All namespaces are searched (recommended).
320 # namespace: "ksm-namespace"
321# controlPlane -- Configuration for the control plane scraper.
322# @default -- See `values.yaml`
324 # -- Deploy control plane monitoring component.
327 # -- Tolerations for the control plane DaemonSet.
328 # @default -- Schedules in all tainted nodes
330 # - operator: "Exists"
331 # effect: "NoSchedule"
332 # - operator: "Exists"
333 # effect: "NoExecute"
336 # -- Affinity for the control plane DaemonSet.
337 # @default -- Deployed only in control plane nodes.
340 requiredDuringSchedulingIgnoredDuringExecution:
343 - key: node-role.kubernetes.io/control-plane
346 - key: node-role.kubernetes.io/controlplane
349 - key: node-role.kubernetes.io/etcd
351 # -- How to deploy the control plane scraper. If autodiscovery is in use, it should be `DaemonSet`.
352 # Advanced users using static endpoints set this to `Deployment` to avoid reporting metrics twice.
354 # -- Run Control Plane scraper with `hostNetwork`.
355 # `hostNetwork` is required for most control plane configurations, as they only accept connections from localhost.
357 # -- Config for the Infrastructure agent that will forward the metrics to the backend. It will be merged with the configuration in `.common.agentConfig`
358 # See: https://docs.newrelic.com/docs/infrastructure/install-infrastructure-agent/configuration/infrastructure-agent-configuration-settings/
363 extraVolumeMounts: []
366 # -- Resources for the controlplane scraper container.
367 # @default -- 100m/150M -/300M
375 # -- Resources for the k8s-events-forwarder sidecar container.
376 # @default -- 100m/150M -/300M
384 # -- Timeout for the Kubernetes APIs contacted by the integration
386 # -- Number of retries after timeout expired
388 # -- etcd monitoring configuration
389 # @default -- Common settings for most K8s distributions.
391 # -- Enable etcd monitoring. Might require manual configuration in some environments.
393 # Discover etcd pods using the following namespaces and selectors.
394 # If a pod matches the selectors, the scraper will attempt to reach it through the `endpoints` defined below.
396 - selector: "tier=control-plane,component=etcd"
397 namespace: kube-system
398 # Set to true to consider only pods sharing the node with the scraper pod.
399 # This should be set to `true` if Kind is Daemonset, `false` otherwise.
401 # Try to reach etcd using the following endpoints.
403 - url: https://localhost:4001
404 insecureSkipVerify: true
407 - url: http://localhost:2381
408 - selector: "k8s-app=etcd-manager-main"
409 namespace: kube-system
412 - url: https://localhost:4001
413 insecureSkipVerify: true
416 - selector: "k8s-app=etcd"
417 namespace: kube-system
420 - url: https://localhost:4001
421 insecureSkipVerify: true
424 # Openshift users might want to remove previous autodiscover entries and add this one instead.
425 # Manual steps are required to create a secret containing the required TLS certificates to connect to etcd.
426 # - selector: "app=etcd,etcd=true,k8s-app=etcd"
427 # namespace: openshift-etcd
430 # - url: https://localhost:9979
431 # insecureSkipVerify: true
435 # secretName: secret-name
436 # secretNamespace: secret-namespace
437 # -- staticEndpoint configuration.
438 # It is possible to specify static endpoint to scrape. If specified 'autodiscover' section is ignored.
439 # If set the static endpoint should be reachable, otherwise an error will be returned and the integration stops.
440 # Notice that if deployed as a daemonSet and not as a Deployment setting static URLs could lead to duplicate data
442 # url: https://url:port
443 # insecureSkipVerify: true
446 # -- Scheduler monitoring configuration
447 # @default -- Common settings for most K8s distributions.
449 # -- Enable scheduler monitoring.
452 - selector: "tier=control-plane,component=kube-scheduler"
453 namespace: kube-system
456 - url: https://localhost:10259
457 insecureSkipVerify: true
460 - selector: "k8s-app=kube-scheduler"
461 namespace: kube-system
464 - url: https://localhost:10259
465 insecureSkipVerify: true
468 - selector: "app=openshift-kube-scheduler,scheduler=true"
469 namespace: openshift-kube-scheduler
472 - url: https://localhost:10259
473 insecureSkipVerify: true
476 - selector: "app=openshift-kube-scheduler,scheduler=true"
477 namespace: kube-system
480 - url: https://localhost:10259
481 insecureSkipVerify: true
484 # -- staticEndpoint configuration.
485 # It is possible to specify static endpoint to scrape. If specified 'autodiscover' section is ignored.
486 # If set the static endpoint should be reachable, otherwise an error will be returned and the integration stops.
487 # Notice that if deployed as a daemonSet and not as a Deployment setting static URLs could lead to duplicate data
489 # url: https://url:port
490 # insecureSkipVerify: true
492 # -- Controller manager monitoring configuration
493 # @default -- Common settings for most K8s distributions.
495 # -- Enable controller manager monitoring.
498 - selector: "tier=control-plane,component=kube-controller-manager"
499 namespace: kube-system
502 - url: https://localhost:10257
503 insecureSkipVerify: true
506 - selector: "k8s-app=kube-controller-manager"
507 namespace: kube-system
510 - url: https://localhost:10257
511 insecureSkipVerify: true
514 - selector: "app=kube-controller-manager,kube-controller-manager=true"
515 namespace: openshift-kube-controller-manager
518 - url: https://localhost:10257
519 insecureSkipVerify: true
522 - selector: "app=kube-controller-manager,kube-controller-manager=true"
523 namespace: kube-system
526 - url: https://localhost:10257
527 insecureSkipVerify: true
530 - selector: "app=controller-manager,controller-manager=true"
531 namespace: kube-system
534 - url: https://localhost:10257
535 insecureSkipVerify: true
539 # secretName: secret-name
540 # secretNamespace: secret-namespace
541 # -- staticEndpoint configuration.
542 # It is possible to specify static endpoint to scrape. If specified 'autodiscover' section is ignored.
543 # If set the static endpoint should be reachable, otherwise an error will be returned and the integration stops.
544 # Notice that if deployed as a daemonSet and not as a Deployment setting static URLs could lead to duplicate data
546 # url: https://url:port
547 # insecureSkipVerify: true
549 # -- API Server monitoring configuration
550 # @default -- Common settings for most K8s distributions.
552 # -- Enable API Server monitoring
555 - selector: "tier=control-plane,component=kube-apiserver"
556 namespace: kube-system
559 - url: https://localhost:8443
560 insecureSkipVerify: true
563 # Endpoint distributions target: Kind(v1.22.1)
564 - url: https://localhost:6443
565 insecureSkipVerify: true
568 - url: http://localhost:8080
569 - selector: "k8s-app=kube-apiserver"
570 namespace: kube-system
573 - url: https://localhost:8443
574 insecureSkipVerify: true
577 - url: http://localhost:8080
578 - selector: "app=openshift-kube-apiserver,apiserver=true"
579 namespace: openshift-kube-apiserver
582 - url: https://localhost:8443
583 insecureSkipVerify: true
586 - url: https://localhost:6443
587 insecureSkipVerify: true
590 - selector: "app=openshift-kube-apiserver,apiserver=true"
591 namespace: kube-system
594 - url: https://localhost:8443
595 insecureSkipVerify: true
598 # -- staticEndpoint configuration.
599 # It is possible to specify static endpoint to scrape. If specified 'autodiscover' section is ignored.
600 # If set the static endpoint should be reachable, otherwise an error will be returned and the integration stops.
601 # Notice that if deployed as a daemonSet and not as a Deployment setting static URLs could lead to duplicate data
603 # url: https://url:port
604 # insecureSkipVerify: true
606# -- Update strategy for the deployed DaemonSets.
607# @default -- See `values.yaml`
612# -- Update strategy for the deployed Deployments.
613# @default -- `type: Recreate`
616# -- Adds extra attributes to the cluster and all the metrics emitted to the backend. Can be configured also with `global.customAttributes`
618# -- Settings controlling ServiceAccount creation.
619# @default -- See `values.yaml`
621 # -- (bool) Whether the chart should automatically create the ServiceAccount objects required to run.
625 # If not set and create is true, a name is generated using the fullname template
627# -- Additional labels for chart objects. Can be configured also with `global.labels`
629# -- Annotations to be added to all pods created by the integration.
631# -- Additional labels for chart pods. Can be configured also with `global.podLabels`
633# -- Run the integration with full access to the host filesystem and network.
634# Running in this mode allows reporting fine-grained cpu, memory, process and network metrics for your nodes.
636# -- Sets pod's priorityClassName. Can be configured also with `global.priorityClassName`
638# -- (bool) Sets pod's hostNetwork. Can be configured also with `global.hostNetwork`
641# -- Sets security context (at pod level). Can be configured also with `global.podSecurityContext`
642podSecurityContext: {}
643# -- Sets security context (at container level). Can be configured also with `global.containerSecurityContext`
644containerSecurityContext: {}
645# -- Sets pod's dnsConfig. Can be configured also with `global.dnsConfig`
647# Settings controlling RBAC objects creation.
649 # rbac.create -- Whether the chart should automatically create the RBAC objects required to run.
651 # rbac.pspEnabled -- Whether the chart should create Pod Security Policy objects.
653 # rbac.kubeletFineGrainedAuth -- Whether to use fine-grained kubelet authorization (KEP-2862).
654 # When true, uses nodes/metrics, nodes/stats, nodes/pods, nodes/healthz (requires K8s 1.33+ or feature gate on 1.32).
655 # Fine-grained mode limits RBAC to read-only kubelet endpoints, eliminating privilege escalation risks.
656 # When false (default), uses nodes/proxy which could be exploited to access kubelet write endpoints.
657 # See: https://kubernetes.io/docs/reference/access-authn-authz/kubelet-authn-authz/#fine-grained-authorization
658 kubeletFineGrainedAuth: false
659# -- Sets pod/node affinities set almost globally. (See [Affinities and tolerations](README.md#affinities-and-tolerations))
661# -- Sets pod's node selector almost globally. (See [Affinities and tolerations](README.md#affinities-and-tolerations))
663# -- Sets pod's tolerations to node taints almost globally. (See [Affinities and tolerations](README.md#affinities-and-tolerations))
665# -- Config files for other New Relic integrations that should run in this cluster.
667# If you wish to monitor services running on Kubernetes you can provide integrations
668# configuration under `integrations`. You just need to create a new entry where
669# the key is the filename of the configuration file and the value is the content of
670# the integration configuration.
671# The data is the actual integration configuration as described in the spec here:
672# https://docs.newrelic.com/docs/integrations/integrations-sdk/file-specifications/integration-configuration-file-specifications-agent-v180
673# For example, if you wanted to monitor a Redis instance that has a label "app=sampleapp"
674# you could do so by adding following entry:
675# nri-redis-sampleapp:
678# # Run NRI Discovery for Kubernetes
679# # https://github.com/newrelic/nri-discovery-kubernetes
680# exec: /var/db/newrelic-infra/nri-discovery-kubernetes
682# label.app: sampleapp
686# # using the discovered IP as the hostname address
687# HOSTNAME: ${discovery.ip}
692# -- (bool) Collect detailed metrics from processes running in the host.
693# This defaults to true for accounts created before July 20, 2020.
694# ref: https://docs.newrelic.com/docs/release-notes/infrastructure-release-notes/infrastructure-agent-release-notes/new-relic-infrastructure-agent-1120
697# Prefix nodes display name with cluster to reduce chances of collisions
698# prefixDisplayNameWithCluster: false
700# 'true' will use the node name as the name for the "host",
701# note that it may cause data collision if the node name is the same in different clusters
702# and prefixDisplayNameWithCluster is not set to true.
703# 'false' will use the host name as the name for the "host".
704# useNodeNameAsDisplayName: true
707 # selfMonitoring.pixie.enabled -- Enables the Pixie Health Check nri-flex config.
708 # This Flex config performs periodic checks of the Pixie /healthz and /statusz endpoints exposed by the Pixie
709 # Cloud Connector. A status for each endpoint is sent to New Relic in a pixieHealthCheck event.
711# -- Configures the integration to send all HTTP/HTTPS request through the proxy in that URL. The URL should have a standard format like `https://user:password@hostname:port`. Can be configured also with `global.proxy`
713# -- (bool) Send the metrics to the staging backend. Requires a valid staging license key. Can be configured also with `global.nrStaging`
717 # -- (bool) Enables FedRAMP. Can be configured also with `global.fedramp.enabled`
718 # @default -- `false`
720# -- (bool) Sets the debug logs to this integration or all integrations if it is set globally. Can be configured also with `global.verboseLog`