Overview
Dev-fast mode (bootstrap.sh) is optimized for daily development with instant warm starts using hash-based caching. It uses kindnetd CNI (no Cilium) for maximum speed and supports a single control-plane node.
Cold start: ~120s | Warm start: Instant (hash match) / 10-15s (manifest changes)
Key Features
- kindnetd CNI - No Cilium overhead for faster startup
- Single node - Control-plane only, minimal resource usage
- Warm cluster support - Hash-based state detection
- 4-phase parallel execution - Maximum concurrency
- No Istio/ArgoCD - Lightweight for app development
Command Usage
Flags
| Flag | Description |
|---|---|
--clean | Delete existing cluster and force cold start |
--full | Delegate to bootstrap-full.sh (Cilium mode) |
Warm Cluster (Hash Gate)
The bootstrap script uses SHA-256 hashes to detect cluster state and avoid unnecessary rebuilds:Hash Storage
.bootstrap-state/cluster- Hash ofkind-config-dev.yaml+images.sh.bootstrap-state/manifest- Hash of entiremanifests-result/directory
Decision Logic
Cluster running + cluster hash match + manifest hash match
Instant complete - Health check only, no deployment
Cluster running + cluster hash match + manifest hash mismatch
Warm reapply (~10-15s) - Regenerate and reapply manifests only
4-Phase Parallel Execution
Phase 1: Preparation (Parallel)
All tasks run concurrently:- kind-cluster - Create kind cluster with
kind-config-dev.yaml - gen-manifests - Generate Kubernetes manifests
- otel-fetch - Fetch OTel collector image (smart mode: R2 cache → local cache → build)
- image-preload - Pull container images in parallel
Phase 2: Image Load (Sequential)
Load images into kind cluster:- Load all preloaded images into kind
- Load OTel collector image
Phase 2.5: PostgreSQL Early Start
PostgreSQL starts early to overlap its long startup time (~87s) with other deployments.Phase 3: Deploy Services (Parallel)
All services deploy concurrently:- garage - S3-compatible storage (wait for ready + setup)
- observability - Prometheus stack, Loki, Tempo, OTel collector
- traefik - Ingress controller + auth
- cloudflared - Cloudflare tunnel (if credentials exist)
Phase 4: Wait for Pods (Parallel)
Wait for critical pods in parallel:- PostgreSQL (database namespace)
- Grafana (observability namespace)
- Prometheus (observability namespace)
Benchmark Results
Total Time
~122s cold start
vs Cilium Mode
38% faster (~197s → ~122s)
| Phase | Time |
|---|---|
| phase1-prep | ~12s |
| phase2-load | ~37s |
| phase3-deploy | ~21s |
| phase4-wait | ~52s |
| TOTAL | ~122s |
Cluster Configuration
kind-config-dev.yaml
kind-config-dev.yaml
Exposed Services
After bootstrap completes:| Service | URL | Credentials |
|---|---|---|
| Grafana | http://localhost:30300 | admin/admin |
| Prometheus | http://localhost:30090 | - |
| Alertmanager | http://localhost:30093 | - |
| Traefik | http://localhost:30081 | - |
Next Steps
After dev-fast bootstrap:Use Cases
Daily Development
Instant restarts with warm cluster support
Quick Testing
Fast iteration cycles without Cilium overhead
Resource Constrained
Single node, minimal footprint
App Development
Full observability stack without service mesh