When setting up Dapr on Kubernetes, you can use either the Dapr CLI or Helm.
kubernetes.io/os=linux
. You can deploy Dapr to Windows nodes if your application requires it. For more information, see Deploying to a hybrid Linux/Windows Kubernetes cluster.You can install Dapr on a Kubernetes cluster using the Dapr CLI.
You can install Dapr from an official Helm chart or a private chart, using a custom namespace, etc.
The -k
flag initializes Dapr on the Kubernetes cluster in your current context.
Verify the correct “target” cluster is set by checking kubectl context (kubectl config get-contexts)
.
kubectl config use-context <CONTEXT>
.Initialize Dapr on your cluster with the following command:
dapr init -k
Expected output
â Making the jump to hyperspace...
â
Deploying the Dapr control plane to your cluster...
â
Success! Dapr has been installed to namespace dapr-system. To verify, run "dapr status -k" in your terminal. To get started, go here: https://aka.ms/dapr-getting-started
Run the dashboard:
dapr dashboard -k
If you installed Dapr in a non-default namespace, run:
dapr dashboard -k -n <your-namespace>
Adding the --dev
flag initializes Dapr on the Kubernetes cluster on your current context, with the addition of Redis and Zipkin deployments.
The steps are similar to installing from the Dapr Helm chart, except for appending the --dev
flag to the init
command:
dapr init -k --dev
Expected output:
â Making the jump to hyperspace...
âšī¸ Note: To install Dapr using Helm, see here: https://docs.dapr.io/getting-started/install-dapr-kubernetes/#install-with-helm-advanced
âšī¸ Container images will be pulled from Docker Hub
â
Deploying the Dapr control plane with latest version to your cluster...
â
Deploying the Dapr dashboard with latest version to your cluster...
â
Deploying the Dapr Redis with latest version to your cluster...
â
Deploying the Dapr Zipkin with latest version to your cluster...
âšī¸ Applying "statestore" component to Kubernetes "default" namespace.
âšī¸ Applying "pubsub" component to Kubernetes "default" namespace.
âšī¸ Applying "appconfig" zipkin configuration to Kubernetes "default" namespace.
â
Success! Dapr has been installed to namespace dapr-system. To verify, run `dapr status -k' in your terminal. To get started, go here: https://aka.ms/dapr-getting-started
After a short period of time (or using the --wait
flag and specifying an amount of time to wait), you can check that the Redis and Zipkin components have been deployed to the cluster.
kubectl get pods --namespace default
Expected output:
NAME READY STATUS RESTARTS AGE
dapr-dev-zipkin-bfb4b45bb-sttz7 1/1 Running 0 159m
dapr-dev-redis-master-0 1/1 Running 0 159m
dapr-dev-redis-replicas-0 1/1 Running 0 159m
dapr-dev-redis-replicas-1 1/1 Running 0 159m
dapr-dev-redis-replicas-2 1/1 Running 0 158m
Installing Dapr from a private Helm chart can be helpful for when you:
Set the following parameters to allow dapr init -k
to install Dapr images from the configured Helm repository.
export DAPR_HELM_REPO_URL="https://helm.custom-domain.com/dapr/dapr"
export DAPR_HELM_REPO_USERNAME="username_xxx"
export DAPR_HELM_REPO_PASSWORD="passwd_xxx"
You can run Dapr with three replicas of each control plane pod in the dapr-system
namespace for production scenarios.
dapr init -k --enable-ha=true
The default namespace when initializing Dapr is dapr-system
. You can override this with the -n
flag.
dapr init -k -n mynamespace
Dapr is initialized by default with mTLS. You can disable it with:
dapr init -k --enable-mtls=false
You can wait for the installation to complete its deployment with the --wait
flag. The default timeout is 300s (5 min), but can be customized with the --timeout
flag.
dapr init -k --wait --timeout 600
Run the following command on your local machine to uninstall Dapr on your cluster:
dapr uninstall -k
You can install Dapr on Kubernetes using a Helm v3 chart.
âImportant: The latest Dapr Helm chart no longer supports Helm v2. Migrate from Helm v2 to Helm v3.
Add the Helm repo and update:
// Add the official Dapr Helm chart.
helm repo add dapr https://dapr.github.io/helm-charts/
// Or also add a private Dapr Helm chart.
helm repo add dapr http://helm.custom-domain.com/dapr/dapr/ \
--username=xxx --password=xxx
helm repo update
// See which chart versions are available
helm search repo dapr --devel --versions
Install the Dapr chart on your cluster in the dapr-system
namespace.
helm upgrade --install dapr dapr/dapr \
--version=1.15 \
--namespace dapr-system \
--create-namespace \
--wait
To install in high availability mode:
helm upgrade --install dapr dapr/dapr \
--version=1.15 \
--namespace dapr-system \
--create-namespace \
--set global.ha.enabled=true \
--wait
To install in high availability mode and scale select services independently of global:
helm upgrade --install dapr dapr/dapr \
--version=1.15 \
--namespace dapr-system \
--create-namespace \
--set global.ha.enabled=false \
--set dapr_scheduler.ha=true \
--set dapr_placement.ha=true \
--wait
See Guidelines for production ready deployments on Kubernetes for more information on installing and upgrading Dapr using Helm.
If you want to install the Dapr dashboard, use this Helm chart with the additional settings of your choice:
helm install dapr dapr/dapr-dashboard --namespace dapr-system
For example:
helm repo add dapr https://dapr.github.io/helm-charts/
helm repo update
kubectl create namespace dapr-system
# Install the Dapr dashboard
helm install dapr-dashboard dapr/dapr-dashboard --namespace dapr-system
Once the installation is complete, verify that the dapr-operator
, dapr-placement
, dapr-sidecar-injector
, and dapr-sentry
pods are running in the dapr-system
namespace:
kubectl get pods --namespace dapr-system
NAME READY STATUS RESTARTS AGE
dapr-dashboard-7bd6cbf5bf-xglsr 1/1 Running 0 40s
dapr-operator-7bd6cbf5bf-xglsr 1/1 Running 0 40s
dapr-placement-7f8f76778f-6vhl2 1/1 Running 0 40s
dapr-sidecar-injector-8555576b6f-29cqm 1/1 Running 0 40s
dapr-sentry-9435776c7f-8f7yd 1/1 Running 0 40s
helm uninstall dapr --namespace dapr-system
The default container images pulled on Kubernetes are based on distroless.
Alternatively, you can use Dapr container images based on Mariner 2 (minimal distroless). Mariner, officially known as CBL-Mariner, is a free and open-source Linux distribution and container base image maintained by Microsoft. For some Dapr users, leveraging container images based on Mariner can help you meet compliance requirements.
To use Mariner-based images for Dapr, you need to add -mariner
to your Docker tags. For example, while ghcr.io/dapr/dapr:latest
is the Docker image based on distroless, ghcr.io/dapr/dapr:latest-mariner
is based on Mariner. Tags pinned to a specific version are also available, such as 1.15-mariner
.
In the Dapr CLI, you can switch to using Mariner-based images with the --image-variant
flag.
dapr init -k --image-variant mariner
With Kubernetes and Helm, you can use Mariner-based images by setting the global.tag
option and adding -mariner
. For example:
helm upgrade --install dapr dapr/dapr \
--version=1.15 \
--namespace dapr-system \
--create-namespace \
--set global.tag=1.15.5-mariner \
--wait