Kubernetes Dapr Created: 20 Jan 2026 Updated: 20 Jan 2026

Setting Up a 1+2 Node Kubernetes Cluster with Dapr on Windows

1. Prerequisites

Ensure you have the following installed on your Windows machine:

  1. Docker Desktop: Running with the WSL2 backend.
  2. Kind: Install via PowerShell: choco install kind or download the binary.
  3. Helm: For managing Dapr packages.
  4. kubectl: The Kubernetes command-line tool.

2. Creating the Multi-Node Cluster

Docker Desktop's default Kubernetes does not support multiple nodes. We will use a kind configuration file to define our 3-node topology.

Create a file named cluster-config.yaml:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker

Apply the configuration: Open your terminal (PowerShell or CMD) and run:

kind create cluster --name dapr-multi-node --config cluster-config.yaml

Verify that all three nodes are up and running:

kubectl get nodes

3. Installing Dapr via Helm

Once the multi-node cluster is ready, we proceed with the Dapr installation as specified.

Add and update the Helm repository:

# Add the Helm repo
helm repo add dapr https://dapr.github.io/helm-charts/
helm repo update

# Install Dapr 1.14.0
helm install dapr dapr/dapr \
--version 1.14.0 \
--namespace dapr-system \
--create-namespace \
--wait

4. Applying Custom Dapr Configuration

By default, Dapr enables mutual TLS (mTLS). To apply your specific configuration (disabling mTLS and setting TTL), create a file named dapr-config.yaml:

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: dapr-config
namespace: default
spec:
mtls:
enabled: false
workloadCertTTL: "24h"
allowedClockSkew: "15m"
controlPlaneTrustDomain: "cluster.local"
sentryAddress: "dapr-sentry.dapr-system.svc.cluster.local:80"

Deploy the configuration:

kubectl apply -f dapr-config.yaml

5. Verification on the Multi-Node Cluster

In a multi-node environment, it is crucial to ensure that the Dapr sidecars and control plane components are distributed across your nodes and are healthy.

Check Pod status and Node assignment:

kubectl get pods -n dapr-system -o wide
Note: In the output, look at the NODE column. You should see the Dapr components distributed between your control-plane and worker nodes. If a node is under-resourced (common on Windows laptops), some pods might stay in Pending. Ensure Docker Desktop has at least 8GB of RAM allocated.

Summary Checklist

  1. Cluster: Kind created 1 Control Plane and 2 Workers.
  2. Dapr: Installed via Helm into dapr-system namespace.
  3. Config: dapr-config applied to the default namespace with mTLS disabled.
  4. Health: Verified using kubectl get pods -o wide.
Share this lesson: