Local Kubernetes Cluster Setup (minikube / kind / k3d)

Local Kubernetes tools let you run a real cluster on your laptop for development and testing. minikube is best for local exploration with addons; kind (Kubernetes IN Docker) is the standard for CI pipelines and multi-node testing; k3d runs k3s in Docker for the fastest startup. Docker Desktop includes a built-in single-node cluster as a zero-setup option.

Overview

Overview

Local Kubernetes tools fill the gap between laptop development and production clusters. kubeadm and Kubernetes the Hard Way cover production-grade HA setup; day-to-day development needs a cluster that starts in seconds, runs on your laptop, and is disposable.

What local clusters are for

  • Integration tests — A real API server that is created and thrown away per run
  • Iterating on Helm charts — Fast install and reinstall
  • Testing Operators — A disposable cluster to reconcile against

Where the ecosystem settled

  • kind — CI, including GitHub Actions
  • minikube, k3d — Local development
  • Docker Desktop's built-in cluster — Zero-friction onramp for developers who just want kubectl to work
  • kubeadm, Kubernetes the Hard Way — Production-grade HA setup, not the laptop loop

> [!TIP] Pick the tool by where it runs: kind in CI, minikube or k3d on the laptop.

Key concepts

minikube driver model
minikube uses a driver to create the cluster: docker (container), hyperkit/qemu (macOS VM), virtualbox (cross-platform VM). The docker driver requires no separate hypervisor and is fastest on Linux. On macOS, the qemu driver provides better isolation. --driver=docker is the current recommended default.
kind node-as-container model
kind runs each Kubernetes node (control-plane and worker) as a Docker container using a custom image (kindest/node) that includes kubeadm, kubelet, and containerd. Multiple worker containers on one machine simulate a real multi-node cluster. kind clusters are ephemeral — delete the containers and the cluster is gone.
k3s vs Kubernetes in k3d
k3s is a CNCF-certified lightweight Kubernetes distribution: removes alpha/unused features, replaces etcd with SQLite for single-node (or uses embedded etcd for HA), and ships as a single ~60MB binary. It is fully conformant — all standard Kubernetes APIs work. k3d wraps k3s nodes in Docker containers for easy cluster lifecycle management.
Loading local images into local clusters
Local clusters run in separate container/VM environments. docker build on your host does not automatically make the image available inside the cluster. Each tool has its own load command: minikube image load myapp:latest, kind load docker-image myapp:latest, k3d image import myapp:latest. Alternatively, run a local registry and push/pull via localhost:5000.

When to use it

  • Setting up a Kubernetes learning environment — minikube start --driver=docker and minikube dashboard
  • Running Kubernetes integration tests in GitHub Actions CI — kind via helm/kind-action
  • Local development with service port access on localhost — k3d with --port flag
  • Zero-setup Kubernetes on a developer laptop — Docker Desktop Kubernetes (Enable in Settings)
  • Multi-node cluster testing on a single machine — kind with a config file defining control-plane + worker nodes

Sign up free to read the full topic

More DevOps topics

Start free on Cariara · Coding problems · System design studio