If you’ve been in the DevOps world for a while, you surely remember the “old school” way of learning Kubernetes: downloading VirtualBox, fighting with Vagrant, waiting for full operating system images to download, and praying that your laptop had enough RAM to handle three simultaneous virtual machines.
It worked, yes. But it was slow, heavy, and painful for your computer’s fans.
In 2025, that no longer makes sense. The industry has matured, and so have local development tools. Today I want to show you how I set up my lab environments using Kind (Kubernetes in Docker).
This is the same configuration I use in the new updated edition of my book “Once Upon a Time Kubernetes”: lightweight, fast, and compatible with version 1.32+.
Why Kind and not Minikube or Vagrant?
Although Minikube is fantastic, Kind shines because of its architecture: it runs Kubernetes nodes as Docker containers, not as full virtual machines.
- Speed: A multi-layer cluster starts in less than 60 seconds.
- Resources: No more fixed reservations of 4GB of RAM per node. Docker manages memory dynamically.
- Realism: It allows us to simulate complex architectures (High Availability, Ingress, Storage Classes) by editing a simple YAML file.
Prerequisites
To follow this tutorial, make sure you have installed on your machine:
Docker(v27.0.0 or higher).kubectl(v1.32.0 or higher).kind(v0.30.0 or higher).
Let’s Get to Work: Your Cluster in 3 Steps
We are going to deploy a cluster with 1 Control-Plane node and 2 Worker nodes, simulating a real production environment.
1. The Source Code
You don’t have to invent anything from scratch. I have released the book’s infrastructure code on GitHub so anyone can use it. Clone the repository:
git clone https://github.com/mmorejon/once-upon-a-time-k8s.git
cd erase-una-vez-k8s
Note: Make sure you are on the
mainbranch to access the modern version with Kind.
2. The Automation
Inside the repository, you will find a script designed to automate tedious tasks (creating the cluster, installing the network CNI, configuring the default StorageClass, etc.).
Run it with the following command from the project root:
./bash/cluster.sh create
3. The Result
In less time than it takes to make a coffee, you will see how Kind downloads the node image (kindest/node:v1.32.0), spins up the containers, and automatically configures your kubectl context.
You can verify it manually by checking the status of the nodes:
kubectl get nodes
Expected output:
NAME STATUS ROLES AGE VERSION
book-control-plane Ready control-plane 2m10s v1.32.0
book-worker Ready <none> 1m45s v1.32.0
book-worker2 Ready <none> 1m45s v1.32.0
If you see all three nodes running version v1.32, congratulations! You now have a complete Data Center running on your laptop.
What Now? (The Next Level)
Having the cluster up and running is just the beginning. An empty cluster adds no value; what matters is what you deploy on it.
Do you know how to manage secrets securely? How to configure an Ingress to access your apps from the outside? How to perform updates without downtime (Rolling Updates)?
I designed this environment specifically to accompany the labs in my book, “Once Upon a Time Kubernetes”. I have just released the Updated 2025 Edition, where I guide you step-by-step from this empty cluster to mastering modern Cloud Native architecture.
If you want to stop copying commands and start understanding the architecture behind them:
- 📘 Get the book on Amazon: Check price and reviews
- 📲 Digital format on LeanPub: Download eBook
- 💻 Review the full code: View Repository on GitHub
See you in the cluster!
comments powered by Disqus