Install Docker, kind, kubectl, Helm, and (optionally) k9s.
You probably have most of these already if you're interacting with a Kubernetes cluster.
./run_everything.shOpen localhost:8080 in a browser to see the Dagster UI.
If you want to look at the deployment a bit, tell kubectl to use the kubeconfig that kind generated.
export KUBECONFIG='./.kube/config'
Then you can use kubectl or k9s to look into things.
It should default to the dinkind namespace, so you'll only see the dinkind stuff.
kubectl get pods
NAME READY STATUS RESTARTS AGE
dagster-run-714f2785-147f-4b94-8410-7cb1cbe3cbe0-cx922 0/1 Completed 0 47m
dinkind-dagster-daemon-895948f9f-mbvkk 1/1 Running 0 49m
dinkind-dagster-user-deployments-dinkind-7487fd4cf6-qtv97 1/1 Running 0 49m
dinkind-dagster-webserver-79958b9748-8qcln 1/1 Running 0 49m
dinkind-postgresql-0 1/1 Running 0 49m./teardown_everything.shThis cleanup script deletes everything with impunity.
Just as a heads up, part of this script kills all kubectl processes.
- Spin up a
kindcluster - Spin up a local Docker image registry
- Build a custom Dagster Code Location (i.e., your ETL pipelines) and put it in the local Docker registry
- Deploy Dagster in the
kindcluster using Helm, pulling the Code Location from the local Docker regsitry
After all that, you can run ETL pipelines from Dagster in a local Kubernetes cluster.
Yes, Dagster can run ETL pipelines locally. But production pipelines often run in Kuberentes.
This script is mainly for debugging the Kuberentes side of things.
For example, say job pods are sticking around for too long after they complete—you'd like to delete them after just a few seconds.
To do that, you have to set ttlSecondsAfterFinished somewhere deep in the values.yaml.
With this script, you can experiment and debug locally until you've figured out how exactly to make that change work.
You don't have to deploy a speculative change to your dev cluster, wait for the error message there, debug, and redeploy all day.
On my machine, Docker Desktop says this whole setup uses 1.6 GB of memory and about a third of a CPU while I'm randomly clicking around in the Dagster UI.
The image for kind and the Code Location image are both about 1 GB each.
The image for the local Docker regsitry is only 25 MB.
I think that's pretty decent for a Kubernetes cluster plus a web app.
Plus it's hilarious.