Deploy Beyla in Kubernetes with Helm
Note
For more details about the diverse Helm configuration options, check out the Beyla Helm chart options document.
Contents:
- Deploying Beyla from helm
- Configuring Beyla
- Configuring Beyla metadata
- Providing secrets to the Helm configuration
Deploying Beyla from helm
First, you need to add the Grafana helm repository to Helm:
helm repo add grafana https://grafana.github.io/helm-chartsThe following command deploys a Beyla DaemonSet with a default configuration in the beyla namespace:
helm install beyla -n beyla --create-namespace grafana/beylaThe default Beyla configuration:
- exports the metrics as Prometheus metrics in the Pod HTTP port
9090,/metricspath. - tries to instrument all the applications in your cluster.
- only provides application-level metrics and excludes network-level metrics by default
- configures Beyla to decorate the metrics with Kubernetes metadata labels, for example
k8s.namespace.nameork8s.pod.name
Configuring Beyla
You might want to override the default configuration of Beyla. For example, to export the metrics and/or spans as OpenTelemetry instead of Prometheus, or to restrict the number of services to instrument.
You can override the default Beyla configuration options with your own values.
For example, create a helm-beyla.yml file with a custom configuration:
config:
data:
# Contents of the actual Beyla configuration file
discovery:
instrument:
- k8s_namespace: demo
- k8s_namespace: blog
routes:
unmatched: heuristicThe config.data section contains a Beyla configuration file, documented in the
Beyla configuration options documentation.
Then pass the overridden configuration to the helm command with the -f flag. For example:
helm install beyla grafana/beyla -f helm-beyla.ymlor, if the Beyla chart was previously deployed:
helm upgrade beyla grafana/beyla -f helm-beyla.ymlConfiguring Beyla metadata
If Beyla exports the data using the Prometheus exporter, you might need to override the Beyla Pod
annotations to let it be discoverable by your Prometheus scraper. You can add the following
section to the example helm-beyla.yml file:
podAnnotations:
prometheus.io/scrape: "true"
prometheus.io/path: "/metrics"
prometheus.io/port: "9090"Analogously, the Helm chart allows overriding names, labels, and annotations for multiple resources involved in the deployment of Beyla, such as service accounts, cluster roles, security contexts, etc. The Beyla Helm chart documentation describes the diverse configuration options.
Providing secrets to the Helm configuration
If you are submitting directly the metrics and traces to Grafana Cloud via the
OpenTelemetry Endpoint, you need to provide the credentials via the
OTEL_EXPORTER_OTLP_HEADERS environment variable.
The recommended way is to store such value in a Kubernetes Secret and then specify the environment variable referring to it from the Helm configuration.
For example, deploy the following secret:
apiVersion: v1
kind: Secret
metadata:
name: grafana-secret
type: Opaque
stringData:
otlp-headers: "Authorization=Basic ...."Then refer to it from the helm-config.yml file via the envValueFrom section:
env:
OTEL_EXPORTER_OTLP_ENDPOINT: "<...your Grafana Cloud OTLP endpoint URL...>"
envValueFrom:
OTEL_EXPORTER_OTLP_HEADERS:
secretKeyRef:
key: otlp-headers
name: grafana-secret


