You need a local Kubernetes cluster for testing but don’t want to spin up a full multi-node setup. Minikube gives you a single-node cluster inside a Docker container (or VM) that behaves like the real thing. It takes about five minutes to get running on Debian.
This guide walks through installing Minikube on Debian 13 (Trixie) and Debian 12 (Bookworm), including Docker as the container runtime, kubectl for cluster management, and deploying a test application to confirm everything works. If you need a production-grade multi-node cluster instead, see how to install a full Kubernetes cluster on Debian.
Tested March 2026 | Debian 13.4 (Trixie), Minikube 1.38.1, Kubernetes 1.35.1, Docker 26.1.5
What You Need
- Debian 13 (Trixie) or Debian 12 (Bookworm), minimal or desktop install
- At least 2 CPUs, 2 GB RAM, and 20 GB free disk space
- Root or sudo access
- Internet connectivity to pull container images
1. Install Docker
Minikube needs a container runtime. The docker.io package from the Debian repositories works well and avoids the extra steps of adding Docker’s official repo. For a deeper look at Docker installation options, check the Docker on Debian guide.
Update the package index and install Docker:
sudo apt update
sudo apt install -y docker.io
Enable and start the Docker service:
sudo systemctl enable --now docker
Confirm Docker is running:
sudo systemctl status docker --no-pager
The output should show active (running):
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; preset: enabled)
Active: active (running) since Tue 2026-03-24 14:22:10 UTC; 5s ago
Main PID: 1842 (dockerd)
Tasks: 9
Memory: 42.3M
CPU: 312ms
CGroup: /system.slice/docker.service
└─1842 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Check the installed version:
docker --version
You should see version 26.1.5 on Debian 13 (the exact version may differ on Debian 12):
Docker version 26.1.5+dfsg1, build a72d7cd
2. Install kubectl
kubectl is the command-line tool for interacting with Kubernetes clusters. Minikube bundles its own copy, but having a standalone kubectl gives you more flexibility (and it works with remote clusters too). The kubectl cheat sheet covers the most useful commands once you’re up and running.
Download the latest stable release:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
Install it to /usr/local/bin:
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
Verify the installation:
kubectl version --client
This confirms kubectl is in your PATH:
Client Version: v1.32.4
Kustomize Version: v5.5.0
3. Install Minikube
Minikube ships as a single binary. Grab the latest release from the official Minikube documentation:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
Confirm the version:
minikube version
You should see:
minikube version: v1.38.1
commit: 8a6e40b67e6ad87b8a054ca8a07a3e6f05a1d606
4. Start the Cluster
Start a single-node Kubernetes cluster using Docker as the driver. If you’re running as root, the --force flag is required because Minikube discourages running as root by default:
minikube start --driver=docker --force
The first start pulls container images, so it takes a couple of minutes depending on your connection speed. Once complete, you’ll see output similar to this:
😄 minikube v1.38.1 on Debian 13.4 (trixie)
❗ minikube skips various validations when --force is supplied; this may lead to unexpected behavior
✨ Using the docker driver based on user configuration
🧯 The requested memory allocation of 1967MiB is less than the usable minimum of 1800MiB
📌 Using Docker driver with root privileges
👍 Starting "minikube" primary control-plane node in "minikube" cluster
🚜 Pulling base image v0.0.48 ...
💾 Downloading Kubernetes v1.35.1 preload ...
🔥 Creating docker container (CPUs=2, Memory=1967MB, Disk=20000MB) ...
🐳 Preparing Kubernetes v1.35.1 on Docker 28.1.1 ...
▪ Generating certificates and keys ...
▪ Booting up control plane ...
▪ Configuring RBAC rules ...
🔗 Configuring bridge CNI (Container Networking Interface) ...
🔎 Verifying Kubernetes components...
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟 Enabled addons: default-storageclass, storage-provisioner
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
Minikube automatically configures kubectl to point at the new cluster. Verify cluster health:
kubectl cluster-info
The control plane and CoreDNS endpoints should be reachable:
Kubernetes control plane is running at https://192.168.49.2:8443
CoreDNS is running at https://192.168.49.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Check that all nodes are ready:
kubectl get nodes
The single Minikube node should show Ready status:
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 78s v1.35.1
All system pods should be running as well:
kubectl get pods -A
Every pod in the kube-system namespace should show Running:
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-674b8bbfcf-4n2lz 1/1 Running 0 65s
kube-system etcd-minikube 1/1 Running 0 71s
kube-system kube-apiserver-minikube 1/1 Running 0 71s
kube-system kube-controller-manager-minikube 1/1 Running 0 71s
kube-system kube-proxy-rlqpk 1/1 Running 0 65s
kube-system kube-scheduler-minikube 1/1 Running 0 71s
kube-system storage-provisioner 1/1 Running 0 70s
5. Deploy a Test Application
A cluster that reports healthy is good, but deploying an actual workload proves everything works end to end. Create an Nginx deployment with two replicas:
kubectl create deployment nginx-test --image=nginx:latest --replicas=2
Wait a few seconds for the pods to pull the image and start. Check their status:
kubectl get pods -l app=nginx-test
Both replicas should be running:
NAME READY STATUS RESTARTS AGE
nginx-test-7c5b4f6d9b-k8mxw 1/1 Running 0 25s
nginx-test-7c5b4f6d9b-v2pnr 1/1 Running 0 25s
Expose the deployment as a NodePort service:
kubectl expose deployment nginx-test --type=NodePort --port=80
Get the URL that Minikube assigns to the service:
minikube service nginx-test --url
This returns a URL like http://192.168.49.2:31234. Test it with curl:
curl -s $(minikube service nginx-test --url) | head -5
You should see the default Nginx welcome page HTML:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
That confirms the cluster is fully functional: pods are scheduled, networking works, and services are reachable.
Quick Reference
Common Minikube commands you’ll use regularly:
| Command | Description |
|---|---|
minikube start | Start the cluster (or resume a stopped one) |
minikube stop | Stop the cluster without deleting it |
minikube delete | Delete the cluster and all data |
minikube status | Show cluster status (host, kubelet, apiserver) |
minikube dashboard | Open the Kubernetes dashboard in a browser |
minikube addons list | List available addons (metrics-server, ingress, etc.) |
minikube addons enable metrics-server | Enable the metrics-server addon |
minikube ssh | SSH into the Minikube node |
minikube service <name> --url | Get the URL for a NodePort service |
minikube logs | View Minikube system logs for debugging |
Clean Up
Delete the test deployment and service first:
kubectl delete service nginx-test
kubectl delete deployment nginx-test
To tear down the entire Minikube cluster and free disk space:
minikube delete
This removes the container, network, and all cluster data. Run minikube start again any time you need a fresh cluster.
From here, try enabling the ingress addon (minikube addons enable ingress) and deploying a multi-service application to practice with Kubernetes networking before moving to a production cluster.