8.2. 用于直接卷迁移的 rsync 配置
MTC 中的直接卷迁移 (DVM) 使用 Rsync 在源和目标持久性卷 (PV) 间同步文件,使用两个 PV 之间的直接连接。
rsync 是一个命令行工具,允许您将文件和目录传送到本地和远程目的地。
DVM 使用的 rsync
命令针对按预期工作的集群进行了优化。
MigrationController
CR 会公开以下变量,以便在直接卷迁移中配置 rsync_options
:
变量 | 类型 | 默认值 | 描述 |
---|---|---|---|
| int | 未设置 |
当设置为一个正整数时, |
| bool |
|
在 Rsync 命令中设置 |
| bool |
|
在 Rsync 命令中设置 |
| bool |
|
在 Rsync 命令中设置 |
| bool |
|
设置 |
| string |
| 在 Rsync Pod 中启用详细的日志记录。 |
| string | 空 | 为任何其他任意选项保留。 |
-
对于所有迁移,通过上述变量设置选项是 全局的。当 Operator 成功协调
MigrationController
CR 时,配置会对将来的所有迁移生效。任何持续迁移都可以使用更新的设置,具体取决于它当前所处的步骤。因此,建议在运行迁移前应用设置。用户始终可以根据需要更新设置。 -
请谨慎使用
rsync_opt_extras
变量。使用此变量传递的任何选项都会附加到rsync
命令中,并增加。请确定在指定多个选项时添加空格。指定选项时出现任何错误都可能导致迁移失败。但是,您可以尽可能更新MigrationController
CR 以供将来的迁移使用。 -
自定义
rsync_opt_info
标志可能会对 MTC 的进度报告功能造成负面影响。但是,删除进度报告可能会具有性能优势。只有在观察到 Rsync 操作的性能无法接受时才应使用这个选项。
DVM 使用的默认配置在各种环境中测试。只要集群健康且运行良好,大多数生产环境用例都可以接受。当默认设置无法正常工作且 Rsync 操作失败时,应使用这些配置变量。
8.2.1. Rsync pod 的资源限制配置
MigrationController
CR 会公开以下变量,以便在 Rsync 上配置资源使用量要求和限制:
变量 | 类型 | Default(默认) | 描述 |
---|---|---|---|
| string |
| 源 rsync pod 的 CPU 限制 |
| string |
| 源 rsync pod 的内存限值 |
| string |
| 源 rsync pod 的 cpu 请求 |
| string |
| 源 rsync pod 的内存请求 |
| string |
| 目标 rsync pod 的 cpu 限制 |
| string |
| 目标 rsync pod 的 cpu 请求 |
| string |
| 目标 rsync pod 的内存限值 |
| string |
| 目标 rsync pod 的内存请求 |
8.2.1.1. Rsync pod 的补充组配置
如果 PVC 使用共享存储,可以通过将补充组添加到 Rsync pod 定义来配置对存储的访问,以便 pod 允许访问:
变量 | 类型 | Default(默认) | 描述 |
---|---|---|---|
| string | 未设置 | 用于源 Rsync pod 的以逗号分隔的补充组列表 |
| string | 未设置 | 目标 Rsync pod 的,以逗号分隔的补充组列表 |
例如,可以更新 MigrationController
CR 来设置前面的值:
spec: src_supplemental_groups: "1000,2000" target_supplemental_groups: "2000,3000"
8.2.1.2. rsync 重试配置
在 MTC 1.4.3 及更新的版本中,引入了重试失败的 Rsync 操作的功能。
默认情况下,迁移控制器会重试 Rsync,直到所有数据都成功从源传输至目标卷或指定重试次数为止。默认重试限制设置为 20
。
对于较大的卷,限制为 20
次重试可能不足。
您可以使用 MigrationController
CR 中的以下变量增加重试限制:
apiVersion: migration.openshift.io/v1alpha1 kind: MigrationController metadata: name: migration-controller namespace: openshift-migration spec: [...] rsync_backoff_limit: 40
在本例中,重试限制增加到 40
。
8.2.1.3. 以 root 或非 root 身份运行 Rsync
OpenShift Container Platform 环境默认启用 PodSecurityAdmission
控制器。此控制器要求集群管理员通过命名空间标签强制实施 Pod 安全标准。集群中的所有工作负载都应该运行以下 Pod 安全标准级别之一: Privileged
、Baseline
或 Restricted
。每个集群都有自己的默认策略集。
为了保证在所有环境中成功进行数据传输,MTC 1.7.5 引入了 Rsync pod 中的更改,包括默认以非 root 用户身份运行 Rsync pod。这样可确保即使不一定需要更高特权的工作负载也可以进行数据传输。这个更改是进行的,因为它最适合运行具有最低级别权限的工作负载。
8.2.1.3.1. 为数据 trannsfer 手动覆盖默认非 root 操作
虽然在大多数情况下,以非 root 用户身份运行 Rsync pod 可以正常工作,但当您以 root 用户身份在源端运行工作负载时,数据传输可能会失败。MTC 提供了为数据传输手动覆盖默认非 root 操作的方法:
- 将所有迁移配置为作为 root 在目标集群上针对所有迁移运行 Rsync pod。
- 对于每个迁移,在目标集群上以 root 用户身份运行 Rsync pod。
在这两种情况下,您必须在迁移前运行具有较高特权的工作负载的命名空间源上设置以下标签: enforce
、audit
和 warn。
要了解更多有关标签的 Pod Security Admission 和设置值的信息,请参阅 控制 pod 安全准入同步。
8.2.1.3.2. 将所有迁移的 MigrationController CR 配置为 root 或非 root
默认情况下,Rsync 作为非 root 运行。
在目标集群中,您可以将 MigrationController
CR 配置为以 root 用户身份运行 Rsync。
流程
配置
MigrationController
CR,如下所示:apiVersion: migration.openshift.io/v1alpha1 kind: MigrationController metadata: name: migration-controller namespace: openshift-migration spec: [...] migration_rsync_privileged: true
此配置将适用于所有将来的迁移。
8.2.1.3.3. 将 MigMigration CR 配置为每个迁移的根或非 root
在目标集群中,您可以使用以下非 root 选项将 MigMigration
CR 配置为以 root 或非 root 身份运行 Rsync:
- 作为特定用户 ID (UID)
- 作为一个特定组 ID (GID)
流程
要以 root 用户身份运行 Rsync,请根据本例配置
MigMigration
CR:apiVersion: migration.openshift.io/v1alpha1 kind: MigMigration metadata: name: migration-controller namespace: openshift-migration spec: [...] runAsRoot: true
要将 Rsync 作为特定用户 ID (UID)或特定组 ID (GID)运行,请根据本例配置
MigMigration
CR:apiVersion: migration.openshift.io/v1alpha1 kind: MigMigration metadata: name: migration-controller namespace: openshift-migration spec: [...] runAsUser: 10010001 runAsGroup: 3
8.2.2. MigCluster 配置
对于 MTC 中创建的每个 MigCluster
资源,在集群中的 Migration Operator 命名空间中创建一个名为 migration-cluster-config
的 ConfigMap
,其中 MigCluster 资源代表。
migration-cluster-config
允许您配置 MigCluster 特定值。Migration Operator 管理 migration-cluster-config
。
您可以使用 MigrationController
CR 中公开的变量配置 ConfigMap
中的每个值:
变量 | 类型 | 必填 | 描述 |
---|---|---|---|
| string | 否 | 用于 Stage Pod 的镜像(仅适用于 IndirectVolumeMigration) |
| string | 否 | 用于 Migration Registry 的镜像 |
| string | 否 |
数据传输的端点类型( |
| string | 否 | 用于 Rsync Pod 的镜像(仅适用于 DirectVolumeMigration) |
| bool | 否 | 是否以特权方式运行 Rsync Pod |
| bool | 否 |
是否将 Rsync Pod 作为超级特权容器运行 ( |
| string | 否 | 集群的子域 |
| int | 否 | Migration Registry 部署的就绪度超时(以秒为单位) |
| int | 否 | Migration Registry 部署的存活度超时(以秒为单位) |
| string | 否 | 在 MigCluster 中验证公开的 registry 的子目录 (如 /v2) |