Overview
The kit includes a complete local development environment using three complementary tools:- KinD (Kubernetes in Docker): A real multi-node Kubernetes cluster running locally
- Tilt: Continuous development that rebuilds and redeploys on file changes
- mirrord: Run services directly on your host machine while connected to the KinD cluster
How It Works
KinD Cluster
KinD creates a real Kubernetes cluster using Docker containers as nodes. The kit’s configuration provides: Multi-node cluster: 1 control-plane + 2 worker nodes, matching a realistic production topology. Local container registry: Images built locally are pushed tolocalhost:5001 and pulled by the cluster, avoiding the need for external registries during development.
Stable networking: The cluster uses a dedicated Docker network (172.20.0.0/16) with cloud-provider-kind to assign real LoadBalancer IPs. Ingress gets 172.20.0.100, making URLs predictable.
sslip.io for DNS: Services are accessible via URLs like go-backend.172-20-0-100.sslip.io without /etc/hosts modifications.
Tilt
Tilt watches your source code and Kubernetes manifests, automatically rebuilding containers and redeploying when files change. Hierarchical Tiltfiles: The mainTiltfile includes infrastructure and services, each with their own Tiltfile. This mirrors the ArgoCD app-of-apps structure.
Dependency ordering: Resources declare dependencies (e.g., apps wait for cloudnative-pg operator), ensuring correct startup order.
Smart rebuilds: Only affected resources rebuild. Change application code and only that container rebuilds. Change a Helm value and only that release updates.
Live UI: Tilt’s web UI shows resource status, logs, and build times. Click a resource to see its logs, trigger manual rebuilds, or debug failures.
mirrord
While Tilt runs your services inside containers in the KinD cluster, mirrord lets you run a service directly on your host machine while staying connected to the cluster. This provides several advantages for debugging and profiling: Native debugging: Attach your IDE’s debugger directly to the process without container layers. Set breakpoints, step through code, and inspect variables with full IDE integration. Profiling tools: Use host-native profilers (pprof, perf, Instruments) without containerization overhead or special configuration. Faster iteration: Skip container builds entirely; just recompile and restart. Your local binary intercepts traffic that would go to the in-cluster pod. Steal traffic: Redirect all traffic from a pod to your local process. Your local code handles real requests while you debug. Access cluster resources: Your local process can reach cluster-internal services (databases, APIs) as if it were running in the cluster. Inherit environment: Environment variables and secrets from the target pod are available locally.Development Workflows
Local Kubernetes (Tilt)
Best for: Testing complete deployments including Kubernetes resources, databases, and ingress.- Infrastructure: cert-manager, cloudnative-pg, traefik
- Applications: Three variants of go-backend (Kustomize, Helm, Timoni)
Local Configuration
Each component hasvalues.local.yaml or a local/ overlay:
storageClass: standardfor local PVCs (KinD’s default)- Image tags pointing to
localhost:5001registry - sslip.io hostnames for ingress