Skip to main content

Spin Up a Local Kubernetes Cluster with kind in Minutes

A simple step-by-step guide to installing kind and creating disposable Kubernetes clusters for development

In this post, you’ll learn how to create a fully functional Kubernetes cluster on your local machine using kind (Kubernetes IN Docker). We’ll walk through installing kind, creating and interacting with your cluster via kubectl, and cleaning up when you’re done. By the end, you’ll have a lightweight, disposable Kubernetes environment ideal for development, testing, or learning.


Why Use kind?

  • Lightweight & Fast
    kind runs each Kubernetes node as a Docker container—no need for full virtual machines or heavy orchestration layers.

  • Disposable Environments
    Spin up and tear down clusters in seconds, making it perfect for testing new configurations or running CI pipelines.

  • Kubernetes‑Native
    You get a real upstream Kubernetes cluster; what works on kind will work the same in any other K8s environment.


Prerequisites

Before you begin, ensure you have:

  • Docker installed and running on your system.
  • kubectl, the Kubernetes CLI, for interacting with your cluster.
  • A terminal (bash, PowerShell, etc.) with permissions to run Docker commands.

1. Install kind

Choose the installation method that best fits your platform and preferences:

a) Download the Release Binary

Linux (AMD64):

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.27.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

macOS (Intel):

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.27.0/kind-darwin-amd64
chmod +x ./kind
mv ./kind ~/bin/

Windows (PowerShell):

curl.exe -Lo kind.exe https://kind.sigs.k8s.io/dl/v0.27.0/kind-windows-amd64
Move-Item .\kind.exe C:\tools\kind.exe

b) Using Homebrew (macOS / Linux)

brew install kind

c) Using Go

If you have Go (≥1.16) installed:

go install sigs.k8s.io/kind@v0.27.0

2. Create Your First Cluster

With kind installed, spinning up a cluster is as simple as:

kind create cluster

By default, this command:

  • Pulls a pre‑built node image matching kind v0.27.0.
  • Creates a cluster named kind.
  • Waits until the control plane is ready.

Customization Options

  • Different name:
    kind create cluster --name my-cluster
  • Specify Kubernetes version/image:
    kind create cluster --image kindest/node:v1.25.0
  • Block until ready (e.g., wait up to 2 minutes):
    kind create cluster --wait 2m

3. Interact with Your Cluster

kind updates your ~/.kube/config automatically. To verify:

kubectl cluster-info --context kind-kind

You should see the API server endpoint and other control‑plane services.

List nodes:

kubectl get nodes

Deploy a test NGINX pod:

kubectl run nginx --image=nginx --restart=Never
kubectl get pods

Expose it on a NodePort:

kubectl expose pod nginx --port=80 --type=NodePort
kubectl get svc nginx

Then visit http://localhost:<NodePort> in your browser.


4. Manage Multiple Clusters

Create multiple independent clusters:

kind create cluster --name dev
kind create cluster --name test

List all clusters:

kind get clusters
# Output:
# dev
# kind
# test

Switch kubectl context:

kubectl config use-context kind-test

5. Delete a Cluster

When you’re done, clean up:

kind delete cluster --name my-cluster

Omit --name to delete the default kind cluster.


Troubleshooting Tips

  • Docker not running?
    Ensure the Docker daemon is active and you have permission to use it.

  • Network/image pull issues?
    Check connectivity or pre‑pull images with docker pull.

  • kubectl: command not found?
    Install via your package manager (e.g., brew install kubectl) or add it to your PATH.


Conclusion

kind provides a fast, Kubernetes‑native way to run clusters locally. Whether you’re iterating on Helm charts, experimenting with CRDs, or teaching fellow engineers, kind makes it easy to get a sandboxed K8s environment in seconds. Next time you need a local cluster, reach for kind! 🚀

References

Happy clustering!