This guide walks you through upgrading your k8s-infra Helm chart to version 0.15.0, which includes important updates to the OpenTelemetry Collector and simplified configuration options.
What's New in v0.15.0
This release brings several improvements:
OpenTelemetry Collector Update: Upgraded from version 0.109.0 to 0.139.0, delivering performance improvements and bug fixes.
Simplified Self-Telemetry Configuration: The presets.selfTelemetry option simplifies the process of configuring how k8s-infra reports its own metrics. The setup now automatically manages endpoint formatting and TLS settings.
Configuration Cleanup: Removed deprecated fields no longer supported in newer OpenTelemetry Collector versions, streamlining your configuration files.
Prerequisites
Before setting up OpenTelemetry monitoring for your Kubernetes cluster, ensure you have:
- A SigNoz backend (SigNoz Cloud or self-hosted) to receive OpenTelemetry data
- K8s-infra OpenTelemetry collection agent installed in your Kubernetes Cluster
- A backup of your current k8s-infra Helm chart configuration file (usually
values.yaml)
Important Changes to Know About
Removed Configuration Fields
Two types of configuration fields have been removed:
Telemetry Metrics Address: The service::telemetry::metrics::address field is no longer supported. OpenTelemetry Collector v0.123.0 deprecated this field, and it's now completely ignored. The collector manages telemetry metrics exposure internally, so you should remove any references to:
otelAgent.service::telemetry::metrics::addressotelDeployment.service::telemetry::metrics::address
The chart no longer automatically renders the OTEL_EXPORTER_OTLP_INSECURE and OTEL_EXPORTER_OTLP_INSECURE_SKIP_VERIFY environment variables. If you were previously setting these manually in your values file and still require them, you can keep them. Otherwise, you do not need to take any action regarding these environment variables.
Upgrade Process
Choose the scenario that matches your current setup:
Scenario 1: Basic Setup (No Self-Telemetry)
If you're not using self-telemetry features, your upgrade is straightforward.
Step 1: Update Helm Repository
helm repo update signoz
Step 2: Save Current Configuration
Save your current k8s-infra configuration to a local file for reference and backup:
helm get values <RELEASE_NAME> -n <NAMESPACE> > current-values.yaml
Replace <RELEASE_NAME> with your Helm release name and <NAMESPACE> with the namespace where k8s-infra is installed.
Step 3: Remove Deprecated Fields
Check your current-values.yaml for these deprecated fields and remove them if present:
otelAgent:
service
telemetry:
- metrics:
- address: 0.0.0.0:8888
otelDeployment:
service
telemetry:
- metrics:
- address: 0.0.0.0:8888
Step 4: Run the Upgrade
helm upgrade <RELEASE_NAME> signoz/k8s-infra \
-n <NAMESPACE> \
-f your-values.yaml
Or to upgrade to a specific version:
helm upgrade <RELEASE_NAME> signoz/k8s-infra \
-n <NAMESPACE> \
--version 0.15.0 \
-f your-values.yaml
Step 5: Verify the Upgrade
Check that pods are running the new version:
# Verify image versions
kubectl get pods -n <NAMESPACE> -l app.kubernetes.io/component=otel-agent \
-o jsonpath='{.items[*].spec.containers[*].image}'
kubectl get pods -n <NAMESPACE> -l app.kubernetes.io/component=otel-deployment \
-o jsonpath='{.items[*].spec.containers[*].image}'
You should see images tagged with version 0.139.0 or later.
Confirm all pods are healthy:
kubectl get pods -n <NAMESPACE> -l app.kubernetes.io/name=k8s-infra
All pods should show a Running status.
Step 6: Check Logs
kubectl logs -n <NAMESPACE> -l app.kubernetes.io/component=otel-agent --tail=50
kubectl logs -n <NAMESPACE> -l app.kubernetes.io/component=otel-deployment --tail=50
Scenario 2: With Self-Telemetry Using Custom Endpoint Configuration
The OpenTelemetry Collector exposes its own internal metrics (such as dropped spans and queue size) for Prometheus to scrape by default at http://127.0.0.1:8888/metrics. If you want to access these metrics outside the pod, configure the telemetry reader to bind to 0.0.0.0:8888 instead of the default.
For more details, see the OpenTelemetry Collector Internal Telemetry documentation.
If you're using self-telemetry with a directly configured endpoint, you'll need to migrate to the new presets.selfTelemetry configuration.
Step 1: Update Helm Repository
helm repo update signoz
Step 2: Save Current Configuration
helm get values <RELEASE_NAME> -n <NAMESPACE> > current-values.yaml
Step 3: Update k8s-infra Helm chart configuration
Update your current-values.yaml file with these changes:
otelAgent:
service
telemetry:
- metrics:
- address: 0.0.0.0:8888
otelDeployment:
service
telemetry:
- metrics:
- address: 0.0.0.0:8888
# No changes required for the selfTelemetry preset
presets:
selfTelemetry:
endpoint: your-endpoint:4317
insecure: false
insecureSkipVerify: false
signozApiKey: your-ingestion-key
traces:
enabled: true
metrics:
enabled: true
logs:
enabled: true
Step 4: Remove Deprecated Environment Variables (If Manually Set)
The chart no longer automatically renders OTEL_EXPORTER_OTLP_INSECURE and OTEL_EXPORTER_OTLP_INSECURE_SKIP_VERIFY environment variables. If you were manually setting these in your values file, remove them:
otelAgent:
env:
- - name: OTEL_EXPORTER_OTLP_INSECURE
- value: "true"
- - name: OTEL_EXPORTER_OTLP_INSECURE_SKIP_VERIFY
- value: "false"
If you weren't manually setting these variables, no action is needed.
Step 5: Run the Upgrade
helm upgrade <RELEASE_NAME> signoz/k8s-infra \
-n <NAMESPACE> \
-f your-values.yaml
Step 6: Verify the Upgrade
Check that pods are running the new version:
kubectl get pods -n <NAMESPACE> -l app.kubernetes.io/name=k8s-infra
All pods should show a Running status with image version 0.139.0 or later.
Example Configuration
global:
cloud: others
clusterName: my-cluster
deploymentEnvironment: production
otelCollectorEndpoint: ingest.us.signoz.cloud:443
signozApiKey: <YOUR_API_KEY>
presets:
otlpExporter:
enabled: true
selfTelemetry:
endpoint: ingest.us.signoz.cloud:443
insecure: false
insecureSkipVerify: false
signozApiKey: <YOUR_SELF_TELEMETRY_KEY>
traces:
enabled: true
metrics:
enabled: true
logs:
enabled: true
Scenario 3: With Self-Telemetry Using default self-telemetry endpoint configuration
If you're using the default collector endpoint configuration for self-telemetry the same as the one used for sending your infra signals, your upgrade is simpler.
Step 1: Update Helm Repository
helm repo update signoz
Step 2: Save Current Configuration
helm get values <RELEASE_NAME> -n <NAMESPACE> > current-values.yaml
Step 3: Update Configuration
Remove the telemetry.metrics.address field if present:
otelAgent:
telemetry:
- metrics:
- address: 0.0.0.0:8888
otelDeployment:
telemetry:
- metrics:
- address: 0.0.0.0:8888
Update your current-values.yaml file with these changes:
# No changes required for the selfTelemetry preset
presets:
selfTelemetry:
signozApiKey: your-ingestion-key
traces:
enabled: true
metrics:
enabled: true
logs:
enabled: true
otelCollectorEndpoint: ingest.us.signoz.cloud:443
# Use global settings for TLS configuration
otelInsecure: false
insecureSkipVerify: false
Step 4: Run the Upgrade
helm upgrade <RELEASE_NAME> signoz/k8s-infra \
-n <NAMESPACE> \
-f your-values.yaml
Step 5: Verify the Upgrade
# Check image versions
kubectl get pods -n <NAMESPACE> -l app.kubernetes.io/component=otel-agent \
-o jsonpath='{.items[*].spec.containers[*].image}'
# Check pod status
kubectl get pods -n <NAMESPACE> -l app.kubernetes.io/name=k8s-infra
# Review logs
kubectl logs -n <NAMESPACE> -l app.kubernetes.io/component=otel-agent --tail=50
How Self-Telemetry Endpoint Selection Works
The self-telemetry endpoint is determined in this order:
- If you specify
presets.selfTelemetry.endpoint, it uses that value, withinsecureandinsecureSkipVerifycoming from yourpresets.selfTelemetrysettings. - Otherwise, it falls back to the
OTEL_EXPORTER_OTLP_ENDPOINTenvironment variable if available, with settings coming from the globalotelInsecureandinsecureSkipVerifyvalues.