在 Kubernetes 中升级并迁移 Dagster 实例

在 Kubernetes 中升级并迁移 Dagster 实例

升级 Dagster 版本时,可能还需要迁移实例。按本指南说明,迁移仅在升级次版本时才可能需要。

本指南介绍 Kubernetes 环境中的迁移流程。

前置准备

开始前,请完成以下准备:

  • 查阅 Dagster 升级指南,确认目标版本是否要求额外操作。
  • 备份 PostgreSQL 数据库。
提示

步骤 1:升级 Helm chart

本文假定 Kubernetes 集群中只安装了一个 Dagster Helm chart release。所有命令都应在正确的命名空间中执行。

  1. 首先更新可用 chart 的信息:

    helm repo update

    此命令获取 Dagster Helm chart 的最新信息;每次开源版本发布都会更新 chart。

  2. 使用所需的 Dagster chart 版本和 Helm values 运行 helm upgrade:

    helm upgrade --install dagster dagster/dagster -f /path/to/values.yaml

    这会安装新 chart。如果 release 不存在,就创建它;否则修改已有的 dagster release。

步骤 2:缩容 Dagster

接下来将 Dagster webserver 和 daemon 的 Deployment 缩容,避免迁移期间继续产生向数据库写入的活动。

缩容前记录每个 Deployment 的副本数,迁移后需要恢复。

# Get the names of Dagster's webserver and daemon deployments created by Helm
export WEBSERVER_DEPLOYMENT_NAME=`kubectl get deploy \
    --selector=component=dagster-webserver -o jsonpath="{.items[0].metadata.name}"`
export DAEMON_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 migrating
export WEBSERVER_DEPLOYMENT_REPLICA_COUNT=`kubectl get deploy \
    --selector=component=dagster-webserver -o jsonpath="{.items[0].status.replicas}"`
export DAEMON_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
  1. 步骤 3:迁移 Dagster 实例

    运行执行 dagster instance migrate 的 Kubernetes Job。下例通过 helm template 生成迁移 Job 的清单,再应用到集群中:

    # Run `helm list` and save your Dagster Helm release name
    export HELM_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 -
  2. 接下来检查迁移是否成功,先获取 Pod 名称:

    kubectl get pods -l job-name=dagster-instance-migrate
  3. 将 <POD_NAME> 替换为实际名称,检查该 Pod:

    kubectl describe pod <POD_NAME>

    确认 Pod 完成且没有错误后,再继续下一步。

步骤 4:恢复 Dagster 副本数

最后将 webserver 和 daemon 的 Deployment 恢复到迁移前记录的副本数:

kubectl scale deploy $WEBSERVER_DEPLOYMENT_NAME --replicas=$WEBSERVER_DEPLOYMENT_REPLICA_COUNT
kubectl scale deploy $DAEMON_DEPLOYMENT_NAME --replicas=$DAEMON_DEPLOYMENT_REPLICA_COUNT
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容