Skip to content

Kind demo

Deploys the plnt operator + Temporal + playground API on a local kind cluster, then applies an WorkflowRun and shows the deploy saga running end-to-end.

The saga uses a CPU-stub image in place of vLLM so the flow works without a real GPU. Frame this honestly in a demo: “the platform layer is what you’re seeing; hardening for GPU workloads is where the next phase goes.”

Terminal window
brew install kind kubectl helm
Terminal window
# create a local single-node cluster
kind create cluster --name plnt
# install the CRD + operator + Temporal
kubectl apply -f plnt/operators/crds/workflowrun.yaml
kubectl create namespace plnt-system
helm install temporal temporal/temporal --namespace plnt-system \
--set server.replicaCount=1 --set cassandra.config.cluster_size=1
# install the playground API gateway (mock backend, works without any real model)
helm install plnt-playground plnt/charts/playground-api --namespace plnt-system
# start the operator locally (dev mode — in prod this ships as a Deployment)
python -m kopf run plnt/operators/workflowrun_controller.py --namespace=default &
# start the Temporal worker
python -m plnt.workflows.worker &
Terminal window
kubectl apply -f examples/llama-3.1-70b-instruct.yaml

Then in three side-by-side terminal panes:

Terminal window
# pane A — the resource going through phases
kubectl get workflowrun -w
NAME RUNTIME GPU PHASE ENDPOINT
llama-3.1-70b-instruct vllm nvidia.com/h100 Validating
llama-3.1-70b-instruct vllm nvidia.com/h100 PullingWeights
llama-3.1-70b-instruct vllm nvidia.com/h100 Deploying
llama-3.1-70b-instruct vllm nvidia.com/h100 SmokeTesting
llama-3.1-70b-instruct vllm nvidia.com/h100 Promoting
llama-3.1-70b-instruct vllm nvidia.com/h100 Ready llama-3.1-70b-instruct.default.svc:8000
Terminal window
# pane B — the operator picking up the event
kubectl logs -f deployment/plnt-operator -n plnt-system
WorkflowRun/llama-3.1-70b-instruct created — starting DeployModelWorkflow
Terminal window
# pane C — the Temporal workflow history
open http://localhost:7233 # Temporal UI, shows the saga step-by-step
Terminal window
kubectl port-forward svc/plnt-playground 8080:8080 -n plnt-system &
curl -s http://localhost:8080/v1/chat/completions \
-H 'content-type: application/json' \
-d '{"model":"plnt-mock-7b","messages":[{"role":"user","content":"say hi"}]}' \
| jq .

Response comes back OpenAI-shape. In production the same request hits vLLM / TGI / TRT-LLM / SGLang on real GPUs.

Terminal window
kubectl delete workflowrun llama-3.1-70b-instruct

The operator cancels the workflow → the workflow triggers helm uninstall via compensation → kubectl get pods shows the release being removed.

  • Use asciinema rec kind-demo.cast — text terminal recording, tiny file, embeds anywhere.
  • Or QuickTime → New Screen Recording, cropped to iTerm window.
  • Speed up 2× in post — nobody wants to watch the helm install for real.
  • One take. Rehearse once; imperfect > polished.
  1. “This is the deploy contract.” Show examples/llama-3.1-70b-instruct.yaml.
  2. “This is the operator watching it.” Flash plnt/operators/workflowrun_controller.py.
  3. “This is the saga that does the work.” Flash plnt/workflows/deploy_model.py, point at the 5-step try/except with compensation.
  4. “This is the runtime chart.” Show plnt/charts/vllm-runtime/templates/deployment.yaml, highlight the nvidia.com/gpu resource request.
  5. “Playground is at play.plnt.work.” Open it, chat with a real model.

Total demo run-time: 3–4 minutes. Rehearsed cold: 6 minutes.