Setting Up Local Kubernetes for Development (Minikube/Kind/k3d)

Developing Kubernetes manifests against a production cluster is risky and involves long wait cycles. We set up local Kubernetes (Minikube, Kind, k3d) tailored to your stack, giving you full control and fast iteration. Our team delivers turnkey—from tool selection to deployment automation—ensuring reliable operation with ongoing support.

Our competencies:

Frequently Asked Questions

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1365
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1330
  • B2B Advance company logo design
    B2B Advance company logo design
    776
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1077
  • AIDER company logo development
    AIDER company logo development
    1022
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1113

Developing Kubernetes manifests directly against a production cluster is risky. Even a dev namespace doesn't give full control, and every push into CI involves a long cycle. A local cluster on a developer's laptop solves this: full access, fast iteration, isolation. We help set up a local Kubernetes tuned to your stack and processes: choose the right tool, configure a registry, and automate deployment. A properly tuned local cluster cuts manifest debugging time by 30-40%. Developers can test Helm charts, custom controllers, and operators without risking shared infrastructure. Infrastructure testing budget savings reach up to 30%. The cost of cluster setup is less than one hour of production downtime.

In this article we review three popular tools: Minikube, Kind, and k3d. Each has its own strengths, and the choice depends on your tasks—from simple testing to CI pipelines. We also cover typical issues: resource shortage, registry setup, and integration with local images.

What problems does local Kubernetes solve?

A local cluster gives the developer full control over the environment. You can:

  • Quickly test manifests, charts, and operators without waiting for CI.
  • Experiment with settings (e.g., RBAC or privileged pods).
  • Debug issues in isolation without affecting the team.
  • Use the same tools (Helm, Kustomize, ArgoCD) as in production.

How to choose: Minikube, Kind, or k3d?

Tool Type Startup Time Multi-node Clusters Built-in Add-ons RAM Consumption
Minikube VM or Docker 2-5 min Yes Ingress, metrics-server, dashboard 4-8 GB
Kind Docker (containers) 30 sec Yes (via config) No 2-4 GB
k3d Docker (k3s) 15-30 sec Yes (via CLI) Traefik, Registry 1-3 GB

Minikube is the oldest tool and the most feature-complete. It supports multiple drivers: Docker, VirtualBox, Hyper-V, QEMU. Built-in add-ons: ingress, metrics-server, dashboard, registry. For a developer who just wants to "run Kubernetes", it's the optimal choice.

minikube start --driver=docker --cpus=4 --memory=8g --kubernetes-version=v1.29.3
minikube addons enable ingress
minikube addons enable metrics-server

Kind (Kubernetes IN Docker) — each cluster node is a Docker container. No VM overhead, fast startup (~30 seconds). It's the favorite tool for CI testing of Kubernetes operators and controllers. Multi-node clusters via config:

---
# kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
    kubeadmConfigPatches:
      - |
        kind: InitConfiguration
        nodeRegistration:
          kubeletExtraArgs:
            node-labels: "ingress-ready=true"
    extraPortMappings:
      - containerPort: 80
        hostPort: 80
      - containerPort: 443
        hostPort: 443
  - role: worker
  - role: worker
kind create cluster --config kind-config.yaml --name dev 

k3d — a wrapper over k3s (lightweight Kubernetes from Rancher) in Docker. Faster than Kind, supports built-in load balancer (Traefik), built-in registry. Great choice for developing applications targeting k3s edge clusters.

k3d cluster create dev \
  --agents 2 \
  --k3s-arg "--disable=traefik@server:0" \
  --port "80:80@loadbalancer" \
  --port "443:443@loadbalancer"

How to set up a local registry for Kind?

The main pain point in local development is deploying your own images. docker push localhost:5000/myapp:dev works, but requires registry setup.

For Kind, the official script creates a registry in Docker and connects it to the Kind network:

# Start local registry
docker run -d --restart=always -p 5001:5000 --name kind-registry registry:2
# Connect to Kind network
docker network connect kind kind-registry
# Configure Kind to access registry without TLS
kubectl apply -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
  name: local-registry-hosting
  namespace: kube-public
data:
  localRegistryHosting.v1: |
    host: "localhost:5001"
    help: "https://kind.sigs.k8s.io/docs/user/local-registry/"
EOF

After that: docker build -t localhost:5001/myapp:dev . && docker push localhost:5001/myapp:dev, and the image is available in the cluster without extra configuration.

For Minikube it's simpler: eval $(minikube docker-env) switches the Docker CLI to the Docker daemon inside Minikube. docker build puts the image directly there. In the manifest, set imagePullPolicy: Never — the cluster uses the local image.

Step-by-step Minikube setup for development

  1. Install Minikube from the official repository: brew install minikube (macOS) or choco install minikube (Windows).
  2. Start the cluster: minikube start --driver=docker --cpus=2 --memory=4g.
  3. Enable needed add-ons: minikube addons enable ingress && minikube addons enable metrics-server && minikube addons enable dashboard.
  4. Open the dashboard: minikube dashboard.
  5. Set up local registry: eval $(minikube docker-env) and use docker build.

First, access the cluster via kubectl get nodes. If local kubectl is not configured, download it and run kubectl config use-context minikube.

Typical problems and solutions

A local cluster with 3-4 services plus Redis and PostgreSQL easily consumes 6-8 GB of RAM. If you work on a laptop with 16 GB, that's half of all memory. Solutions:

  • Run only needed services: kubectl scale deployment redis --replicas=0 when not required.
  • Use k3d instead of Minikube — k3s consumes less.
  • For databases, use port-forward to staging instead of running locally: kubectl port-forward -n staging svc/postgres 5432:5432.

Another problem is version mismatch. We set the cluster to a Kubernetes version identical to production, eliminating surprises during deployment.

Detailed example: setting up a multi-node cluster with Kind

Create a kind-config.yaml config with several worker nodes as shown above. Then run:

kind create cluster --config kind-config.yaml --name multinode kubectl get nodes 

For testing network policies, use the example from the Kind documentation.

What's included in our work

  • Selection and installation of the tool (Minikube/Kind/k3d) for your OS and laptop specifications.
  • Setup of integration with a local Docker registry and automatic image loading.
  • Configuration of an Ingress controller, monitoring (Prometheus + Grafana) on request.
  • Helm charts for typical components (nginx, PostgreSQL, Redis) with ready-to-use values.
  • Automation scripts to quickly recreate the cluster with a single command.
  • Documentation in English on usage and troubleshooting.
  • Team training: a 1-hour online workshop.
  • Guarantee of a working configuration — if something breaks, we fix it within 2 business days.

Timeframes and pricing

Setup for a single developer — 2–4 hours. For a team with shared configuration, documentation, and automation — 1–2 days. Pricing is individual after assessing your tasks. Contact us for a consultation: we'll evaluate the project and offer an optimal turnkey solution.

According to the official Kind documentation, a multi-node cluster can be created in 30 seconds. — Kind documentation

Our experience — over 5 years in Kubernetes and 50+ successful deployments. We are certified CKA engineers. We use Kind and Minikube as primary tools. Order a local cluster setup and accelerate your development.