Project: Grafana Pyroscope (Observability and Analysis / Observability)
File: setup-kubernetes.md

title: "Setup eBPF Profiling on Kubernetes" menuTitle: "Setting up on Kubernetes" description: "Setting up eBPF Profiling with Grafana Agent on Kubernetes" weight: 10 To set up eBPF profiling with Grafana Agent on Kubernetes, you need to: Verify that your cluster meets the prerequisites. Add the Grafana helm repository. Create a Grafana Agent configuration file. For more information, refer to . Install Grafana Agent. Verify that profiles are received. {{< docs/shared lookup="agent-deprecation.md" source="alloy" version="next" >}} Before you begin, you need: and installed with access to your Kubernetes cluster. A Pyroscope server where the Agent will send profiling data. Access to Grafana with the provisioned. {{< admonition type="note" >}} If you don't have a Grafana and/or a Pyroscope server, you can use the free plan to get started. {{< /admonition >}} The eBPF profiler requires a Linux kernel version >= 4.9 (due to ). `BPFPROGTYPEPERFEVENT` is a type of eBPF program that can be attached to hardware or software events, such as performance monitoring counters or tracepoints, in the Linux kernel. To print the kernel version of each node in your cluster, run: ```shell kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.nodeInfo.kernelVersion}{"\n"}{end}' ``` Make sure all nodes have a kernel version >= 4.9. We recommend using to install Grafana Agent. To add the Grafana Helm repository, run: ```shell helm repo add grafana https://grafana.github.io/helm-charts helm repo update ``` Verify that the repository was added successfully by running: ```shell helm search repo grafana/grafana-agent ``` It should return a list of available versions of Grafana Agent. Create a file named `values.yaml` with the following content: ```yaml agent: mode: 'flow' configMap: create: true content: | discovery.kubernetes "local_pods" { selectors { field = "spec.nodeName=" + env("HOSTNAME") role = "pod" } role = "pod" } pyroscope.ebpf "instance" { forward_to = [pyroscope.write.endpoint.receiver] targets = discovery.kubernetes.local_pods.targets } pyroscope.write "endpoint" { endpoint { basic_auth { password = "<PASSWORD>" username = "<USERNAME>" } url = "<URL>" } } securityContext: privileged: true runAsGroup: 0 runAsUser: 0 controller: hostPID: true ``` Replace the `<URL>` placeholder with the appropriate server URL. This could be the Grafana Cloud URL or your own custom Pyroscope server URL. If you need to send data to Grafana Cloud, you'll have to configure HTTP Basic authentication. Replace `<User>` with your Grafana Cloud stack user and `<Password>` with your Grafana Cloud API key. {{% admonition type="note" %}} If you're using your own Pyroscope server, you can remove the `basic_auth` section altogether. {{% /admonition %}} For more information, refer to the . To install the Grafana Agent, run: ```shell helm install pyroscope-ebpf grafana/grafana-agent -f values.yaml ``` Once configured, the Agent starts collecting eBPF profiles and send them to the Pyroscope server. To verify that the profiles are received by the Pyroscope server, go to the Pyroscope UI or . Select a profile type and a service from the drop-down menu.