Minikube on Windows WSL2 is a surprisingly efficient way to run a local Kubernetes cluster, but it’s not just about convenience; it unlocks a fundamentally different way of interacting with your cluster.

Let’s see it in action. Imagine you’re developing a microservice that needs to talk to a database. With Minikube on WSL2, you can run your Kubernetes cluster entirely within the Linux environment of your WSL2 distribution. This means your Kubernetes control plane, your pods, and even your Docker daemon are all running as Linux processes.

Here’s a typical setup. First, you’ll need to ensure Docker is running within your WSL2 distro.

# Inside your WSL2 terminal
sudo systemctl start docker

Then, you’ll install Minikube. The process is straightforward:

# Download the latest Minikube binary
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

# Install it
sudo install minikube-linux-amd64 /usr/local/bin/minikube

Now, you start Minikube, specifically telling it to use the docker driver. This is the key to running it inside WSL2.

# Start Minikube using the Docker driver
minikube start --driver=docker

Once it’s up, you can verify your Kubernetes context:

kubectl config current-context
# Expected output: minikube

And see your nodes:

kubectl get nodes
# Expected output:
# NAME       STATUS   ROLES           AGE   VERSION
# minikube   Ready    control-plane   60s   v1.28.3

You can then deploy your applications as usual. For instance, to deploy a simple Nginx pod:

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
minikube service nginx --url

The magic here is that all of this is happening within the Linux kernel provided by WSL2. Your Kubernetes API server, etcd, controller-manager, scheduler, and kubelet are all Linux processes. Your application pods are also running as Linux containers within the WSL2 environment. This isn’t just a VM with Linux inside; it’s a first-class Linux environment.

The primary problem Minikube on WSL2 solves is the friction of running Kubernetes on Windows. Historically, this meant either a cumbersome VirtualBox setup or the resource-intensive Docker Desktop. By leveraging WSL2’s native Linux kernel and its integration with Windows, Minikube can run with significantly less overhead. The docker driver, when used within WSL2, directly interfaces with the Docker daemon running inside your WSL2 distribution, eliminating an extra layer of virtualization for the container runtime. This means faster startup times, lower memory consumption, and more responsive cluster operations.

The mental model you should build is one of a self-contained Linux system where Kubernetes lives. When you kubectl apply, you’re sending requests to the Kubernetes API server that is running as a Linux process. When a pod starts, it’s a Linux container being orchestrated by Linux-native Kubernetes components. Your development workflow can be entirely within your WSL2 terminal, interacting with a fully functional Kubernetes cluster that feels native to that Linux environment. You’re not fighting against a compatibility layer; you’re operating within a Linux world.

When you use minikube start --driver=docker within WSL2, Minikube doesn’t spin up a separate virtual machine for Kubernetes. Instead, it instructs the Docker daemon already running within your WSL2 distribution to create the necessary containers for the Kubernetes control plane and nodes. These containers then run directly on the WSL2 Linux kernel. This is why it feels so much more integrated and performant than older methods.

The next step is often understanding how to expose services running inside Minikube to your Windows host network, which involves navigating WSL2’s networking capabilities.

Want structured learning?

Take the full Minikube course →