kind quickstart
kind runs Kubernetes in Docker containers. Faster to start than Minikube; ideal for CI + repeatable clusters.
1. Create the cluster
# kind-config.yaml — maps host ports to node ports for ingress
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: openbox-poc
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
- containerPort: 3000
hostPort: 3000
protocol: TCP
kind create cluster --config kind-config.yaml
kubectl config use-context kind-openbox-poc
kubectl get nodes # Expect: 1 node Ready
2. Install NGINX Ingress Controller
kind doesn't ship an ingress controller. Install manually:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s
3. Install metrics-server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# metrics-server needs --kubelet-insecure-tls on kind (self-signed kubelet cert)
kubectl patch -n kube-system deployment metrics-server --type=json \
-p '[{"op":"add","path":"/spec/template/spec/containers/0/args/-","value":"--kubelet-insecure-tls"}]'
4. Install OpenBox
Same values file as Minikube quickstart. Chart is env-agnostic.
git clone https://github.com/OpenBox-AI/openbox-manifest-k8s-cluster.git
cd openbox-manifest-k8s-cluster
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm dependency update charts/openbox
kubectl create namespace openbox
helm upgrade --install openbox charts/openbox \
-n openbox \
-f values-local.yaml \
--atomic --wait --timeout 10m
5. Access
kind's port mapping means localhost reaches the ingress directly. Point /etc/hosts:
echo "127.0.0.1 openbox.local" | sudo tee -a /etc/hosts
open http://openbox.local/ # macOS
xdg-open http://openbox.local/ # Linux
Or use kubectl port-forward:
kubectl port-forward -n openbox svc/openbox-fe 3000:80
open http://localhost:3000/
6. Uninstall
kind delete cluster --name openbox-poc
Removes everything — pods, PVCs, cluster containers.
Automated smoke test
The repo ships scripts/kind-smoke.sh which does all of the above end-to-end. Useful for CI:
./scripts/kind-smoke.sh
# Creates kind cluster, installs chart, waits for Ready, tears down.
# Exit code non-zero if any pod fails.
Kind-specific gotchas
- Cannot pull image from
ghcr.io— kind uses the host's Docker daemon by default; ensuredocker pull ghcr.io/openbox-ai/*succeeds on the host first, thenkind load docker-image <name>into the cluster - metrics-server needs
--kubelet-insecure-tlson kind — see step 3 - Port 80/443 already in use — Docker Desktop or system services may bind these; adjust
hostPortinkind-config.yaml