Operate · Prerequisites
Dapr
Dapr control-plane prerequisites and sidecar-injection expectations
Service-to-service communication runs over Dapr. The chart bundles the Dapr control plane by default (dapr.installControlPlane: true) and installs it into the release namespace.
The Dapr sidecar is injected by a mutating webhook (dapr-sidecar-injector) that only injects into pods created after it is Ready. Because a single helm install creates the control plane and the application pods together, some app pods can start before the injector is ready and come up without a sidecar (1/1 instead of 2/2).
To avoid this on a fresh install, choose one of these paths:
- Install Dapr first (recommended for repeatable installs): set
dapr.installControlPlane: falseanddapr.controlPlaneNamespaceto the namespace you install Dapr into (for exampledapr-system), install Dapr separately, wait untildapr-sidecar-injectorisReady, then runhelm install. Without the namespace the chart assumes Dapr runs in the release namespace, and the install never becomes ready. See Existing Dapr installations. - Single install, then restart: install everything in one go, then run
kubectl -n <ns> rollout restart deploymentonce the control plane is healthy so every pod picks up a sidecar.
See Install troubleshooting → Pods stuck at 1/1 for recovery details.