recipes/beyla-golden-signals/gke/beyla-daemonset.yaml (108 lines of code) (raw):
# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: beyla-agent
labels:
app: beyla
spec:
selector:
matchLabels:
app: beyla
template:
metadata:
labels:
app: beyla
annotations:
# allow beyla to write to /sys/fs/bpf by setting the
# apparmor policy to unconfined.
container.apparmor.security.beta.kubernetes.io/beyla: "unconfined"
spec:
serviceAccountName: beyla
hostPID: true
initContainers:
- name: mount-bpf-fs
image: grafana/beyla:1.8.6
args:
# Create the directory using the Pod UID, and mount the BPF filesystem.
- 'mkdir -p /sys/fs/bpf/$BEYLA_BPF_FS_PATH && mount -t bpf bpf /sys/fs/bpf/$BEYLA_BPF_FS_PATH'
command:
- /bin/bash
- -c
- --
securityContext:
# The init container is privileged so that it can use bidirectional mount propagation
privileged: true
volumeMounts:
- name: bpffs
mountPath: /sys/fs/bpf
# Make sure the mount is propagated back to the host so it can be used by the Beyla container
mountPropagation: Bidirectional
env:
- name: KUBE_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: BEYLA_BPF_FS_PATH
value: beyla-$(KUBE_NAMESPACE)
containers:
- name: beyla
resources:
requests:
cpu: 10m
memory: 100Mi
image: grafana/beyla:1.8.6
securityContext:
seccompProfile:
type: RuntimeDefault
runAsUser: 0
readOnlyRootFilesystem: true
capabilities:
add:
- BPF
- SYS_PTRACE
- NET_RAW
- CHECKPOINT_RESTORE
- DAC_READ_SEARCH
- PERFMON
drop:
- ALL
env:
- name: BEYLA_CONFIG_PATH
value: "/config/beyla-config.yml"
- name: KUBE_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: BEYLA_BPF_FS_PATH
value: beyla-$(KUBE_NAMESPACE)
volumeMounts:
- name: bpffs
mountPath: /sys/fs/bpf
# Use HostToContainer to propagate the mount from the init container to the Beyla container
mountPropagation: HostToContainer
- name: beyla-config
mountPath: /config
volumes:
- name: bpffs
hostPath:
path: /sys/fs/bpf
- name: beyla-config
configMap:
name: beyla-config
---
apiVersion: v1
kind: ConfigMap
metadata:
name: beyla-config
data:
beyla-config.yml: |
discovery:
services:
# only gather metrics from workloads running as a pod
- k8s_pod_name: .+
skip_go_specific_tracers: true
otel_metrics_export:
endpoint: http://otel-collector:4317
interval: 30s
attributes:
kubernetes:
enable: true
# drop_external only collects golden signal metrics for kubernetes entities (e.g. pods), which reduces resource usage.
drop_external: true
# disable_informers prevents Beyla from watching k8s resources, and reduces the load on the kubernetes API Server.
disable_informers: [replicaset, service, node]
routes:
unmatched: wildcard
ebpf:
bpf_fs_base_dir: /sys/fs/bpf