Overview
The kit includes a complete local development environment using:- KinD - Kubernetes in Docker for a local multi-node cluster
- Tilt - Live development environment with hot reloading
- mirrord - Remote debugging by intercepting pod traffic
Prerequisites
Ensure you have:- A container runtime (Docker, Podman, or OrbStack)
- mise installed with tools (
mise installfrom Repository Setup)
Quick Start
1
Create the local cluster
2
Start the LoadBalancer provider
In a separate terminal (requires sudo):This enables LoadBalancer services to get IPs in the
172.20.0.0/16 range.3
Start Tilt
4
Access your services
http://go-backend-kustomize.172-20-0-100.sslip.iohttp://go-backend-helm.172-20-0-100.sslip.iohttp://go-backend-timoni.172-20-0-100.sslip.io
What Gets Deployed
Tilt deploys a subset of infrastructure and all demo services:Infrastructure Components
Demo Services
The kit includes three variants ofgo-backend, each demonstrating a different Kubernetes templating approach:
All three deploy the same Go application with:
- PostgreSQL database (via CloudNativePG)
- Database migrations (via Atlas, run as Kubernetes Job)
- Ingress for external access
Cluster Configuration
KinD Cluster
The cluster is configured inlocal/kind/cluster-config.yaml:
- 3 nodes for realistic scheduling
- Local registry on
localhost:5001 - Stable Docker network (
172.20.0.0/16) for predictable IPs
Local Registry
Thecreate-cluster task creates a local Docker registry:
Tilt Configuration
Tiltfile Structure
Infrastructure Tiltfile
Deploys cluster components in order:values.local.yaml).
Services Tiltfile
For each service:- Builds the Docker image
- Waits for CloudNativePG to be ready
- Creates a PostgreSQL Cluster CR
- Runs database migrations
- Deploys the application
Customizing Tilt Behavior
Edit the values files for local overrides:Developing Outside the Container with 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 is ideal when you want to iterate on application code without waiting for container rebuilds:- Skip container builds: Just recompile and restart, no Docker builds or image pushes
- Use your local tools: Run with your IDE, debugger, profiler, or any host-native tooling
- Access cluster resources: Your local process can reach cluster-internal services (databases, APIs)
- Inherit pod environment: Environment variables and secrets from the target pod are available locally
Configuration
The mirrord config is inservices/go-backend/.mirrord/mirrord.json:
- Steals incoming traffic from the
go-backenddeployment in the KinD cluster - Enables outgoing connections to cluster resources (database, etc.)
- Uses local filesystem
- Mirrors pod environment variables to your local process
Using mirrord
1
Ensure the KinD cluster is running
The service must be deployed in the local cluster (via Tilt) before mirrord can intercept its traffic.
2
Run your service with mirrord
3
Debug as usual
Use your IDE’s debugger, add print statements, or modify code. Changes take effect immediately without rebuilding containers.
Comparison: Local vs Production
Next Steps
With local development set up, you’re ready to start building! See the Operations guides for:- Updating 1st Party Applications - Modify and deploy your services
- Bootstrapping a New Service - Add a new application
- Database Operations - Manage migrations and databases