11.5. 回滚一个迁移
您可以使用 MTC web 控制台或 CLI 回滚迁移。
您还可以手动回滚迁移。
11.5.1. 使用 MTC web 控制台回滚迁移
您可以使用 Migration Toolkit for Containers(MTC)web 控制台回滚迁移。
以下资源保留在迁移的命名空间中,以便在直接卷迁移 (DVM) 失败后进行调试:
- 配置映射(源和目标集群)
-
Secret
对象(源和目标集群) -
Rsync
CR(源集群)
这些资源不会影响回滚。您可以手动删除它们。
如果您稍后成功运行相同的迁移计划,则会自动删除失败迁移中的资源。
如果应用程序在迁移失败时停止,您必须回滚迁移,以防止持久性卷中的数据崩溃。
如果应用程序在迁移过程中没有停止,则不需要回滚,因为原始应用程序仍然在源集群中运行。
流程
- 在 MTC web 控制台中点 Migration Plan。
- 点击迁移计划 旁边的 Options 菜单,并在 Migration 下选择 Rollback。
点 Rollback 并等待回滚完成。
在迁移计划详情中会显示 Rollback succeeded。
验证源集群的 OpenShift Container Platform Web 控制台中是否成功回滚:
-
点 Home
Projects。 - 点迁移的项目查看其状态。
- 在 Routes 部分,点击 Location 验证应用程序是否正常运行。
-
点 Workloads
Pods 来验证 pod 是否在迁移的命名空间中运行。 -
点 Storage
Persistent volumes 确认正确置备了被迁移的持久性卷。
-
点 Home
11.5.2. 使用命令行界面回滚迁移
您可以通过从命令行界面创建 MigMigration
自定义资源(CR)来回滚迁移。
以下资源保留在迁移的命名空间中,以便在直接卷迁移 (DVM) 失败后进行调试:
- 配置映射(源和目标集群)
-
Secret
对象(源和目标集群) -
Rsync
CR(源集群)
这些资源不会影响回滚。您可以手动删除它们。
如果您稍后成功运行相同的迁移计划,则会自动删除失败迁移中的资源。
如果应用程序在迁移失败时停止,您必须回滚迁移,以防止持久性卷中的数据崩溃。
如果应用程序在迁移过程中没有停止,则不需要回滚,因为原始应用程序仍然在源集群中运行。
流程
根据以下示例创建一个
MigMigration
CR:$ cat << EOF | oc apply -f - apiVersion: migration.openshift.io/v1alpha1 kind: MigMigration metadata: labels: controller-tools.k8s.io: "1.0" name: <migmigration> namespace: openshift-migration spec: ... rollback: true ... migPlanRef: name: <migplan> 1 namespace: openshift-migration EOF
- 1
- 指定关联的
MigPlan
CR 的名称。
- 在 MTC web 控制台中,验证迁移的项目资源是否已从目标集群中移除。
- 验证迁移的项目资源是否存在于源集群中,并且应用程序是否正在运行。
11.5.3. 手动回滚迁移
您可以通过删除 stage
pod 并取消静止应用程序来手动回滚失败的迁移。
如果您成功运行相同的迁移计划,则会自动删除失败迁移中的资源。
在直接卷迁移失败 (DVM) 后,以下资源会保留在迁移的命名空间中:
- 配置映射(源和目标集群)
-
Secret
对象(源和目标集群) -
Rsync
CR(源集群)
这些资源不会影响回滚。您可以手动删除它们。
流程
删除所有集群中的
stage
pod:$ oc delete $(oc get pods -l migration.openshift.io/is-stage-pod -n <namespace>) 1
- 1
MigPlan
CR 中指定的命名空间。
通过将副本扩展到其预迁移编号,在源集群中取消静默应用程序:
$ oc scale deployment <deployment> --replicas=<premigration_replicas>
Deployment
CR 中的migration.openshift.io/preQuiesceReplicas
注解显示预迁移副本数:apiVersion: extensions/v1beta1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "1" migration.openshift.io/preQuiesceReplicas: "1"
验证应用程序 pod 是否在源集群中运行:
$ oc get pod -n <namespace>