For the complete documentation index, see llms.txt. Markdown versions are available by appending .md to documentation URLs.

K8s Infra - Install

SigNoz Cloud - This page applies to SigNoz Cloud editions.
Self-Host - This page applies to self-hosted SigNoz editions.

This guide explains how to install the K8s Infra collection agent on a Kubernetes cluster, with the k8s-infra Helm chart, or with Foundry through Helm or Kustomize.

Prerequisites

  • A Kubernetes cluster.
  • kubectl configured to reach the cluster.
  • For a Helm-based setup, Helm 3 installed on the same machine.
  • A SigNoz to send data to: SigNoz Cloud or a self-hosted SigNoz.

Install with the Helm CLI

Step 1: Add the Helm repository

Run this on the machine where you use kubectl:

helm repo add signoz https://charts.signoz.io
helm repo update

Step 2: Create override-values.yaml

Create a file named override-values.yaml with the values for your Kubernetes platform:

override-values.yaml
global:
  clusterName: <CLUSTER_NAME>
  deploymentEnvironment: <DEPLOYMENT_ENVIRONMENT>
otelCollectorEndpoint: https://ingest.<region>.signoz.cloud:443
otelInsecure: false
signozApiKey: <your-ingestion-key>

Verify these values:

  • <region>: Your SigNoz Cloud region.
  • <your-ingestion-key>: Your SigNoz Cloud ingestion key.
  • <CLUSTER_NAME>: A name for this cluster, unique across the clusters that send to the same SigNoz. It becomes k8s.cluster.name on every signal and names the cluster in the SigNoz Kubernetes views.
  • <DEPLOYMENT_ENVIRONMENT>: Your deployment environment, for example staging or production. It becomes deployment.environment on the collected telemetry.

For every chart value, see the k8s-infra chart.

Step 3: Install the chart

Run this from the directory that contains override-values.yaml:

helm install my-release signoz/k8s-infra -f override-values.yaml

Helm installs the release my-release into the namespace of your current kubectl context, default unless you set another.

Step 4: Verify the Collection Agent

Run this on the machine where you use kubectl to check that the pods are running:

kubectl get pods

The output should look similar to the following, with one my-release-k8s-infra-otel-agent pod per node. Pod suffixes vary, and if SigNoz runs in the same namespace its pods are listed too:

NAME                                                    READY   STATUS    RESTARTS   AGE
my-release-k8s-infra-otel-agent-7xk2p                   1/1     Running   0          2m
my-release-k8s-infra-otel-agent-q9m4d                   1/1     Running   0          2m
my-release-k8s-infra-otel-deployment-6d9c7b8f5c-k2x9p   1/1     Running   0          2m

In SigNoz, open the Kubernetes Monitoring views under Infrastructure Monitoring. The Clusters view lists your cluster under the name you set as <CLUSTER_NAME>, and the Pods and Nodes views fill in as data arrives. Check Logs Explorer to confirm container logs and Kubernetes events are flowing.

Customize the Collection Agent

Every change follows the same loop: edit override-values.yaml, then run this from the directory that contains it:

helm upgrade my-release signoz/k8s-infra -f override-values.yaml

Verify these values:

  • <chart-version>: A k8s-infra chart version from the SigNoz charts releases, for example 0.17.1.

Troubleshooting

helm install fails with cannot re-use a name that is still in use

Run this on the machine where you use kubectl to list the releases in the current namespace:

helm list

Cause: the release my-release already exists.

Fix: apply your changes with helm upgrade, as shown under Customize the Collection Agent.

After the fix, kubectl get pods shows the agent pods as Running.

Agent pod stays Pending

Run this on the machine where you use kubectl to see why the pod is unscheduled:

kubectl describe pod <pod-name>

Replace <pod-name> with the agent pod's name from kubectl get pods.

Cause: another collector holds host ports 4317, 4318, 8888, and 13133 on the node, for example an agent installed with Foundry. This happens on every platform except GKE Autopilot, where the agent binds no host ports.

Fix: keep one of the two agents and remove the other.

After the fix, kubectl get pods shows one agent pod per node as Running.

On GKE Autopilot the agent DaemonSet has no pods

Run this on the machine where you use kubectl to see the DaemonSet's events:

kubectl describe daemonset my-release-k8s-infra-otel-agent

The events show the pods denied by an Autopilot policy (denied by autogke-).

Cause: the values ask for host ports and host paths that GKE Autopilot denies.

Fix: use the GKE (Autopilot) values from Step 2, which set global.cloud: gcp/autogke, and run the helm upgrade command under Customize the Collection Agent.

After the fix, kubectl get pods shows one agent pod per node.

Agent logs a root_path warning on GKE Autopilot

Run this on the machine where you use kubectl to see the agent's logs:

kubectl logs <pod-name>

Replace <pod-name> with the agent pod's name from kubectl get pods. The logs show a warning that starts with No `root_path` config set when running in docker environment.

Cause: on GKE Autopilot the agent has no host root to read, so the hostmetrics receiver runs without root_path and reports the agent container's filesystem.

Fix: none needed. Node disk and network metrics come from the kubeletstats receiver as k8s.node.filesystem.* and k8s.node.network.*.

The agent keeps running: kubectl get pods shows its pods as Running.

Agent pods stay in ErrImagePull

Run this on the machine where you use kubectl to see the pull error:

kubectl describe pod <pod-name>

Replace <pod-name> with the agent pod's name from kubectl get pods. The events show ErrImagePull or ImagePullBackOff with no match for platform in manifest.

Cause: the collector image's OS does not match the node's OS, for example the Windows image on a Linux node.

Fix: keep each agent on nodes of its OS: set nodeSelector under otelAgent and otelDeployment in override-values.yaml, for example kubernetes.io/os: windows for the Windows agent, then run the helm upgrade command under Customize the Collection Agent.

After the fix, kubectl get pods shows the agent pods as Running.

Send data from your applications

Node, pod, and container metrics, container logs, and Kubernetes events flow as soon as the agent pods are running. To send traces, metrics, and logs from your applications through the agent, see Send Data from Applications to the Collector.

Video Walkthrough

If you are someone who understands things better through video implementation, here is a video to help you. Check it out:

OpenTelemetry Kubernetes Tutorial: Deploy, Configure, and Scale with SigNoz Agents

Next Steps

Is this page helpful

Last updated—October 15, 2026

Edit on GitHub