11.5. 迁移计划选项
您可以在 MigPlan
自定义资源 (CR) 中排除、编辑和映射组件。
11.5.1. 排除资源
您可以从 MTC 迁移计划中排除资源,如镜像流、持久性卷(PV)或订阅,以便减少迁移的资源负载,或使用其他工具迁移镜像或 PV。
默认情况下,MTC 会排除服务目录资源和 Operator Lifecycle Manager(OLM)资源。这些资源是服务目录 API 组和 OLM API 组的一部分,目前还不支持迁移。
流程
编辑
MigrationController
自定义资源清单:$ oc edit migrationcontroller <migration_controller> -n openshift-migration
通过添加参数以排除特定资源,更新
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 重启时,persistentvolumes
和persistentvolumeclaims
会添加到main.yml
中的exclude_resources
列表中。禁用 PV 迁移会同时在创建迁移计划时禁用 PV 发现功能。 - 3
- 您可以添加要在
additional_excluded_resources
列表中排除的 OpenShift Container Platform 资源。
-
等待两分钟,使
MigrationController
Pod 重启,以便应用更改。 验证资源是否排除:
$ 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
11.5.2. 映射命名空间
如果您在 MigPlan
自定义资源 (CR) 中映射命名空间,您必须确保在源或目标集群上不会重复命名空间,因为命名空间的 UID 和 GID 范围在迁移过程中被复制。
两个源命名空间映射到同一目标命名空间
spec: namespaces: - namespace_2 - namespace_1:namespace_2
如果您希望源命名空间映射到同一名称的命名空间,则不需要创建映射。默认情况下,源命名空间和目标命名空间具有相同的名称。
命名空间映射不正确
spec: namespaces: - namespace_1:namespace_1
正确的命名空间引用
spec: namespaces: - namespace_1
11.5.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
11.5.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 名称。
11.5.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
参数的默认值由以下逻辑决定:
-
如果源集群 PV 是 Gluster 或 NFS,则默认为
cephfs
,用于accessMode: ReadWriteMany
或cephrbd
,表示accessMode: ReadWriteOnce
。 -
如果 PV 既不是 Gluster,也不是 NFS,或
cephfs
或cephrbd
不可用,则默认为同一调配器的存储类。 - 如果没有同一置备程序存储类,则默认是目标集群的默认存储类。
您可以将 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
- 允许的值包括
move
、copy
和skip
。如果只支持一个操作,则默认值是支持的动作。如果支持多个操作,则默认值为copy
。 - 2
- 允许的值是
snapshot
和filesystem
。默认值为filesystem
。 - 3
- 如果您在 MTC web 控制台中为文件系统复制选择了验证选项,则会显示
verify
参数。您可以将其设置为false
。 - 4
- 您可以将默认值改为
MigPlan
CR 的status.destStorageClasses
块中任何name
参数的值。如果没有指定值,则 PV 在迁移后没有存储类。 - 5
- 允许的值有
ReadWriteOnce
和ReadWriteMany
。如果没有指定这个值,则默认值是源集群 PVC 的访问模式。您只能在MigPlan
CR 中编辑访问模式。您不能使用 MTC web 控制台进行编辑。
其他资源
-
有关
move
和copy
操作的详情,请参考 MTC 工作流。 -
有关
skip
操作的详情,请参阅从迁移中排除 PVC。 - 有关文件系统和快照复制方法的详情,请参阅关于数据复制方法。
11.5.6. 使用 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
作为过滤器来过滤Secret
和ConfigMap
资源列表。
流程
更新
MigPlan
CR,使其包含 Kubernetes 资源,并可选择性地通过添加labelSelector
参数来过滤包含的资源:更新
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 对象,如
Secret
或ConfigMap
。
可选:要通过添加
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
创建一个
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