Prerequisites
Before you begin, make sure you have these tools installed:- Docker (Docker Desktop or equivalent) — Install Docker
- kind (Kubernetes IN Docker) —
brew install kindor install guide - kubectl —
brew install kubectlor install guide - Helm —
brew install helmor install guide
No cloud account, Vault, or DNS configuration needed for local development. Everything runs in Docker.
One-Command Setup
Clone the repository and start the local environment:1
Create a kind cluster
Sets up a local Kubernetes cluster with port mappings for
localhost:8080 and localhost:80812
Install PostgreSQL
Deploys PostgreSQL via Helm chart for persistent data storage
3
Install Traefik
Ingress controller for routing
*.localhost traffic to deployments4
Build Docker images
Builds
k8s-scheduler-server and k8s-scheduler-operator images5
Load images into kind
Transfers images into the kind cluster
6
Apply Kubernetes manifests
Deploys server, operator, CRDs, and dev configuration
Access the Platform
Once the setup completes, open your browser:dev@localhost (no OAuth required in dev mode).
Dev mode (
DEV_MODE=true) skips Google OAuth and creates a test user automatically. This is only for local development — never enable this in production.Create Your First Deployment
Now let’s deploy something!1
Navigate to Deployments
Click “Deployments” in the sidebar
2
Click Create Deployment
Click the ”+ Create Deployment” button
3
Choose a template
Select “nginx” from the template dropdown
4
Name your deployment
Enter a name like
my-first-app (lowercase, alphanumeric only)5
Deploy
Click “Create” and wait for the deployment to start
- A Kubernetes Deployment with nginx pods
- A Service to expose the pods
- A Traefik IngressRoute for HTTP routing
- A ConfigMap if the template includes config data
Access Your Deployment
Once the deployment is Running, you can access it at:my-first-app:
The
.localhost domain works without DNS because it’s a special reserved domain. Traefik routes requests based on the Host header.View Logs
Check the logs for the server and operator:Explore the UI
The local dev environment includes a full-featured React UI:Dashboard
- View all deployments with status cards
- Quick actions: restart, delete, view logs
- Metrics graphs (CPU, memory, request rate)
Teams
- Create teams
- Invite members (email invites disabled in dev mode)
- Manage roles:
team_admin,developer,viewer
Secrets
- Add organization-wide secrets
- Add deployment-specific secrets
- Secrets are stored in the database (no Vault in dev mode)
Templates
- Browse system templates (nginx, LibreChat, etc.)
- Create custom templates with YAML specs
- Set visibility:
private,team, ororg
Make Code Changes
After editing Go or React code, rebuild and reload:- Rebuild Docker images for server and operator
- Load new images into the kind cluster
- Restart the deployments
- Wait for rollout to complete
Teardown
When you’re done, delete the entire kind cluster:make dev-local again.
Troubleshooting
Port Conflict on 8081 or 8080
Another process is using the port. Find and stop it:deploy/dev/kind-config.yaml.
Pods in CrashLoopBackOff
Check the logs:Deployment Not Accessible at *.localhost:8080
Ensure Traefik is running:Cannot Access http://localhost:8081
Verify the server pod is running:CrashLoopBackOff, check logs:
What’s Next?
Local Development Guide
Deep dive into local dev workflows and configuration
Architecture Overview
Learn how k8s-scheduler components work together
Environment Variables (Dev Mode)
The dev overlay automatically sets these viadeploy/dev/configmap-patch.yaml:
You can override these by editing
deploy/dev/configmap-patch.yaml and running make dev-reload.