When upgrading your Dagster version, you may also need to migrate your Dagster instance. Migrations will only be required if you are upgrading your minor version.
In this guide, we'll walk you through the migration process in a Kubernetes environment.
Heads up! This guide assumes only one release of the Dagster Helm chart is installed in your Kubernetes cluster. All commands should be run in the proper namespace.
Next, you'll scale down the Dagster webserver and daemon deployments. This ensures that there aren't any ongoing job runs writing to the database as the migration happens.
As you scale down the deployments, note each deployment's replica count. You'll use this to scale each one back up after the migration is complete.
# Get the names of Dagster's webserver and daemon deployments created by HelmexportWEBSERVER_DEPLOYMENT_NAME=`kubectl get deploy \
--selector=component=dagster-webserver -o jsonpath="{.items[0].metadata.name}"`exportDAEMON_DEPLOYMENT_NAME=`kubectl get deploy \
--selector=component=dagster-daemon -o jsonpath="{.items[0].metadata.name}"`# Save each deployment's replica count to scale back up after migratingexportWEBSERVER_DEPLOYMENT_REPLICA_COUNT=`kubectl get deploy \
--selector=component=dagster-webserver -o jsonpath="{.items[0].status.replicas}"`exportDAEMON_DEPLOYMENT_REPLICA_COUNT=`kubectl get deploy \
--selector=component=dagster-daemon -o jsonpath="{.items[0].status.replicas}"`# Scale down the Deployments
kubectl scale deploy $WEBSERVER_DEPLOYMENT_NAME --replicas=0
kubectl scale deploy $DAEMON_DEPLOYMENT_NAME --replicas=0
Run a Kubernetes job with the dagster instance migrate command. In the following example, helm template will run a job that uses this command and migrates the instance:
# Run `helm list` and save your Dagster Helm release nameexportHELM_DAGSTER_RELEASE_NAME=<DAGSTER_RELEASE_NAME># The `helm template` command must be run from the directory containing the# `values.yaml` file you used to install the Dagster Helm chart.## If needed, you can retrieve the currently applied `values.yaml` file# from the cluster by running:## `helm get values $HELM_DAGSTER_RELEASE_NAME > values.yaml`#
helm template $HELM_DAGSTER_RELEASE_NAME dagster/dagster \
--set "migrate.enabled=true"\
--show-only templates/job-instance-migrate.yaml \
--values values.yaml \| kubectl apply -f -
Next, you'll check that the migration succeeded. Run the following to get the name of the pod:
kubectl get pods -l job-name=dagster-instance-migrate
Lastly, run the following to inspect the resulting pod, replacing <POD_NAME> with the name of the pod:
kubectl describe pod <POD_NAME>
Verify that the pod completed without any errors before proceeding.