helm-charts

opentelemetry-kube-stack

Version: 0.7.2 Type: application AppVersion: v1

A comprehensive Helm chart for OpenTelemetry Kubernetes operator with Tsuga integration, featuring dual deployment pattern (agent DaemonSet + cluster receiver), secure credential management, and production-ready configurations for telemetry collection to Tsuga platform.

Homepage: https://tsuga-dev.github.io/helm-charts/

Maintainers

Name Email Url
OpenTelemetry Team antonin@tsuga.com  

Source Code

Requirements

Repository Name Version
  otel-crds 0.0.0
https://open-telemetry.github.io/opentelemetry-helm-charts opentelemetry-operator 0.114.1

Features

Architecture

The chart implements the recommended OpenTelemetry architecture with two main components:

Agent (DaemonSet)

Default Receivers:

Default Processors:

Default Connectors:

Default Exporters:

Service Pipelines:

¹ The resource processor is only present when clusterName is set.

Default Spanmetrics Dimensions:

http.route is preferred over raw URL/path attributes because it represents the logical route template and keeps metric cardinality under control. URL-like attributes such as http.url, url.full, http.path, and http.target are intentionally excluded from the default metric dimensions because they fragment metrics with IDs, query strings, and other request-specific values.

This default targets modern OpenTelemetry HTTP semantic conventions and is most useful for server spans. If your workloads still emit legacy attributes such as http.method and http.status_code, or if you want client-focused dependency metrics, override the connector dimensions through the existing merge-based config.

Example override for client-oriented HTTP dependency metrics:

agent:
  config:
    additionalConfig:
      connectors:
        spanmetrics:
          dimensions:
            - name: http.request.method
              default: GET
            - name: http.response.status_code
            - name: server.address

Example override for workloads still emitting legacy HTTP semantic conventions:

agent:
  config:
    additionalConfig:
      connectors:
        spanmetrics:
          dimensions:
            - name: http.method
              default: GET
            - name: http.status_code
            - name: http.route

Cluster Receiver (Deployment)

Default Receivers:

Default Processors:

Default Exporters:

Service Pipelines:

¹ The resource processor is only present when clusterName is set.

Quick Start

Use the deploy script

./deploy.sh

Prerequisites

Before installing this chart, you need the following components:

1. cert-manager (Required)

The OpenTelemetry Operator requires cert-manager to be installed in your cluster.

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.18.2/cert-manager.yaml

Verify cert-manager is running:

kubectl wait --for=condition=Ready pods --all -n cert-manager --timeout=300s

2. OpenTelemetry Operator (Required)

The OpenTelemetry Operator is required for auto-instrumentation features. You have two options:

This chart includes the OpenTelemetry Operator as a dependency. Enable it in your values:

opentelemetry-operator:
  enabled: true

Or via command line:

helm install my-otel-stack tsuga-charts/opentelemetry-kube-stack \
  --set opentelemetry-operator.enabled=true

Option B: Install separately

If you prefer to manage the operator separately or it’s already installed:

kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml

Verify the operator is running:

kubectl wait --for=condition=Ready pods -l app.kubernetes.io/name=opentelemetry-operator -n opentelemetry-operator-system --timeout=300s

Installation

Auto-instrumentation (APM)

This chart can optionally create an OpenTelemetry Operator Instrumentation resource via autoInstrumentation.

Prerequisites

Enable and configure

Create an Instrumentation CR with your desired configuration:

autoInstrumentation:
  enabled: true
  # apiVersion depends on your operator version
  apiVersion: opentelemetry.io/v1alpha1
  spec:
    exporter:
      endpoint: http://otel-collector:4318
    propagators: [tracecontext, baggage]
    sampler:
      type: parentbased_traceidratio
      argument: "1.0"
    # Configure the language(s) you plan to inject
    java:
      image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:2.10.0

Inject into workloads

Annotate your workload pods to enable injection:

spec:
  template:
    metadata:
      annotations:
        instrumentation.opentelemetry.io/inject-java: "true"

Supported annotation keys depend on language (examples):

Install the Chart

# Add the repository
helm repo add tsuga-charts https://tsuga-dev.github.io/helm-charts/
helm repo update

# Install with Tsuga configuration
helm install my-otel-stack tsuga-charts/opentelemetry-kube-stack \
  --set secret.create=true \
  --set tsuga.otlpEndpoint="https://your-tsuga-endpoint.com" \
  --set tsuga.apiKey="your-api-key-here"

Option 2: Direct Installation

# Install directly from the chart directory
helm install my-otel-stack ./opentelemetry-kube-stack \
  --set secret.create=true \
  --set tsuga.otlpEndpoint="https://your-tsuga-endpoint.com" \
  --set tsuga.apiKey="your-api-key-here"

Option 3: Using Values File

# Create a values file
cat > my-values.yaml << EOF
tsuga:
  otlpEndpoint: "https://your-tsuga-endpoint.com"
  apiKey: "your-api-key-here"
secret:
  create: true
EOF

# Install with values file
helm install my-otel-stack ./opentelemetry-kube-stack -f my-values.yaml

Configuration

Values

Key Type Default Description  
affinity object {} Affinity rules for pod scheduling Used as default when agent.affinity is not set  
agent.addLogsVolumes bool true Add logs volumes to the agent When true, adds volumes for log collection Even if collectLogs is false, the volumes are added  
agent.affinity object {} Agent-specific affinity rules If not set, inherits from global affinity configuration  
agent.collectLogs bool true Collect logs from the host and containers When true, enables filelog receiver to collect logs from /var/log/pods Also mounts required volumes for log collection  
agent.collectNetwork bool false Collect host network metrics When true, enables network scraper in hostmetrics receiver  
agent.collectOtelLogs bool true Collect OpenTelemetry collector logs When false, excludes OpenTelemetry collector logs from collection Useful to avoid log loops  
agent.collectProcesses bool false Collect host processes metrics When true, enables processes and process scrapers in hostmetrics receiver  
agent.config object {"extraConnectors":{},"extraExporters":{},"extraExtensions":{},"extraProcessors":{},"extraReceivers":{},"extraTelemetry":{},"service":{"extraExtensions":[],"pipelines":{"extraPipelines":{},"logs":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]},"metrics":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]},"traces":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]}}}} Agent collector configuration (merge-based approach) Use this to extend the default configuration Default config includes: filelog, kubelet_stats, host_metrics, otlp, prometheus/self receivers Default processors: k8s_attributes, memory_limiter, batch, cumulativetodelta, resource  
agent.config.extraConnectors object {} Additional connectors to merge into the collector configuration These are merged with default connectors  
agent.config.extraExporters object {} Additional exporters to merge into the collector configuration These are merged with default exporters (otlp_http/tsuga)  
agent.config.extraExtensions object {} Additional extensions to merge into the collector configuration These are merged with default extensions (health_check)  
agent.config.extraProcessors object {} Additional processors to merge into the collector configuration These are merged with default processors  
agent.config.extraReceivers object {} Additional receivers to merge into the collector configuration These are merged with default receivers  
agent.config.extraTelemetry object {} Additional telemetry to merge into the collector configuration Merges with default telemetry (Prometheus metrics on port 8888)  
agent.config.service object {"extraExtensions":[],"pipelines":{"extraPipelines":{},"logs":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]},"metrics":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]},"traces":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]}}} Service configuration  
agent.config.service.extraExtensions list [] Additional extensions to add to the service configuration Added to default extensions (health_check)  
agent.config.service.pipelines object {"extraPipelines":{},"logs":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]},"metrics":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]},"traces":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]}} Pipeline configuration  
agent.config.service.pipelines.logs object {"extraExporters":[],"extraProcessors":[],"extraReceivers":[]} Logs pipeline configuration  
agent.config.service.pipelines.logs.extraExporters list [] Additional exporters to add to the logs pipeline Added to default exporter (otlp_http/tsuga)  
agent.config.service.pipelines.logs.extraProcessors list [] Additional processors to add to the logs pipeline Added to default processors (k8s_attributes, memory_limiter, batch, resource)  
agent.config.service.pipelines.logs.extraReceivers list [] Additional receivers to add to the logs pipeline Added to default receivers (otlp, filelog)  
agent.config.service.pipelines.metrics object {"extraExporters":[],"extraProcessors":[],"extraReceivers":[]} Metrics pipeline configuration  
agent.config.service.pipelines.metrics.extraExporters list [] Additional exporters to add to the metrics pipeline Added to default exporter (otlp_http/tsuga)  
agent.config.service.pipelines.metrics.extraProcessors list [] Additional processors to add to the metrics pipeline Added to default processors (k8s_attributes, memory_limiter, batch, cumulativetodelta, resource)  
agent.config.service.pipelines.metrics.extraReceivers list [] Additional receivers to add to the metrics pipeline Added to default receivers (otlp, kubelet_stats, spanmetrics, host_metrics)  
agent.config.service.pipelines.traces object {"extraExporters":[],"extraProcessors":[],"extraReceivers":[]} Traces pipeline configuration  
agent.config.service.pipelines.traces.extraExporters list [] Additional exporters to add to the traces pipeline Added to default exporters (otlp_http/tsuga, spanmetrics)  
agent.config.service.pipelines.traces.extraProcessors list [] Additional processors to add to the traces pipeline Added to default processors (k8s_attributes, memory_limiter, batch, resource)  
agent.config.service.pipelines.traces.extraReceivers list [] Additional receivers to add to the traces pipeline Added to default receivers (otlp)  
agent.customConfig object {} Replace default config with complete custom configuration When set, this completely replaces the default collector configuration Use this for full control over the OpenTelemetry Collector config See cluster.customConfig for example format  
agent.enabled bool true Enable agent daemonset deployment  
agent.extraAnnotationsMapping list [] Annotations mapping configuration for agent Maps Kubernetes pod annotations to OpenTelemetry resource attributes These are appended to default annotation mappings Format: List of objects with tag_name, key, and from fields  
agent.extraEnvs list [] Extra environment variables for agent These are in addition to automatic secret env vars (TSUGA_API_KEY, TSUGA_OTLP_ENDPOINT, MY_POD_IP)  
agent.extraLabelMapping list [] Label mapping configuration for agent Maps Kubernetes pod labels to OpenTelemetry resource attributes These are appended to default label mappings Format: List of objects with tag_name, key, and from fields Example: extraLabelMapping: - tag_name: “app.version” key: “app.version” from: “pod”  
agent.hostNetwork bool true Enable host network for agent (recommended for optimal performance) When true, agent uses host networking for better performance  
agent.image string ”” OpenTelemetry Collector image for agent Defaults to: ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-k8s  
agent.nodeSelector object {} Agent-specific node selector If not set, inherits from global nodeSelector configuration  
agent.resources object {} Agent-specific resource limits and requests If not set, inherits from global resources configuration  
agent.tolerations list [] Agent-specific tolerations If not set, inherits from global tolerations configuration  
autoInstrumentation.annotations object {} Extra annotations to add to the Instrumentation resource  
autoInstrumentation.apiVersion string “opentelemetry.io/v1alpha1” apiVersion for the Instrumentation CR (depends on operator version) Common values: “opentelemetry.io/v1alpha1”  
autoInstrumentation.enabled bool false Enable OpenTelemetry Operator auto-instrumentation (Instrumentation CR) Requires the OpenTelemetry Operator to be installed in the cluster.  
autoInstrumentation.labels object {} Extra labels to add to the Instrumentation resource  
autoInstrumentation.nameOverride string ”” Override the name of the Instrumentation resource If empty, defaults to “-instrumentation"  
autoInstrumentation.spec object {} Instrumentation spec (full passthrough) This is passed directly to the Instrumentation Custom Resource spec. It can include (non-exhaustive): exporter, propagators, sampler, env, resource, and language blocks like java, nodejs, python, dotnet, go, apacheHttpd. Ref: https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentation  
cluster.affinity object {} Cluster-specific affinity rules If not set, inherits from global affinity configuration  
cluster.collectk8sobjects bool false    
cluster.config object {"extraConnectors":{},"extraExporters":{},"extraProcessors":{},"extraReceivers":{},"extraTelemetry":{},"service":{"extraExtensions":[],"pipelines":{"extraPipelines":{},"logs":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]},"metrics":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]},"traces":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]}}}} Gateway collector configuration (merge-based approach) Use this to extend the default configuration Default config includes: k8s_cluster receiver, k8s_attributes processor, resource processor  
cluster.config.extraConnectors object {} Additional connectors to merge into the collector configuration These are merged with default connectors  
cluster.config.extraExporters object {} Additional exporters to merge into the collector configuration These are merged with default exporters (otlp_http/tsuga)  
cluster.config.extraProcessors object {} Additional processors to merge into the collector configuration These are merged with default processors (k8s_attributes, resource)  
cluster.config.extraReceivers object {} Additional receivers to merge into the collector configuration These are merged with default receivers (k8s_cluster) Example: extraReceivers: prometheus: config: scrape_configs: - job_name: ‘my-service’  
cluster.config.extraTelemetry object {} Additional telemetry to merge into the collector configuration Merges with default telemetry  
cluster.config.service object {"extraExtensions":[],"pipelines":{"extraPipelines":{},"logs":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]},"metrics":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]},"traces":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]}}} Service configuration  
cluster.config.service.extraExtensions list [] Additional extensions to add to the service configuration Added to default extensions  
cluster.config.service.pipelines object {"extraPipelines":{},"logs":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]},"metrics":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]},"traces":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]}} Pipeline configuration  
cluster.config.service.pipelines.extraPipelines object {} Additional pipelines to add to the service configuration These are completely new pipelines (not extending default ones) Example: extraPipelines: custom-logs: receivers: [custom-receiver] processors: [batch] exporters: [custom-exporter]  
cluster.config.service.pipelines.logs object {"extraExporters":[],"extraProcessors":[],"extraReceivers":[]} Logs pipeline configuration  
cluster.config.service.pipelines.logs.extraExporters list [] Additional exporters to add to the logs pipeline Added to default exporter (otlp_http/tsuga)  
cluster.config.service.pipelines.logs.extraProcessors list [] Additional processors to add to the logs pipeline Added to default processors (resource)  
cluster.config.service.pipelines.logs.extraReceivers list [] Additional receivers to add to the logs pipeline Added to default receiver (k8s_cluster)  
cluster.config.service.pipelines.metrics object {"extraExporters":[],"extraProcessors":[],"extraReceivers":[]} Metrics pipeline configuration  
cluster.config.service.pipelines.metrics.extraExporters list [] Additional exporters to add to the metrics pipeline Added to default exporter (otlp_http/tsuga)  
cluster.config.service.pipelines.metrics.extraProcessors list [] Additional processors to add to the metrics pipeline Added to default processors (resource)  
cluster.config.service.pipelines.metrics.extraReceivers list [] Additional receivers to add to the metrics pipeline Added to default receiver (k8s_cluster)  
cluster.config.service.pipelines.traces object {"extraExporters":[],"extraProcessors":[],"extraReceivers":[]} Traces pipeline configuration  
cluster.config.service.pipelines.traces.extraExporters list [] Additional exporters to add to the traces pipeline Added to default exporter (otlp_http/tsuga)  
cluster.config.service.pipelines.traces.extraProcessors list [] Additional processors to add to the traces pipeline Added to default processors (resource)  
cluster.config.service.pipelines.traces.extraReceivers list [] Additional receivers to add to the traces pipeline Added to default receiver (k8s_cluster)  
cluster.customConfig object {} Replace default config with complete custom configuration When set, this completely replaces the default collector configuration Use this for full control over the OpenTelemetry Collector config Example: customConfig: - receivers: k8s_cluster: collection_interval: 30s processors: batch: {} exporters: otlp_http/tsuga: endpoint: ${TSUGA_OTLP_ENDPOINT} service: pipelines: metrics: receivers: [k8s_cluster] processors: [batch] exporters: [otlp_http/tsuga]
cluster.enabled bool true Enable cluster receiver (gateway) deployment  
cluster.extraAnnotationsMapping list [] Annotations mapping configuration for cluster receiver Maps Kubernetes pod annotations to OpenTelemetry resource attributes These are appended to default annotation mappings Format: List of objects with tag_name, key, and from fields  
cluster.extraEnvs list [] Extra environment variables for cluster receiver These are in addition to automatic secret env vars (TSUGA_API_KEY, TSUGA_OTLP_ENDPOINT, MY_POD_IP) Example: extraEnvs: - name: CUSTOM_VAR value: “custom-value”  
cluster.extraLabelMapping list [] Label mapping configuration for cluster receiver Maps Kubernetes pod labels to OpenTelemetry resource attributes These are appended to default label mappings Format: List of objects with tag_name, key, and from fields Example: extraLabelMapping: - tag_name: “app.version” key: “app.version” from: “pod”  
cluster.image string ”” OpenTelemetry Collector image for cluster receiver Defaults to: ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-k8s  
cluster.nodeSelector object {} Cluster-specific node selector If not set, inherits from global nodeSelector configuration  
cluster.resources object {} Cluster-specific resource limits and requests If not set, inherits from global resources configuration  
cluster.tolerations list [] Cluster-specific tolerations If not set, inherits from global tolerations configuration  
clusterName string ”” The name of the cluster to be used in the resource attributes This value is added to all telemetry data as k8s.cluster.name RECOMMENDED: Set this value to identify your cluster in telemetry data If not set, the k8s.cluster.name attribute will be omitted from telemetry  
fullnameOverride string ”” Override the full name used in resource naming  
image string ”” Default OpenTelemetry Collector image Used as fallback when cluster.image or agent.image are not set Format: registry/repository:tag  
nameOverride string ”” Override the chart name used in resource naming  
nodeSelector object {} Node selector for daemonset mode (agent) Used as default when agent.nodeSelector is not set  
opentelemetry-operator.admissionWebhooks.failurePolicy string "Ignore"    
opentelemetry-operator.crds.create bool false    
opentelemetry-operator.enabled bool false    
opentelemetry-operator.manager.collectorImage.repository string "otel/opentelemetry-collector-k8s"    
rbac object {"create":true} RBAC configuration  
rbac.create bool true Create RBAC resources (ClusterRole and ClusterRoleBinding) Required for collecting Kubernetes cluster metrics and metadata  
resources.limits object {"cpu":"500m","memory":"512Mi"} Resource limits  
resources.limits.cpu string “500m” CPU limit  
resources.limits.memory string “512Mi” Memory limit  
resources.requests object {"cpu":"100m","memory":"128Mi"} Resource requests  
resources.requests.cpu string “100m” CPU request  
resources.requests.memory string “128Mi” Memory request  
secret.create bool false Create a Kubernetes secret for OpenTelemetry configuration If true: creates a secret with values from tsuga configuration If false: uses an existing secret (must be created separately)  
secret.keyMapping object {"TSUGA_API_KEY":"TSUGA_API_KEY","TSUGA_OTLP_ENDPOINT":"TSUGA_OTLP_ENDPOINT"} Key mapping for existing secret (used when create=false) Maps chart expected keys to keys in the existing secret Example: If your secret uses “api-key” instead of “TSUGA_API_KEY”, set: keyMapping: TSUGA_API_KEY: “api-key”  
secret.keyMapping.TSUGA_API_KEY string “TSUGA_API_KEY” Key name in the secret for Tsuga API key  
secret.keyMapping.TSUGA_OTLP_ENDPOINT string “TSUGA_OTLP_ENDPOINT” Key name in the secret for Tsuga OTLP endpoint  
secret.name string “otel-secret” Name of the secret Used when create=true (name of secret to create) Used when create=false (name of existing secret to use)  
secret.validation object {"mandatoryKeys":["TSUGA_API_KEY","TSUGA_OTLP_ENDPOINT"],"requireMandatoryKeys":true} Validation settings  
secret.validation.mandatoryKeys list [“TSUGA_API_KEY”, “TSUGA_OTLP_ENDPOINT”] Mandatory keys that must be present in the secret  
secret.validation.requireMandatoryKeys bool true Require all mandatory keys to be present in the secret When true, chart will fail if required keys are missing  
serviceAccount object {"annotations":{},"create":true,"name":""} Service account configuration  
serviceAccount.annotations object {} Annotations to add to the service account Useful for IRSA (IAM Roles for Service Accounts) or workload identity  
serviceAccount.create bool true Create a service account for the OpenTelemetry collectors  
serviceAccount.name string ”” Name of the service account If not set, will be auto-generated based on release name  
statefulset.affinity object {} StatefulSet-specific affinity rules  
statefulset.config object {"extraConnectors":{},"extraExporters":{},"extraProcessors":{},"extraReceivers":{},"extraTelemetry":{},"service":{"extraExtensions":[],"pipelines":{"extraPipelines":{},"metrics":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]}}}} StatefulSet collector configuration (merge-based approach)  
statefulset.config.extraConnectors object {} Additional connectors to merge into the collector configuration  
statefulset.config.extraExporters object {} Additional exporters to merge into the collector configuration  
statefulset.config.extraProcessors object {} Additional processors to merge into the collector configuration  
statefulset.config.extraReceivers object {} Additional receivers to merge into the collector configuration  
statefulset.config.extraTelemetry object {} Additional telemetry to merge into the collector configuration  
statefulset.config.service object {"extraExtensions":[],"pipelines":{"extraPipelines":{},"metrics":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]}}} Service configuration  
statefulset.config.service.extraExtensions list [] Additional extensions to add to the service configuration  
statefulset.config.service.pipelines object {"extraPipelines":{},"metrics":{"extraExporters":[],"extraProcessors":[],"extraReceivers":[]}} Pipeline configuration  
statefulset.config.service.pipelines.extraPipelines object {} Additional pipelines to add to the service configuration  
statefulset.config.service.pipelines.metrics object {"extraExporters":[],"extraProcessors":[],"extraReceivers":[]} Metrics pipeline configuration  
statefulset.config.service.pipelines.metrics.extraExporters list [] Additional exporters to add to the metrics pipeline Added to default exporter (otlp_http/tsuga)  
statefulset.config.service.pipelines.metrics.extraProcessors list [] Additional processors to add to the metrics pipeline Added to default processors (k8s_attributes, batch)  
statefulset.config.service.pipelines.metrics.extraReceivers list [] Additional receivers to add to the metrics pipeline Added to default receiver (prometheus)  
statefulset.customConfig object {} Replace default config with complete custom configuration  
statefulset.extraAnnotationsMapping list [] Annotations mapping configuration for agent Maps Kubernetes pod annotations to OpenTelemetry resource attributes These are appended to default annotation mappings Format: List of objects with tag_name, key, and from fields  
statefulset.extraEnvs list [] Extra environment variables for statefulset collector  
statefulset.extraLabelMapping list [] Label mapping configuration for agent Maps Kubernetes pod labels to OpenTelemetry resource attributes These are appended to default label mappings Format: List of objects with tag_name, key, and from fields Example: extraLabelMapping: - tag_name: “app.version” key: “app.version” from: “pod”  
statefulset.image string ”” OpenTelemetry Collector image for statefulset collector  
statefulset.nodeSelector object {} StatefulSet-specific node selector  
statefulset.replicas int 1 Number of StatefulSet collector replicas The Target Allocator distributes targets evenly across replicas.  
statefulset.resources object {} StatefulSet-specific resource limits and requests  
statefulset.tolerations list [] StatefulSet-specific tolerations  
targetAllocator.enabled bool false Enable Target Allocator and paired StatefulSet collector  
targetAllocator.spec object {} TargetAllocator CR spec (full passthrough) All fields are passed directly to the TargetAllocator CR spec. Ref: https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#targetallocator  
targetAllocator.spec.allocationStrategy string “consistent-hashing” Allocation strategy for distributing targets across collector replicas Options: consistent-hashing (default), least-weighted, per-node  
targetAllocator.spec.prometheusCR object {"enabled":false,"podMonitorSelector":{},"serviceMonitorSelector":{}} PrometheusCR configuration When enabled, the Target Allocator discovers ServiceMonitor and PodMonitor CRs. Requires monitoring.coreos.com RBAC rules (added automatically when enabled).  
targetAllocator.spec.prometheusCR.enabled bool false Enable ServiceMonitor/PodMonitor discovery  
targetAllocator.spec.prometheusCR.podMonitorSelector object {} Selector for PodMonitor resources An empty selector ({}) matches all PodMonitors in all namespaces.  
targetAllocator.spec.prometheusCR.serviceMonitorSelector object {} Selector for ServiceMonitor resources An empty selector ({}) matches all ServiceMonitors in all namespaces.  
tolerations list [] Tolerations for daemonset mode (agent) Used as default when agent.tolerations is not set  
tsuga.apiKey string ”” Tsuga API key for authentication Set via: –set tsuga.apiKey=”your-api-key-here” Or use external secrets: –set tsuga.apiKey=””  
tsuga.enabledForClusterReceiver bool true Enable Tsuga OTLP exporter for the cluster receiver (gateway)  
tsuga.enabledForDaemonset bool true Enable Tsuga OTLP exporter for the agent DaemonSet  
tsuga.enabledForStatefulset bool true Enable Tsuga OTLP exporter for the StatefulSet collector (when targetAllocator is enabled)  
tsuga.otlpEndpoint string ”” Tsuga OTLP endpoint for telemetry data Set via: –set tsuga.otlpEndpoint=”https://your-tsuga-endpoint.com”  
validation object {"enabled":true,"enforceNamingConventions":true,"maxNameLength":63} Resource naming validation  
validation.enabled bool true Enable resource name validation When enabled, validates resource names meet Kubernetes requirements  
validation.enforceNamingConventions bool true Validate naming conventions Enforces Kubernetes naming conventions (lowercase alphanumeric and hyphens)  
validation.maxNameLength int 63 Maximum length for resource names (Kubernetes limit is 63 characters)  

Contributing

Development Setup

  1. Fork the repository
  2. Clone your fork:
    git clone https://github.com/tsuga-dev/helm-charts.git
    cd helm-charts/charts/opentelemetry-kube-stack
    
  3. Create a feature branch:
    git checkout -b feature/your-feature-name
    
  4. Make your changes:
    • Update templates in templates/
    • Update values in values.yaml
    • Add tests in tests/
    • Update documentation

Testing

Unit Tests

# Run unit tests
make unittest

# Run a specific test file
helm unittest -f 'tests/secret_test.yaml' .

Integration Tests

# Run integration tests
make integration
# or
./tests/integration/test-deployment.sh

Security Tests

# Run security scan
make security
# or
./tests/security/security-scan.sh

Linting

# Lint templates
make lint
# or
helm lint .

Template Testing

# Test rendering
make template
# or
helm template test . --set tsuga.otlpEndpoint="test" --set tsuga.apiKey="test"

Documentation

To update the parameter documentation in the README:

# Generate documentation using helm-docs (run from the repo root)
helm-docs --chart-search-root=charts/opentelemetry-kube-stack

This will automatically update the parameter reference section in the README based on comments in values.yaml.

Code Style

License

This chart is licensed under the Apache 2.0 License. See the LICENSE file for details.

Support

For support and questions: