Skip to main content

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; ensure docker pull ghcr.io/openbox-ai/* succeeds on the host first, then kind load docker-image <name> into the cluster
  • metrics-server needs --kubelet-insecure-tls on kind — see step 3
  • Port 80/443 already in use — Docker Desktop or system services may bind these; adjust hostPort in kind-config.yaml