12.5. 回滚一个迁移

您可以使用 MTC web 控制台或 CLI 回滚迁移。

您还可以手动回滚迁移

12.5.1. 使用 MTC web 控制台回滚迁移

您可以使用 Migration Toolkit for Containers(MTC)web 控制台回滚迁移。

注意

以下资源保留在迁移的命名空间中,以便在直接卷迁移 (DVM) 失败后进行调试:

  • 配置映射(源和目标集群)
  • Secret 对象(源和目标集群)
  • Rsync CR(源集群)

这些资源不会影响回滚。您可以手动删除它们。

如果您稍后成功运行相同的迁移计划,则会自动删除失败迁移中的资源。

如果应用程序在迁移失败时停止,您必须回滚迁移,以防止持久性卷中的数据崩溃。

如果应用程序在迁移过程中没有停止,则不需要回滚,因为原始应用程序仍然在源集群中运行。

流程

  1. 在 MTC web 控制台中点 Migration Plan
  2. 点击迁移计划 kebab 旁边的 Options 菜单,并在 Migration 下选择 Rollback
  3. Rollback 并等待回滚完成。

    在迁移计划详情中会显示 Rollback succeeded

  4. 验证源集群的 OpenShift Container Platform Web 控制台中是否成功回滚:

    1. HomeProjects
    2. 点迁移的项目查看其状态。
    3. Routes 部分,点击 Location 验证应用程序是否正常运行。
    4. WorkloadsPods 来验证 pod 是否在迁移的命名空间中运行。
    5. StoragePersistent volumes 确认正确置备了被迁移的持久性卷。

12.5.2. 使用命令行界面回滚迁移

您可以通过从命令行界面创建 MigMigration 自定义资源(CR)来回滚迁移。

注意

以下资源保留在迁移的命名空间中,以便在直接卷迁移 (DVM) 失败后进行调试:

  • 配置映射(源和目标集群)
  • Secret 对象(源和目标集群)
  • Rsync CR(源集群)

这些资源不会影响回滚。您可以手动删除它们。

如果您稍后成功运行相同的迁移计划,则会自动删除失败迁移中的资源。

如果应用程序在迁移失败时停止,您必须回滚迁移,以防止持久性卷中的数据崩溃。

如果应用程序在迁移过程中没有停止,则不需要回滚,因为原始应用程序仍然在源集群中运行。

流程

  1. 根据以下示例创建一个 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 的名称。
  2. 在 MTC web 控制台中,验证迁移的项目资源是否已从目标集群中移除。
  3. 验证迁移的项目资源是否存在于源集群中,并且应用程序是否正在运行。

12.5.3. 手动回滚迁移

您可以通过删除 stage pod 并取消静止应用程序来手动回滚失败的迁移。

如果您成功运行相同的迁移计划,则会自动删除失败迁移中的资源。

注意

在直接卷迁移失败 (DVM) 后,以下资源会保留在迁移的命名空间中:

  • 配置映射(源和目标集群)
  • Secret 对象(源和目标集群)
  • Rsync CR(源集群)

这些资源不会影响回滚。您可以手动删除它们。

流程

  1. 删除所有集群中的 stage pod:

    $ oc delete $(oc get pods -l migration.openshift.io/is-stage-pod -n <namespace>) 1
    1
    MigPlan CR 中指定的命名空间。
  2. 通过将副本扩展到其预迁移编号,在源集群中取消静默应用程序:

    $ 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"
  3. 验证应用程序 pod 是否在源集群中运行:

    $ oc get pod -n <namespace>

其他资源