DEV Community

Parimal
Parimal

Posted on

Setting Up a Multi-Node Kubernetes Cluster with Kind on Windows

Want to test Kubernetes workloads locally without the complexity of cloud setup? Kind (Kubernetes in Docker) is your answer. In this guide, I'll show you how to install Kind on Windows and create a multi-node cluster that's perfect for local development and testing.

What You'll Achieve

By the end of this tutorial, you'll have:

  • ✅ Kind properly installed on Windows with WSL2
  • ✅ A working multi-node Kubernetes cluster (1 control-plane + 2 workers)
  • ✅ kubectl configured to manage your cluster
  • ✅ A solid foundation for Kubernetes experimentation

Why Choose Kind?

Kind (Kubernetes IN Docker) stands out for local development because it:

  • Starts fast - Clusters spin up in under 2 minutes
  • Runs lightweight - Uses Docker containers instead of heavy VMs
  • Supports multi-node - Test realistic cluster scenarios locally
  • Matches production - Runs actual Kubernetes, not a simulation
  • Integrates easily - Works seamlessly with your existing Docker workflow

Prerequisites

Before we start, ensure you have:

  • Windows 10/11 with WSL2 enabled
  • Docker Desktop installed and running
  • Chocolatey package manager
  • Basic familiarity with command line

Step 1: Install Chocolatey (If Not Already Installed)

Chocolatey makes installing tools on Windows much easier. Run this in PowerShell as Administrator:

Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
Enter fullscreen mode Exit fullscreen mode

Verify installation:

choco --version
Enter fullscreen mode Exit fullscreen mode

Step 2: Configure WSL2

Ensure WSL2 is your default version for optimal Docker performance:

# Set WSL2 as default
wsl --set-default-version 2

# Verify WSL2 is working
wsl --status
Enter fullscreen mode Exit fullscreen mode

Step 3: Install Docker Desktop

Install Docker Desktop with Chocolatey:

choco install docker-desktop -y
Enter fullscreen mode Exit fullscreen mode

Important: During setup, make sure to:

  • Enable WSL2 integration in Docker Desktop settings
  • Restart Docker Desktop after configuration

Verify Docker is working:

docker --version
docker run hello-world
Enter fullscreen mode Exit fullscreen mode

Step 4: Install kubectl and Kind

Install both tools using Chocolatey:

# Install kubectl for cluster management
choco install kubernetes-cli -y

# Install Kind
choco install kind -y
Enter fullscreen mode Exit fullscreen mode

Verify installations:

kubectl version --client
kind version
Enter fullscreen mode Exit fullscreen mode

Step 5: Create Your First Multi-Node Cluster

Create a Cluster Configuration

Create a file named kind-config.yaml:

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

This simple configuration creates:

  • 1 control-plane node (manages the cluster)
  • 2 worker nodes (run your applications)

Launch the Cluster

kind create cluster --name my-cluster --config kind-config.yaml
Enter fullscreen mode Exit fullscreen mode

This command will:

  • Pull Kubernetes node images
  • Create Docker containers for each node
  • Set up networking between nodes
  • Configure kubectl to connect to your cluster

Wait time: Usually 1-2 minutes depending on your internet speed.


Step 6: Verify Your Cluster

Check that everything is working:

# View cluster information
kubectl cluster-info

# List all nodes
kubectl get nodes

# Check system pods are running
kubectl get pods -n kube-system
Enter fullscreen mode Exit fullscreen mode

Expected output for kubectl get nodes:

NAME                       STATUS   ROLES           AGE   VERSION
my-cluster-control-plane   Ready    control-plane   2m    v1.28.0
my-cluster-worker          Ready    <none>          1m    v1.28.0
my-cluster-worker2         Ready    <none>          1m    v1.28.0
Enter fullscreen mode Exit fullscreen mode

Quick Test: Deploy a Simple Pod

Let's confirm your cluster works by running a simple nginx pod:

# Create a test pod
kubectl run test-nginx --image=nginx --port=80

# Check the pod is running
kubectl get pods

# Clean up
kubectl delete pod test-nginx
Enter fullscreen mode Exit fullscreen mode

Essential Kind Commands

Here are the key commands you'll use regularly:

# List all Kind clusters
kind get clusters

# Delete a cluster
kind delete cluster --name my-cluster

# Create cluster with different name
kind create cluster --name dev-cluster

# Switch between clusters (if you have multiple)
kubectl config get-contexts
kubectl config use-context kind-my-cluster
Enter fullscreen mode Exit fullscreen mode

Troubleshooting Common Issues

"Cannot connect to Docker daemon"

  • Ensure Docker Desktop is running
  • Check WSL2 integration is enabled in Docker settings

Cluster creation hangs

# Clean up and retry
kind delete cluster --name my-cluster
docker system prune -f
kind create cluster --name my-cluster --config kind-config.yaml
Enter fullscreen mode Exit fullscreen mode

kubectl context issues

# Check current context
kubectl config current-context

# Should show: kind-my-cluster
Enter fullscreen mode Exit fullscreen mode

What's Next?

Now that you have Kind installed and a working cluster, you're ready to:

  • Deploy applications and test them locally
  • Experiment with Kubernetes features safely
  • Set up CI/CD pipelines
  • Learn about networking, storage, and security

In upcoming posts, I'll cover deploying applications, setting up ingress controllers, and advanced Kind configurations.


Cleanup

When you're done experimenting, clean up your resources:

# Delete the cluster
kind delete cluster --name my-cluster

# Verify cleanup
kind get clusters
Enter fullscreen mode Exit fullscreen mode

Got Kind up and running? You now have a powerful local Kubernetes environment at your fingertips! What's the first thing you're planning to deploy on your new cluster? Let me know in the comments below.

Top comments (0)