Last updated: July 5, 2026
Platform-Specific Notes and Compatibility
This document provides platform-specific guidance, compatibility notes, and workarounds for running the Dash0 operator on various Kubernetes distributions and environments.
Table of Contents
- AWS EKS
- GKE Autopilot
- Azure AKS
- Open Policy Agent (OPA Gatekeeper)
- Kyverno Admission Controller
- GitOps Deployments
- ArgoCD
- Local Development Environments
Notes on AWS EKS
If your telemetry from an AWS EKS cluster is missing cloud.provider, cloud.platform and other cloud.* resource
attributes, refer to the resource detection processor documentation.
In particular, make sure that IMDS is
available on your EKS nodes.
Notes on GKE Autopilot
When deploying the Dash0 operator to a GKE Autopilot cluster, provide the following additional setting when applying the Helm chart:
1234operator:gke:autopilot:enabled: true
GKE Autopilot restricts what workloads
in an autopilot clusters can do.
With operator.gke.autopilot.enabled set to true, the Dash0 operator Helm chart deploys an
auto.gke.io/AllowlistSynchronizer resource into the target cluster, which in turn will add the required
auto.gke.io/WorkloadAllowlist resources for Dash0 workloads (the operator and the OpenTelemetry collectors it
manages).
This allows the Dash0 operator to work on GKE Autopilot clusters.
Not all restrictions can be lifted via workload allowlist, the following features are not available on GKE Autopilot clusters:
- collecting utilization metrics with the
kubeletstatsreceiver is disabled; collecting these requires access to the/podendpoint of the kubelet API which is not available in GKE autopilot due to the lack of thenodes/proxypermission:k8s.pod.cpu_limit_utilization,k8s.pod.cpu_request_utilization,k8s.pod.memory_limit_utilization, andk8s.pod.memory_request_utilization
- collecting the extra metadata labels
container.idandk8s.volume.typefor thekubeletstatsreceiver metrics is disabled, collecting these requires access to the/podendpoint of the kubelet API which is not available in GKE autopilot due to the lack of thenodes/proxypermission
Refer to https://cloud.google.com/kubernetes-engine/docs/how-to/run-autopilot-partner-workloads for more information
on AllowlistSynchronizer, WorkloadAllowlist, and related concepts.
Managing the AllowlistSynchronizer Manually
As an alternative to letting the Helm chart install the AllowlistSynchronizer, you can also choose to manage this
manually, if you prefer:
12345operator:gke:autopilot:enabled: truedeployAllowlistSynchronizer: false
With these settings, the Dash0 operator Helm chart will not deploy the AllowlistSynchronizer.
Using these settings requires that you deploy the Dash0 AllowlistSynchronizer before installing the Dash0 operator.
To do that, create the following file dash0-gke-autopilot-allowlist-synchronizer.yaml:
1234567apiVersion: auto.gke.io/v1kind: AllowlistSynchronizermetadata:name: dash0-allowlist-synchronizerspec:allowlistPaths:- Dash0/operator/*
Then deploy it as follows:
1kubectl apply -f dash0-gke-autopilot-allowlist-synchronizer.yaml
When managing the AllowlistSynchronizer manually, you might need to update it from time to time for future Dash0
operator releases.
Notes on Azure AKS
In AKS clusters that have the Azure Policy add-on enabled, it is highly recommended to use a volume for filelog offsets instead of the default filelog offset config map.
Using the default config map filelog offset storage in AKS clusters with this add-on can lead to severe performance issues.
Notes on the Open Policy Agent
In clusters that have the OPA gatekeeper deployed, it is highly recommended to use a volume for filelog offsets instead of the default filelog offset config map.
Using the default config map filelog offset storage in clusters with this component can lead to severe performance issues.
Notes on Kyverno Admission Controller
In clusters that have the Kyverno admission controller deployed, it is highly recommended to either:
- Use a volume for filelog offsets instead of the default filelog offset config map, or
- Exclude ConfigMaps (or all resource types) in the Dash0 operator's namespace from Kyverno's processing.
Leaving Kyverno processing in place and using the config map filelog offset storage can lead to severe performance issues, since the default config map for filelog offsets is updated very frequently. This can cause Kyverno to consume a lot of CPU and memory resources, potentially even leading to OOMKills of the Kyverno admission controller.
Notes on GitOps
When deploying workloads via GitOps tools like ArgoCD or Flux in a cluster where the Dash0 operator is installed, some care needs to be exercised to not create conflicts between the workload definition in the GitOps repository and the workload modifications that are applied automatically by the Dash0 operator.
Otherwise, workload settings might flip-flop between what the GitOps system wants to apply and what the Dash0 operator does, or the GitOps system might overwrite the Dash0 operator's settings, thereby breaking telemetry collection for the workload.
Environment Variables to Avoid in GitOps
Environment variable definitions in pod spec templates are the most likely source of conflict. To avoid conflicts, it is recommended to not define the following environment variables via GitOps:
OTEL_EXPORTER_OTLP_ENDPOINTOTEL_EXPORTER_OTLP_PROTOCOLOTEL_PROPAGATORSLD_PRELOADDASH0_NODE_IPDASH0_OTEL_COLLECTOR_BASE_URLOTEL_INJECTOR_K8S_NAMESPACE_NAMEOTEL_INJECTOR_K8S_POD_NAMEOTEL_INJECTOR_K8S_POD_UIDOTEL_INJECTOR_K8S_CONTAINER_NAMEOTEL_INJECTOR_SERVICE_NAMEOTEL_INJECTOR_SERVICE_NAMESPACEOTEL_INJECTOR_SERVICE_VERSIONOTEL_INJECTOR_RESOURCE_ATTRIBUTES
This recommendation does not apply to workloads that are excluded from workload instrumentation or workloads in namespaces without a Dash0 monitoring resource or a monitoring resource with instrumentation disabled.
Notes on ArgoCD
As many other Helm charts, the Dash0 operator Helm chart regenerates TLS certificates for in-cluster communication, that is, for its services and webhooks. The certificate will be regenerated every time the Dash0 operator Helm chart is applied.
For users deploying the Dash0 operator via ArgoCD, and in particular without using ArgoCD's auto-sync feature, the certificates and derived data (ca.crt, tls.crt, tls.key, caBundle) will show up as a diff in the ArgoCD UI. The certificate is also regenerated every time the hard refresh option is used in ArgoCD, since this action will trigger rendering the Helm chart templates again, even if nothing has changed in the git repository.
Ignoring Certificate Diffs
To avoid this, you can instruct ArgoCD to ignore these particular differences. Here is an example for an argoproj.io/v1alpha1.Application resource with ignoreDifferences:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950---apiVersion: argoproj.io/v1alpha1kind: Applicationmetadata:name: dash0-operatornamespace: argocdfinalizers:- resources-finalizer.argocd.argoproj.iospec:source:chart: dash0-operatorrepoURL: https://dash0hq.github.io/dash0-operatortargetRevision: ...# ... your current spec for the dash0-operator ArgoCD application# Ignore certificates which are generated on the fly during Helm chart template rendering:ignoreDifferences:- kind: Secretname: dash0-operator-certificatesjsonPointers:- /data/ca.crt- /data/tls.crt- /data/tls.key- group: admissionregistration.k8s.iokind: MutatingWebhookConfigurationname: dash0-operator-injectorjsonPointers:- /webhooks/0/clientConfig/caBundle- group: admissionregistration.k8s.iokind: MutatingWebhookConfigurationname: dash0-operator-monitoring-mutatingjsonPointers:- /webhooks/0/clientConfig/caBundle- group: admissionregistration.k8s.iokind: MutatingWebhookConfigurationname: dash0-operator-operator-configuration-mutatingjsonPointers:- /webhooks/0/clientConfig/caBundle- group: admissionregistration.k8s.iokind: ValidatingWebhookConfigurationname: dash0-operator-monitoring-validatorjsonPointers:- /webhooks/0/clientConfig/caBundle- group: admissionregistration.k8s.iokind: ValidatingWebhookConfigurationname: dash0-operator-operator-configuration-validatorjsonPointers:- /webhooks/0/clientConfig/caBundle
Local Development Environments
Notes on Running The Operator on Apple Silicon
When running the operator on an Apple Silicon host (M1, M3 etc.), for example via Docker Desktop, some attention needs to be paid to the CPU architecture of images. The architecture of the Kubernetes node for this scenario will be arm64.
When running a single-architecture amd64 image (as opposed to a single-architecture arm64 image or a multi-platform build containing amd64 as well as arm64), the operator will prevent the container from starting.
Why This Happens
The reason for this is the interaction between Rosetta emulation and how the operator works:
- The Dash0 instrumentation image (which is added as an init container and contains the OpenTelemetry injector) is a multi-platform image, supporting both
amd64andarm64. - When this image is pulled from an Apple Silicon machine, it automatically pulls the
arm64variant. - That is, the injector binary that is added via the init container is compiled for
arm64. - Now, when the application from your
amd64application image is started, the injector and the application will be incompatible, as they have been built for two different CPU architectures.
Under normal circumstances, an amd64 image would not work on an arm64 Kubernetes node anyway, but in the case of Docker Desktop on MacOS, this combination is enabled due to Docker Desktop automatically running amd64 images via Rosetta2 emulation.
Workarounds
You can work around this issue by one of the following methods:
- Using an
amd64Kubernetes node - By building a multi-platform image for your application
- By building the application as an
arm64image (e.g. by using--platform=linux/arm64when building the image)
Notes on Running The Operator on Docker Desktop
The hostmetrics receiver will be disabled when using Docker as the container runtime.
Notes on Running The Operator on Minikube
The hostmetrics receiver will be disabled when using Docker as the container runtime.
See Also
- Advanced Configuration - For filelog offset volumes, cert-manager, and other advanced topics
- Auto-Instrumentation - For workload instrumentation details
- Configuration - For general operator configuration
- Troubleshooting - For debugging issues