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
Create the local cluster
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.Start Tilt
What Gets Deployed
Tilt deploys a subset of infrastructure and all demo services:Infrastructure Components
| Component | Purpose |
|---|---|
| cert-manager | TLS certificates (using self-signed ClusterIssuer locally) |
| cloudnative-pg | PostgreSQL operator for in-cluster databases |
| traefik | Ingress controller |
Demo Services
The kit includes three variants ofgo-backend, each demonstrating a different Kubernetes templating approach:
| Service | Templating | Description |
|---|---|---|
| go-backend | Kustomize | Uses overlays for environment-specific configuration |
| go-backend-helm | Helm | Traditional Helm chart with values files |
| go-backend-timoni | Timoni | CUE-based configuration with type safety |
- 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
Ensure the KinD cluster is running
The service must be deployed in the local cluster (via Tilt) before mirrord can intercept its traffic.
Run your service with mirrord
Comparison: Local vs Production
| Aspect | Local (KinD + Tilt) | Production (EKS + ArgoCD) |
|---|---|---|
| Cluster | KinD (Docker) | EKS (AWS) |
| Registry | localhost:5001 | ECR |
| Ingress | sslip.io | Route53 + real domain |
| TLS | Self-signed | Let’s Encrypt |
| Secrets | Local values | AWS Secrets Manager |
| Database | CloudNativePG | CloudNativePG (or RDS) |
| Deployment | Tilt (live reload) | ArgoCD (GitOps) |
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