9.4. 迁移计划选项

您可以在 MigPlan 自定义资源 (CR) 中排除、编辑和映射组件。

9.4.1. 排除资源

您可以从 MTC 迁移计划中排除资源,如镜像流、持久性卷(PV)或订阅,以便减少迁移的资源负载,或使用其他工具迁移镜像或 PV。

默认情况下,MTC 会排除服务目录资源和 Operator Lifecycle Manager(OLM)资源。这些资源是服务目录 API 组和 OLM API 组的一部分,目前还不支持迁移。

流程

  1. 编辑 MigrationController 自定义资源清单:

    $ oc edit migrationcontroller <migration_controller> -n openshift-migration
  2. 通过添加参数以排除特定资源,更新 spec 部分。对于没有自己的排除参数的资源,请添加 additional_excluded_resources 参数:

    apiVersion: migration.openshift.io/v1alpha1
    kind: MigrationController
    metadata:
      name: migration-controller
      namespace: openshift-migration
    spec:
      disable_image_migration: true 1
      disable_pv_migration: true 2
      additional_excluded_resources: 3
      - resource1
      - resource2
      ...
    1
    添加 disable_image_migration: true 以排除迁移中的镜像流。当 MigrationController pod 重启时,镜像流 会添加到 main.yml 中的 exclude_resources 列表中。
    2
    添加 disable_pv_migration: true 以将 PV 排除在迁移计划之外。当 MigrationController pod 重启时,persistentvolumespersistentvolumeclaims 会添加到 main.yml 中的 exclude_resources 列表中。禁用 PV 迁移会同时在创建迁移计划时禁用 PV 发现功能。
    3
    您可以添加要在 additional_excluded_resources 列表中排除的 OpenShift Container Platform 资源。
  3. 等待两分钟,使 MigrationController Pod 重启,以便应用更改。
  4. 验证资源是否排除:

    $ oc get deployment -n openshift-migration migration-controller -o yaml | grep EXCLUDED_RESOURCES -A1

    输出包含排除的资源:

    输出示例

    name: EXCLUDED_RESOURCES
    value:
    resource1,resource2,imagetags,templateinstances,clusterserviceversions,packagemanifests,subscriptions,servicebrokers,servicebindings,serviceclasses,serviceinstances,serviceplans,imagestreams,persistentvolumes,persistentvolumeclaims

9.4.2. 映射命名空间

如果您在 MigPlan 自定义资源 (CR) 中映射命名空间,您必须确保在源或目标集群上不会重复命名空间,因为命名空间的 UID 和 GID 范围在迁移过程中被复制。

两个源命名空间映射到同一目标命名空间

spec:
  namespaces:
    - namespace_2
    - namespace_1:namespace_2

如果您希望源命名空间映射到同一名称的命名空间,则不需要创建映射。默认情况下,源命名空间和目标命名空间具有相同的名称。

命名空间映射不正确

spec:
  namespaces:
    - namespace_1:namespace_1

正确的命名空间引用

spec:
  namespaces:
    - namespace_1

9.4.3. 持久性卷声明除外

您可以通过排除您不想迁移的 PVC 来为状态迁移选择持久性卷声明 (PVC)。您可以通过在持久性卷(PV)被发现后设置 MigPlan 自定义资源(CR)的 spec.persistentVolumes.pvc.selection.action 参数来排除 PVC。

先决条件

  • MigPlan CR 处于 Ready 状态。

流程

  • spec.persistentVolumes.pvc.selection.action 参数添加到 MigPlan CR 中,并将其设置为 skip

    apiVersion: migration.openshift.io/v1alpha1
    kind: MigPlan
    metadata:
      name: <migplan>
      namespace: openshift-migration
    spec:
    ...
      persistentVolumes:
      - capacity: 10Gi
        name: <pv_name>
        pvc:
    ...
        selection:
          action: skip

9.4.4. 映射持久性卷声明

您可以通过映射 PVC,将持久性卷(PV)数据从源集群迁移到 MigPlan CR 中目标集群中已置备的持久性卷声明(PVC)。此映射可确保迁移的应用的目标 PVC 与源 PVC 同步。

您可以在 PV 被发现后,通过更新 MigPlan 自定义资源(CR)中的 spec.persistentVolumes.pvc.name 参数来映射 PVC。

先决条件

  • MigPlan CR 处于 Ready 状态。

流程

  • 更新 MigPlan CR 中的 spec.persistentVolumes.pvc.name 参数:

    apiVersion: migration.openshift.io/v1alpha1
    kind: MigPlan
    metadata:
      name: <migplan>
      namespace: openshift-migration
    spec:
    ...
      persistentVolumes:
      - capacity: 10Gi
        name: <pv_name>
        pvc:
          name: <source_pvc>:<destination_pvc> 1
    1
    指定源集群上的 PVC 和目标集群上的 PVC。如果目标 PVC 不存在,则会创建它。您可以在迁移过程中使用此映射更改 PVC 名称。

9.4.5. 编辑持久性卷属性

创建 MigPlan 自定义资源(CR)后,MigrationController CR 会发现持久性卷(PV)。spec.persistentVolumes 块和 status.destStorageClasses 块添加到 MigPlan CR 中。

您可以编辑 spec.persistentVolumes.selection 块中的值。如果您更改了 spec.persistentVolumes.selection 块以外的值,当 MigrationController CR 协调 MigPlan CR 时这些值会被覆盖。

注意

spec.persistentVolumes.selection.storageClass 参数的默认值由以下逻辑决定:

  1. 如果源集群 PV 是 Gluster 或 NFS,则默认为 cephfs,用于 accessMode: ReadWriteManycephrbd,表示 accessMode: ReadWriteOnce
  2. 如果 PV 既不是 Gluster,也不是 NFS, cephfscephrbd 不可用,则默认为同一调配器的存储类。
  3. 如果没有同一置备程序存储类,则默认是目标集群的默认存储类。

您可以将 storageClass 值改为 MigPlan CR 的 status.destStorageClasses 块中任何 name 参数的值。

如果 storageClass 值为空,则 PV 在迁移后将没有存储类。例如,当您想要将 PV 移到目标集群上的 NFS 卷时,这个选项是合适的。

先决条件

  • MigPlan CR 处于 Ready 状态。

流程

  • 编辑 MigPlan CR 中的 spec.persistentVolumes.selection 值:

    apiVersion: migration.openshift.io/v1alpha1
    kind: MigPlan
    metadata:
      name: <migplan>
      namespace: openshift-migration
    spec:
      persistentVolumes:
      - capacity: 10Gi
        name: pvc-095a6559-b27f-11eb-b27f-021bddcaf6e4
        proposedCapacity: 10Gi
        pvc:
          accessModes:
          - ReadWriteMany
          hasReference: true
          name: mysql
          namespace: mysql-persistent
        selection:
          action: <copy> 1
          copyMethod: <filesystem> 2
          verify: true 3
          storageClass: <gp2> 4
          accessMode: <ReadWriteMany> 5
        storageClass: cephfs
    1
    允许的值包括 movecopyskip。如果只支持一个操作,则默认值是支持的动作。如果支持多个操作,则默认值为 copy
    2
    允许的值是 snapshotfilesystem。默认值为 filesystem
    3
    如果您在 MTC web 控制台中为文件系统复制选择了验证选项,则会显示 verify 参数。您可以将其设置为 false
    4
    您可以将默认值改为 MigPlan CR 的 status.destStorageClasses 块中任何 name 参数的值。如果没有指定值,则 PV 在迁移后没有存储类。
    5
    允许的值有 ReadWriteOnceReadWriteMany。如果没有指定这个值,则默认值是源集群 PVC 的访问模式。您只能在 MigPlan CR 中编辑访问模式。您不能使用 MTC web 控制台进行编辑。

9.4.6. 转换 MTC web 控制台中的存储类

您可以在同一个集群中迁移持久性卷(PV)的存储类来转换它。要做到这一点,您必须在 Migration Toolkit for Containers(MTC)web 控制台中创建并运行迁移计划。

先决条件

  • 您必须在 MTC 的集群中以具有 cluster-admin 权限的用户身份登录。
  • 您必须在 MTC web 控制台中添加集群。

流程

  1. 在 OpenShift Container Platform Web 控制台的左侧导航窗格中,点 Projects
  2. 在项目列表中点击您的项目。

    此时会打开 Project 详情页面。

  3. DeploymentConfig 名称。记录其正在运行的 Pod 的名称。
  4. 打开项目的 YAML 选项卡。查找 PV 并记下其对应的持久性卷声明(PVC)的名称。
  5. 在 MTC web 控制台中点 Migration Plan
  6. Add migration plan
  7. 输入 Plan 名称

    迁移计划名称必须包含 3 到 63 个小写字母数字字符(a-z,0-9)且不得包含空格或下划线(_)。

  8. Migration type 菜单中,选择 Storage class conversion
  9. Source 集群列表中,选择所需的集群进行存储类转换。
  10. Next

    Namespaces 页面将打开。

  11. 选择所需的项目。
  12. Next

    此时会打开 Persistent volumes 页面。页面中显示项目中 PV,默认选中的所有 PV。

  13. 对于每个 PV,选择所需的目标存储类。
  14. Next

    该向导会验证新的迁移计划,并显示它已就绪。

  15. 单击 Close

    新计划会出现在 Migration Plan 页面中。

  16. 要开始转换,请点击新计划的选项菜单。

    Migrations 下会显示两个选项,即 StageCutover

    注意

    在应用程序中剪切迁移更新 PVC 引用。

    阶段迁移不会更新应用程序中的 PVC 引用。

  17. 选择所需选项。

    根据您选择的选项,显示 Stage migrationCutover migration 通知。

  18. Migrate

    根据您选择的选项,Stage startedCutover started 消息会显示。

  19. 要查看当前迁移的状态,请点击 Migrations 列中的数量。

    此时会打开 Migrations 页面。

  20. 要查看有关当前迁移和监控其进度的更多详细信息,请从 Type 列选择迁移。

    此时会打开 Migration 详情页面。当迁移进入 DirectVolume 步骤时,步骤的状态将变为 Running Rsync Pods to migrate Persistent Volume data,您可以点 View details 并查看副本的详细状态。

  21. 在面包屑导航栏中,点 StageCutover,并等待所有步骤完成。
  22. 打开 OpenShift Container Platform Web 控制台的 PersistentVolumeClaims 选项卡。

    您可以看到新 PVC 名称,但以 new 结尾(使用目标存储类)。

  23. 在左侧导航窗格中,点 Pods。查看您的项目的 pod 已再次运行。
其他资源

9.4.7. 使用 MTC API 执行 Kubernetes 对象的状态迁移

迁移所有 PV 数据后,您可以使用 Migration Toolkit for Containers (MTC) API 执行组成应用程序的 Kubernetes 对象的一次性状态迁移。

您可以通过配置 MigPlan 自定义资源 (CR) 字段来提供一个带有额外标签选择器的 Kubernetes 资源列表来进一步过滤这些资源,然后通过创建 MigMigration CR 来执行迁移。MigPlan 资源在迁移后关闭。

注意

选择 Kubernetes 资源是一个仅限 API 的功能。您必须更新 MigPlan CR,并使用 CLI 为它创建一个 MigMigration CR。MTC web 控制台不支持迁移 Kubernetes 对象。

注意

迁移后,MigPlan CR 的 closed 参数被设置为 true。您不能为此 MigPlan CR 创建另一个 MigMigration CR。

使用以下选项之一将 Kubernetes 对象添加到 MigPlan CR 中:

  • 将 Kubernetes 对象添加到 includeResources 部分。当 MigPlan CR 中指定 includedResources 字段时,计划会将 group-kind 的列表作为输入。只有列表中显示的资源才会包含在迁移中。
  • 添加可选的 labelSelector 参数,以过滤 MigPlan 中的 includedResources。当指定此字段时,迁移中仅包含与标签选择器匹配的资源。例如,您可以使用标签 app: frontend 作为过滤器来过滤 SecretConfigMap 资源列表。

流程

  1. 更新 MigPlan CR,使其包含 Kubernetes 资源,并可选择性地通过添加 labelSelector 参数来过滤包含的资源:

    1. 更新 MigPlan CR 使其包含 Kubernetes 资源:

      apiVersion: migration.openshift.io/v1alpha1
      kind: MigPlan
      metadata:
        name: <migplan>
        namespace: openshift-migration
      spec:
        includedResources:
        - kind: <kind> 1
          group: ""
        - kind: <kind>
          group: ""
      1
      指定 Kubernetes 对象,如 SecretConfigMap
    2. 可选:要通过添加 labelSelector 参数来过滤包含的资源:

      apiVersion: migration.openshift.io/v1alpha1
      kind: MigPlan
      metadata:
        name: <migplan>
        namespace: openshift-migration
      spec:
        includedResources:
        - kind: <kind> 1
          group: ""
        - kind: <kind>
          group: ""
      ...
        labelSelector:
          matchLabels:
            <label> 2
      1
      指定 Kubernetes 对象,如 SecretConfigMap
      2
      指定要迁移的资源标签,如 app: frontend
  2. 创建一个 MigMigration CR 来迁移所选 Kubernetes 资源。验证 migPlanRef 引用了了正确的 MigPlan

    apiVersion: migration.openshift.io/v1alpha1
    kind: MigMigration
    metadata:
      generateName: <migplan>
      namespace: openshift-migration
    spec:
      migPlanRef:
        name: <migplan>
        namespace: openshift-migration
      stage: false